diff --git a/src/Reactor/LLVMJIT.cpp b/src/Reactor/LLVMJIT.cpp
index 07dc654..0f61e07 100644
--- a/src/Reactor/LLVMJIT.cpp
+++ b/src/Reactor/LLVMJIT.cpp
@@ -258,8 +258,12 @@
 #endif
 
 		// Reactor's MemorySanitizer support depends on intercepting __emutls_get_address calls.
+#if LLVM_VERSION_MAJOR < 17
 		ASSERT(!__has_feature(memory_sanitizer) || (jitTargetMachineBuilder.getOptions().ExplicitEmulatedTLS &&
 		                                            jitTargetMachineBuilder.getOptions().EmulatedTLS));
+#else
+		ASSERT(!__has_feature(memory_sanitizer) || jitTargetMachineBuilder.getOptions().EmulatedTLS);
+#endif
 
 		auto dataLayout = jitTargetMachineBuilder.getDefaultDataLayoutForTarget();
 		ASSERT_MSG(dataLayout, "JITTargetMachineBuilder::getDefaultDataLayoutForTarget() failed");
@@ -660,13 +664,25 @@
 			auto unmangled = *name;
 #endif
 
+#if LLVM_VERSION_MAJOR < 17
+			auto toSymbol = [](void *ptr) {
+				return llvm::JITEvaluatedSymbol(
+				    static_cast<llvm::JITTargetAddress>(reinterpret_cast<uintptr_t>(ptr)),
+				    llvm::JITSymbolFlags::Exported);
+			};
+#else
+			auto toSymbol = [](void *ptr) {
+				return llvm::orc::ExecutorSymbolDef{
+					llvm::orc::ExecutorAddr(reinterpret_cast<uintptr_t>(ptr)),
+					llvm::JITSymbolFlags::Exported,
+				};
+			};
+#endif
+
 			auto it = resolver.functions.find(unmangled.str());
 			if(it != resolver.functions.end())
 			{
-				symbols[name] = llvm::JITEvaluatedSymbol(
-				    static_cast<llvm::JITTargetAddress>(reinterpret_cast<uintptr_t>(it->second)),
-				    llvm::JITSymbolFlags::Exported);
-
+				symbols[name] = toSymbol(it->second);
 				continue;
 			}
 
@@ -681,10 +697,7 @@
 
 			if(address)
 			{
-				symbols[name] = llvm::JITEvaluatedSymbol(
-				    static_cast<llvm::JITTargetAddress>(reinterpret_cast<uintptr_t>(address)),
-				    llvm::JITSymbolFlags::Exported);
-
+				symbols[name] = toSymbol(address);
 				continue;
 			}
 #endif
@@ -866,7 +879,11 @@
 			}
 			else  // Successful compilation
 			{
+#if LLVM_VERSION_MAJOR < 17
 				addresses[i] = reinterpret_cast<void *>(static_cast<intptr_t>(symbol->getAddress()));
+#else
+				addresses[i] = reinterpret_cast<void *>(static_cast<intptr_t>(symbol->getAddress().getValue()));
+#endif
 			}
 		}
 
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index fde6476..aa4aaaa 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -68,6 +68,15 @@
 // for destructing objects at exit. See crbug.com/1074222
 thread_local rr::JITBuilder *jit = nullptr;
 
+auto getNumElements(llvm::FixedVectorType *vec)
+{
+#if LLVM_VERSION_MAJOR >= 11
+	return vec->getElementCount();
+#else
+	return vec->getNumElements();
+#endif
+}
+
 llvm::Value *lowerPAVG(llvm::Value *x, llvm::Value *y)
 {
 	llvm::VectorType *ty = llvm::cast<llvm::VectorType>(x->getType());
@@ -142,13 +151,8 @@
 	llvm::Constant *one;
 	if(llvm::FixedVectorType *vectorTy = llvm::dyn_cast<llvm::FixedVectorType>(ty))
 	{
-		one = llvm::ConstantVector::getSplat(
-#if LLVM_VERSION_MAJOR >= 11
-		    vectorTy->getElementCount(),
-#else
-		    vectorTy->getNumElements(),
-#endif
-		    llvm::ConstantFP::get(vectorTy->getElementType(), 1));
+		one = llvm::ConstantVector::getSplat(getNumElements(vectorTy),
+		                                     llvm::ConstantFP::get(vectorTy->getElementType(), 1));
 	}
 	else
 	{
@@ -165,39 +169,24 @@
 [[maybe_unused]] llvm::Value *lowerVectorShl(llvm::Value *x, uint64_t scalarY)
 {
 	llvm::FixedVectorType *ty = llvm::cast<llvm::FixedVectorType>(x->getType());
-	llvm::Value *y = llvm::ConstantVector::getSplat(
-#if LLVM_VERSION_MAJOR >= 11
-	    ty->getElementCount(),
-#else
-	    ty->getNumElements(),
-#endif
-	    llvm::ConstantInt::get(ty->getElementType(), scalarY));
+	llvm::Value *y = llvm::ConstantVector::getSplat(getNumElements(ty),
+	                                                llvm::ConstantInt::get(ty->getElementType(), scalarY));
 	return jit->builder->CreateShl(x, y);
 }
 
 [[maybe_unused]] llvm::Value *lowerVectorAShr(llvm::Value *x, uint64_t scalarY)
 {
 	llvm::FixedVectorType *ty = llvm::cast<llvm::FixedVectorType>(x->getType());
-	llvm::Value *y = llvm::ConstantVector::getSplat(
-#if LLVM_VERSION_MAJOR >= 11
-	    ty->getElementCount(),
-#else
-	    ty->getNumElements(),
-#endif
-	    llvm::ConstantInt::get(ty->getElementType(), scalarY));
+	llvm::Value *y = llvm::ConstantVector::getSplat(getNumElements(ty),
+	                                                llvm::ConstantInt::get(ty->getElementType(), scalarY));
 	return jit->builder->CreateAShr(x, y);
 }
 
 [[maybe_unused]] llvm::Value *lowerVectorLShr(llvm::Value *x, uint64_t scalarY)
 {
 	llvm::FixedVectorType *ty = llvm::cast<llvm::FixedVectorType>(x->getType());
-	llvm::Value *y = llvm::ConstantVector::getSplat(
-#if LLVM_VERSION_MAJOR >= 11
-	    ty->getElementCount(),
-#else
-	    ty->getNumElements(),
-#endif
-	    llvm::ConstantInt::get(ty->getElementType(), scalarY));
+	llvm::Value *y = llvm::ConstantVector::getSplat(getNumElements(ty),
+	                                                llvm::ConstantInt::get(ty->getElementType(), scalarY));
 	return jit->builder->CreateLShr(x, y);
 }
 
@@ -360,10 +349,10 @@
 llvm::Value *clampForShift(llvm::Value *rhs)
 {
 	llvm::Value *max;
-	if(auto *vec = llvm::dyn_cast<llvm::VectorType>(rhs->getType()))
+	if(auto *vec = llvm::dyn_cast<llvm::FixedVectorType>(rhs->getType()))
 	{
 		auto N = vec->getElementType()->getIntegerBitWidth() - 1;
-		max = llvm::ConstantVector::getSplat(vec->getNumElements(), llvm::ConstantInt::get(vec->getElementType(), N));
+		max = llvm::ConstantVector::getSplat(getNumElements(vec), llvm::ConstantInt::get(vec->getElementType(), N));
 	}
 	else
 	{
