diff options
Diffstat (limited to 'llvm/lib/CodeGen/LowerEmuTLS.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LowerEmuTLS.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/llvm/lib/CodeGen/LowerEmuTLS.cpp b/llvm/lib/CodeGen/LowerEmuTLS.cpp index 529d478756d4..36b863178b47 100644 --- a/llvm/lib/CodeGen/LowerEmuTLS.cpp +++ b/llvm/lib/CodeGen/LowerEmuTLS.cpp @@ -21,6 +21,7 @@ #include "llvm/IR/Module.h" #include "llvm/InitializePasses.h" #include "llvm/Pass.h" +#include "llvm/Target/TargetMachine.h" using namespace llvm; @@ -127,12 +128,7 @@ bool LowerEmuTLS::addEmuTlsVar(Module &M, const GlobalVariable *GV) { return true; Type *GVType = GV->getValueType(); - unsigned GVAlignment = GV->getAlignment(); - if (!GVAlignment) { - // When LLVM IL declares a variable without alignment, use - // the ABI default alignment for the type. - GVAlignment = DL.getABITypeAlignment(GVType); - } + Align GVAlignment = DL.getValueOrABITypeAlignment(GV->getAlign(), GVType); // Define "__emutls_t.*" if there is InitValue GlobalVariable *EmuTlsTmplVar = nullptr; @@ -143,21 +139,20 @@ bool LowerEmuTLS::addEmuTlsVar(Module &M, const GlobalVariable *GV) { assert(EmuTlsTmplVar && "Failed to create emualted TLS initializer"); EmuTlsTmplVar->setConstant(true); EmuTlsTmplVar->setInitializer(const_cast<Constant*>(InitValue)); - EmuTlsTmplVar->setAlignment(Align(GVAlignment)); + EmuTlsTmplVar->setAlignment(GVAlignment); copyLinkageVisibility(M, GV, EmuTlsTmplVar); } // Define "__emutls_v.*" with initializer and alignment. Constant *ElementValues[4] = { ConstantInt::get(WordType, DL.getTypeStoreSize(GVType)), - ConstantInt::get(WordType, GVAlignment), - NullPtr, EmuTlsTmplVar ? EmuTlsTmplVar : NullPtr - }; + ConstantInt::get(WordType, GVAlignment.value()), NullPtr, + EmuTlsTmplVar ? EmuTlsTmplVar : NullPtr}; ArrayRef<Constant*> ElementValueArray(ElementValues, 4); EmuTlsVar->setInitializer( ConstantStruct::get(EmuTlsVarType, ElementValueArray)); - Align MaxAlignment(std::max(DL.getABITypeAlignment(WordType), - DL.getABITypeAlignment(VoidPtrType))); + Align MaxAlignment = + std::max(DL.getABITypeAlign(WordType), DL.getABITypeAlign(VoidPtrType)); EmuTlsVar->setAlignment(MaxAlignment); return true; } |