diff options
Diffstat (limited to 'llvm/lib/Transforms/Utils/ModuleUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/ModuleUtils.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Utils/ModuleUtils.cpp b/llvm/lib/Transforms/Utils/ModuleUtils.cpp index 6d17a466957e..1e243ef74df7 100644 --- a/llvm/lib/Transforms/Utils/ModuleUtils.cpp +++ b/llvm/lib/Transforms/Utils/ModuleUtils.cpp @@ -12,6 +12,7 @@ #include "llvm/Transforms/Utils/ModuleUtils.h" #include "llvm/Analysis/VectorUtils.h" +#include "llvm/ADT/SmallString.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" @@ -19,6 +20,7 @@ #include "llvm/IR/Module.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/xxhash.h" + using namespace llvm; #define DEBUG_TYPE "moduleutils" @@ -31,11 +33,9 @@ static void appendToGlobalArray(StringRef ArrayName, Module &M, Function *F, // Get the current set of static global constructors and add the new ctor // to the list. SmallVector<Constant *, 16> CurrentCtors; - StructType *EltTy = StructType::get( - IRB.getInt32Ty(), PointerType::get(FnTy, F->getAddressSpace()), - IRB.getInt8PtrTy()); - + StructType *EltTy; if (GlobalVariable *GVCtor = M.getNamedGlobal(ArrayName)) { + EltTy = cast<StructType>(GVCtor->getValueType()->getArrayElementType()); if (Constant *Init = GVCtor->getInitializer()) { unsigned n = Init->getNumOperands(); CurrentCtors.reserve(n + 1); @@ -43,6 +43,10 @@ static void appendToGlobalArray(StringRef ArrayName, Module &M, Function *F, CurrentCtors.push_back(cast<Constant>(Init->getOperand(i))); } GVCtor->eraseFromParent(); + } else { + EltTy = StructType::get( + IRB.getInt32Ty(), PointerType::get(FnTy, F->getAddressSpace()), + IRB.getInt8PtrTy()); } // Build a 3 field global_ctor entry. We don't take a comdat key. @@ -390,9 +394,7 @@ bool llvm::lowerGlobalIFuncUsersAsGlobalCtor( const DataLayout &DL = M.getDataLayout(); PointerType *TableEntryTy = - Ctx.supportsTypedPointers() - ? PointerType::get(Type::getInt8Ty(Ctx), DL.getProgramAddressSpace()) - : PointerType::get(Ctx, DL.getProgramAddressSpace()); + PointerType::get(Ctx, DL.getProgramAddressSpace()); ArrayType *FuncPtrTableTy = ArrayType::get(TableEntryTy, IFuncsToLower.size()); @@ -462,9 +464,7 @@ bool llvm::lowerGlobalIFuncUsersAsGlobalCtor( InitBuilder.CreateRetVoid(); - PointerType *ConstantDataTy = Ctx.supportsTypedPointers() - ? PointerType::get(Type::getInt8Ty(Ctx), 0) - : PointerType::get(Ctx, 0); + PointerType *ConstantDataTy = PointerType::get(Ctx, 0); // TODO: Is this the right priority? Probably should be before any other // constructors? |