LLVMReactor: set alignment when allocating stack variables
Bug: none
Change-Id: I1e9d97e95fea1e9c2863211c711feda6d794a825
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/45268
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 9e5ad40..eacba83 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -26,6 +26,9 @@
#if LLVM_VERSION_MAJOR >= 9
# include "llvm/IR/IntrinsicsX86.h"
#endif
+#if LLVM_VERSION_MAJOR >= 10
+# include "llvm/Support/Alignment.h"
+#endif
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Transforms/Coroutines.h"
@@ -747,13 +750,21 @@
llvm::Instruction *declaration;
+#if LLVM_VERSION_MAJOR >= 11
+ auto align = jit->module->getDataLayout().getPrefTypeAlign(T(type));
+#elif LLVM_VERSION_MAJOR >= 10
+ auto align = llvm::MaybeAlign(jit->module->getDataLayout().getPrefTypeAlignment(T(type)));
+#else
+ auto align = jit->module->getDataLayout().getPrefTypeAlignment(T(type));
+#endif
+
if(arraySize)
{
- declaration = new llvm::AllocaInst(T(type), 0, V(Nucleus::createConstantInt(arraySize)));
+ declaration = new llvm::AllocaInst(T(type), 0, V(Nucleus::createConstantInt(arraySize)), align);
}
else
{
- declaration = new llvm::AllocaInst(T(type), 0, (llvm::Value *)nullptr);
+ declaration = new llvm::AllocaInst(T(type), 0, (llvm::Value *)nullptr, align);
}
entryBlock.getInstList().push_front(declaration);