[llvm-branch-commits] [clang] [llvm] [NFC] Pass `DataLayout` to aggregate constant factory call sites (PR #183212)
Shilei Tian via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Feb 24 15:55:42 PST 2026
https://github.com/shiltian created https://github.com/llvm/llvm-project/pull/183212
Update callers of `ConstantArray::get`, `ConstantStruct::get`/`getAnon`,
`ConstantVector::get`, and `ConstantVector::getSplat` to pass the `DataLayout`
pointer where available.
This is preparatory work for the `ConstantPointerNull` semantic change. After
that change, aggregates containing pointer-null elements need `DataLayout` to
correctly determine whether they can collapse to `ConstantAggregateZero`.
Threading `DL` through callers now (NFC) ensures the eventual semantic change
does not break aggregate collapse for zero-null targets.
>From 3225f7ae3cf3cb7e8fff8a1eadde0fee52237f44 Mon Sep 17 00:00:00 2001
From: Shilei Tian <i at tianshilei.me>
Date: Sun, 15 Feb 2026 12:43:03 -0500
Subject: [PATCH] [NFC] Pass `DataLayout` to aggregate constant factory call
sites
Update callers of `ConstantArray::get`, `ConstantStruct::get`/`getAnon`,
`ConstantVector::get`, and `ConstantVector::getSplat` to pass the `DataLayout`
pointer where available.
This is preparatory work for the `ConstantPointerNull` semantic change. After
that change, aggregates containing pointer-null elements need `DataLayout` to
correctly determine whether they can collapse to `ConstantAggregateZero`.
Threading `DL` through callers now (NFC) ensures the eventual semantic change
does not break aggregate collapse for zero-null targets.
---
clang/lib/CodeGen/CGDecl.cpp | 13 +++--
clang/lib/CodeGen/CGException.cpp | 3 +-
clang/lib/CodeGen/CGExpr.cpp | 18 ++++---
clang/lib/CodeGen/CGExprConstant.cpp | 27 +++++-----
clang/lib/CodeGen/CGHLSLBuiltins.cpp | 5 +-
clang/lib/CodeGen/CGObjCGNU.cpp | 4 +-
clang/lib/CodeGen/CGObjCMac.cpp | 6 ++-
clang/lib/CodeGen/CGVTT.cpp | 3 +-
clang/lib/CodeGen/CodeGenModule.cpp | 17 ++++---
clang/lib/CodeGen/ConstantInitBuilder.cpp | 9 ++--
clang/lib/CodeGen/CoverageMappingGen.cpp | 14 +++---
clang/lib/CodeGen/ItaniumCXXABI.cpp | 7 +--
clang/lib/CodeGen/MicrosoftCXXABI.cpp | 36 ++++++++-----
clang/lib/CodeGen/PatternInit.cpp | 4 +-
clang/lib/CodeGen/TargetBuiltins/ARM.cpp | 13 +++--
clang/lib/CodeGen/TargetBuiltins/PPC.cpp | 2 +-
.../include/llvm/Transforms/Utils/Evaluator.h | 8 +--
llvm/lib/Analysis/ConstantFolding.cpp | 50 ++++++++++---------
llvm/lib/Analysis/InstructionSimplify.cpp | 10 ++--
llvm/lib/AsmParser/LLParser.cpp | 6 ++-
llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 ++--
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 3 +-
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 3 +-
llvm/lib/CodeGen/CodeGenPrepare.cpp | 4 +-
llvm/lib/CodeGen/GlobalMerge.cpp | 3 +-
llvm/lib/CodeGen/LowerEmuTLS.cpp | 11 ++--
llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp | 2 +-
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 2 +-
llvm/lib/CodeGen/ShadowStackGCLowering.cpp | 19 ++++---
.../Frontend/Offloading/OffloadWrapper.cpp | 41 +++++++++------
llvm/lib/Frontend/Offloading/Utility.cpp | 4 +-
llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp | 42 ++++++++--------
llvm/lib/IR/AutoUpgrade.cpp | 14 ++++--
.../AArch64/AArch64Arm64ECCallLowering.cpp | 6 ++-
.../AArch64/AArch64TargetTransformInfo.cpp | 2 +-
.../AMDGPU/AMDGPULowerModuleLDSPass.cpp | 14 +++---
llvm/lib/Target/AMDGPU/AMDGPUSwLowerLDS.cpp | 18 ++++---
.../Target/PowerPC/PPCPrepareIFuncsOnAIX.cpp | 2 +-
.../lib/Target/RISCV/RISCVPromoteConstant.cpp | 3 +-
llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp | 13 +++--
.../SPIRV/SPIRVLegalizeZeroSizeArrays.cpp | 2 +-
llvm/lib/Target/X86/X86ISelLowering.cpp | 32 +++++++-----
.../Target/X86/X86InstCombineIntrinsic.cpp | 9 ++--
.../lib/Transforms/Coroutines/CoroCleanup.cpp | 11 ++--
llvm/lib/Transforms/Coroutines/CoroSplit.cpp | 10 ++--
llvm/lib/Transforms/HipStdPar/HipStdPar.cpp | 14 ++++--
llvm/lib/Transforms/IPO/GlobalOpt.cpp | 3 +-
llvm/lib/Transforms/IPO/LowerTypeTests.cpp | 3 +-
.../lib/Transforms/IPO/WholeProgramDevirt.cpp | 16 +++---
.../InstCombine/InstCombineMulDivRem.cpp | 2 +-
.../InstCombineSimplifyDemanded.cpp | 2 +-
.../InstCombine/InstCombineVectorOps.cpp | 15 +++---
.../InstCombine/InstructionCombining.cpp | 10 ++--
.../Instrumentation/AddressSanitizer.cpp | 7 ++-
.../Instrumentation/GCOVProfiling.cpp | 27 ++++++----
.../Instrumentation/HWAddressSanitizer.cpp | 12 +++--
.../Instrumentation/InstrProfiling.cpp | 13 +++--
.../Instrumentation/MemorySanitizer.cpp | 22 +++++---
.../Instrumentation/PGOCtxProfLowering.cpp | 10 ++--
.../Instrumentation/SanitizerCoverage.cpp | 6 +--
.../Instrumentation/TypeSanitizer.cpp | 10 ++--
.../Scalar/CorrelatedValuePropagation.cpp | 9 ++--
.../Transforms/Scalar/LoopIdiomRecognize.cpp | 2 +-
llvm/lib/Transforms/Utils/CtorUtils.cpp | 7 ++-
llvm/lib/Transforms/Utils/Evaluator.cpp | 10 ++--
llvm/lib/Transforms/Utils/ModuleUtils.cpp | 23 ++++++---
.../Utils/RelLookupTableConverter.cpp | 7 +--
llvm/lib/Transforms/Utils/SanitizerStats.cpp | 8 ++-
llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 2 +-
.../Vectorize/LoadStoreVectorizer.cpp | 2 +-
.../Transforms/Vectorize/SLPVectorizer.cpp | 27 +++++-----
.../Transforms/Vectorize/VectorCombine.cpp | 5 +-
72 files changed, 483 insertions(+), 325 deletions(-)
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index a7bd2f0470cc0..5439a02cc3932 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -1087,7 +1087,8 @@ static llvm::Constant *constStructWithPadding(CodeGenModule &CGM,
}
if (NestedIntact && Values.size() == STy->getNumElements())
return constant;
- return llvm::ConstantStruct::getAnon(Values, STy->isPacked());
+ return llvm::ConstantStruct::getAnon(Values, STy->isPacked(),
+ &CGM.getDataLayout());
}
/// Replace all padding bytes in a given constant with either a pattern byte or
@@ -1120,7 +1121,7 @@ static llvm::Constant *constWithPadding(CodeGenModule &CGM, IsPattern isPattern,
if (NewElemTy == ElemTy)
return constant;
auto *NewArrayTy = llvm::ArrayType::get(NewElemTy, Size);
- return llvm::ConstantArray::get(NewArrayTy, Values);
+ return llvm::ConstantArray::get(NewArrayTy, Values, &CGM.getDataLayout());
}
// FIXME: Add handling for tail padding in vectors. Vectors don't
// have padding between or inside elements, but the total amount of
@@ -1335,11 +1336,13 @@ static llvm::Constant *replaceUndef(CodeGenModule &CGM, IsPattern isPattern,
Values[Op] = replaceUndef(CGM, isPattern, OpValue);
}
if (Ty->isStructTy())
- return llvm::ConstantStruct::get(cast<llvm::StructType>(Ty), Values);
+ return llvm::ConstantStruct::get(cast<llvm::StructType>(Ty), Values,
+ &CGM.getDataLayout());
if (Ty->isArrayTy())
- return llvm::ConstantArray::get(cast<llvm::ArrayType>(Ty), Values);
+ return llvm::ConstantArray::get(cast<llvm::ArrayType>(Ty), Values,
+ &CGM.getDataLayout());
assert(Ty->isVectorTy());
- return llvm::ConstantVector::get(Values);
+ return llvm::ConstantVector::get(Values, &CGM.getDataLayout());
}
/// EmitAutoVarDecl - Emit code and set up an entry in LocalDeclMap for a
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp
index 2f1df6e9a8a5c..e6f54db2aec8f 100644
--- a/clang/lib/CodeGen/CGException.cpp
+++ b/clang/lib/CodeGen/CGException.cpp
@@ -942,7 +942,8 @@ llvm::BasicBlock *CodeGenFunction::EmitLandingPad() {
for (llvm::Value *filterType : filterTypes)
Filters.push_back(cast<llvm::Constant>(filterType));
- llvm::Constant *FilterArray = llvm::ConstantArray::get(AType, Filters);
+ llvm::Constant *FilterArray =
+ llvm::ConstantArray::get(AType, Filters, &CGM.getDataLayout());
LPadInst->addClause(FilterArray);
// Also check whether we need a cleanup.
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index fcadd1ec8b8be..686dd9ba0d919 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -2346,7 +2346,7 @@ LValue CodeGenFunction::EmitMatrixElementExpr(const MatrixElementExpr *E) {
for (unsigned Index : Indices)
CElts.push_back(BaseElts->getAggregateElement(Index));
- llvm::Constant *CV = llvm::ConstantVector::get(CElts);
+ llvm::Constant *CV = llvm::ConstantVector::get(CElts, &CGM.getDataLayout());
return LValue::MakeExtVectorElt(
MaybeConvertMatrixAddress(Base.getExtVectorAddress(), *this), CV,
ResultType, Base.getBaseInfo(), TBAAAccessInfo());
@@ -3918,7 +3918,8 @@ llvm::Constant *CodeGenFunction::EmitCheckTypeDescriptor(QualType T) {
Builder.getInt16(TypeKind), Builder.getInt16(TypeInfo),
llvm::ConstantDataArray::getString(getLLVMContext(), Buffer)
};
- llvm::Constant *Descriptor = llvm::ConstantStruct::getAnon(Components);
+ llvm::Constant *Descriptor =
+ llvm::ConstantStruct::getAnon(Components, false, &CGM.getDataLayout());
auto *GV = new llvm::GlobalVariable(
CGM.getModule(), Descriptor->getType(),
@@ -4018,7 +4019,7 @@ llvm::Constant *CodeGenFunction::EmitCheckSourceLocation(SourceLocation Loc) {
llvm::Constant *Data[] = {Filename, Builder.getInt32(Line),
Builder.getInt32(Column)};
- return llvm::ConstantStruct::getAnon(Data);
+ return llvm::ConstantStruct::getAnon(Data, false, &CGM.getDataLayout());
}
namespace {
@@ -4207,7 +4208,8 @@ void CodeGenFunction::EmitCheck(
// Emit handler arguments and create handler function type.
if (!StaticArgs.empty()) {
- llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);
+ llvm::Constant *Info =
+ llvm::ConstantStruct::getAnon(StaticArgs, false, &CGM.getDataLayout());
auto *InfoPtr = new llvm::GlobalVariable(
CGM.getModule(), Info->getType(),
// Non-constant global is used in a handler to deduplicate reports.
@@ -4272,7 +4274,8 @@ void CodeGenFunction::EmitCfiSlowPathCheck(
llvm::CallInst *CheckCall;
llvm::FunctionCallee SlowPathFn;
if (WithDiag) {
- llvm::Constant *Info = llvm::ConstantStruct::getAnon(StaticArgs);
+ llvm::Constant *Info =
+ llvm::ConstantStruct::getAnon(StaticArgs, false, &CGM.getDataLayout());
auto *InfoPtr =
new llvm::GlobalVariable(CGM.getModule(), Info->getType(), false,
llvm::GlobalVariable::PrivateLinkage, Info);
@@ -5432,7 +5435,8 @@ EmitExtVectorElementExpr(const ExtVectorElementExpr *E) {
MatIndices.push_back(llvm::ConstantInt::get(Int32Ty, Linear));
}
- llvm::Constant *ConstIdxs = llvm::ConstantVector::get(MatIndices);
+ llvm::Constant *ConstIdxs =
+ llvm::ConstantVector::get(MatIndices, &CGM.getDataLayout());
return LValue::MakeExtVectorElt(Base.getMatrixAddress(), ConstIdxs,
E->getBase()->getType(),
Base.getBaseInfo(), TBAAAccessInfo());
@@ -5455,7 +5459,7 @@ EmitExtVectorElementExpr(const ExtVectorElementExpr *E) {
for (unsigned Index : Indices)
CElts.push_back(BaseElts->getAggregateElement(Index));
- llvm::Constant *CV = llvm::ConstantVector::get(CElts);
+ llvm::Constant *CV = llvm::ConstantVector::get(CElts, &CGM.getDataLayout());
return LValue::MakeExtVectorElt(Base.getExtVectorAddress(), CV, type,
Base.getBaseInfo(), TBAAAccessInfo());
}
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp
index 3f44243e1c35c..821abda8acb99 100644
--- a/clang/lib/CodeGen/CGExprConstant.cpp
+++ b/clang/lib/CodeGen/CGExprConstant.cpp
@@ -521,7 +521,8 @@ llvm::Constant *ConstantAggregateBuilder::buildFrom(
STy = DesiredSTy;
}
- return llvm::ConstantStruct::get(STy, Packed ? PackedElems : UnpackedElems);
+ return llvm::ConstantStruct::get(STy, Packed ? PackedElems : UnpackedElems,
+ &CGM.getDataLayout());
}
void ConstantAggregateBuilder::condense(CharUnits Offset,
@@ -549,7 +550,8 @@ void ConstantAggregateBuilder::condense(CharUnits Offset,
auto *STy = dyn_cast<llvm::StructType>(DesiredTy);
if (STy && STy->getNumElements() == 1 &&
STy->getElementType(0) == Elems[First]->getType())
- Elems[First] = llvm::ConstantStruct::get(STy, Elems[First]);
+ Elems[First] =
+ llvm::ConstantStruct::get(STy, Elems[First], &CGM.getDataLayout());
return;
}
@@ -1106,7 +1108,7 @@ EmitArrayConstant(CodeGenModule &CGM, llvm::ArrayType *DesiredType,
if (CommonElementType && NonzeroLength >= 8) {
llvm::Constant *Initial = llvm::ConstantArray::get(
llvm::ArrayType::get(CommonElementType, NonzeroLength),
- ArrayRef(Elements).take_front(NonzeroLength));
+ ArrayRef(Elements).take_front(NonzeroLength), &CGM.getDataLayout());
Elements.resize(2);
Elements[0] = Initial;
} else {
@@ -1128,7 +1130,8 @@ EmitArrayConstant(CodeGenModule &CGM, llvm::ArrayType *DesiredType,
// If all elements have the same type, just emit an array constant.
if (CommonElementType)
return llvm::ConstantArray::get(
- llvm::ArrayType::get(CommonElementType, ArrayBound), Elements);
+ llvm::ArrayType::get(CommonElementType, ArrayBound), Elements,
+ &CGM.getDataLayout());
// We have mixed types. Use a packed struct.
llvm::SmallVector<llvm::Type *, 16> Types;
@@ -1137,7 +1140,7 @@ EmitArrayConstant(CodeGenModule &CGM, llvm::ArrayType *DesiredType,
Types.push_back(Elt->getType());
llvm::StructType *SType =
llvm::StructType::get(CGM.getLLVMContext(), Types, true);
- return llvm::ConstantStruct::get(SType, Elements);
+ return llvm::ConstantStruct::get(SType, Elements, &CGM.getDataLayout());
}
// This class only needs to handle arrays, structs and unions. Outside C++11
@@ -1247,7 +1250,7 @@ class ConstExprEmitter
}
llvm::StructType *STy = llvm::StructType::get(VMContext, Types, false);
- return llvm::ConstantStruct::get(STy, Elts);
+ return llvm::ConstantStruct::get(STy, Elts, &CGM.getDataLayout());
}
case CK_AddressSpaceConversion: {
@@ -2015,7 +2018,7 @@ llvm::Constant *ConstantEmitter::emitForMemory(CodeGenModule &CGM,
llvm::ConstantAggregateZero::get(
llvm::ArrayType::get(CGM.Int8Ty, (outerSize - innerSize) / 8))
};
- return llvm::ConstantStruct::getAnon(elts);
+ return llvm::ConstantStruct::getAnon(elts, false, &CGM.getDataLayout());
}
// Zero-extend bool.
@@ -2505,7 +2508,7 @@ ConstantEmitter::tryEmitPrivate(const APValue &Value, QualType DestType,
// FIXME: the target may want to specify that this is packed.
llvm::StructType *STy =
llvm::StructType::get(Complex[0]->getType(), Complex[1]->getType());
- return llvm::ConstantStruct::get(STy, Complex);
+ return llvm::ConstantStruct::get(STy, Complex, &CGM.getDataLayout());
}
case APValue::Float: {
const llvm::APFloat &Init = Value.getFloat();
@@ -2528,7 +2531,7 @@ ConstantEmitter::tryEmitPrivate(const APValue &Value, QualType DestType,
// FIXME: the target may want to specify that this is packed.
llvm::StructType *STy =
llvm::StructType::get(Complex[0]->getType(), Complex[1]->getType());
- return llvm::ConstantStruct::get(STy, Complex);
+ return llvm::ConstantStruct::get(STy, Complex, &CGM.getDataLayout());
}
case APValue::Vector: {
unsigned NumElts = Value.getVectorLength();
@@ -2546,7 +2549,7 @@ ConstantEmitter::tryEmitPrivate(const APValue &Value, QualType DestType,
else
llvm_unreachable("unsupported vector element type");
}
- return llvm::ConstantVector::get(Inits);
+ return llvm::ConstantVector::get(Inits, &CGM.getDataLayout());
}
case APValue::AddrLabelDiff: {
const AddrLabelExpr *LHSExpr = Value.getAddrLabelDiffLHS();
@@ -2739,7 +2742,7 @@ static llvm::Constant *EmitNullConstant(CodeGenModule &CGM,
elements[i] = llvm::Constant::getNullValue(structure->getElementType(i));
}
- return llvm::ConstantStruct::get(structure, elements);
+ return llvm::ConstantStruct::get(structure, elements, &CGM.getDataLayout());
}
/// Emit the null constant for a base subobject.
@@ -2779,7 +2782,7 @@ llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) {
ConstantEmitter::emitNullForMemory(*this, ElementTy);
unsigned NumElements = CAT->getZExtSize();
SmallVector<llvm::Constant *, 8> Array(NumElements, Element);
- return llvm::ConstantArray::get(ATy, Array);
+ return llvm::ConstantArray::get(ATy, Array, &getDataLayout());
}
if (const auto *RD = T->getAsRecordDecl())
diff --git a/clang/lib/CodeGen/CGHLSLBuiltins.cpp b/clang/lib/CodeGen/CGHLSLBuiltins.cpp
index 70891eac39425..ed7896d71e86a 100644
--- a/clang/lib/CodeGen/CGHLSLBuiltins.cpp
+++ b/clang/lib/CodeGen/CGHLSLBuiltins.cpp
@@ -62,7 +62,8 @@ static Value *handleHlslClip(const CallExpr *E, CodeGenFunction *CGF) {
if (const auto *VecTy = E->getArg(0)->getType()->getAs<clang::VectorType>()) {
FZeroConst = ConstantVector::getSplat(
- ElementCount::getFixed(VecTy->getNumElements()), FZeroConst);
+ ElementCount::getFixed(VecTy->getNumElements()), FZeroConst,
+ &CGF->CGM.getDataLayout());
auto *FCompInst = CGF->Builder.CreateFCmpOLT(Op0, FZeroConst);
CMP = CGF->Builder.CreateIntrinsic(
CGF->Builder.getInt1Ty(), CGF->CGM.getHLSLRuntime().getAnyIntrinsic(),
@@ -1016,7 +1017,7 @@ Value *CodeGenFunction::EmitHLSLBuiltinExpr(unsigned BuiltinID,
? ConstantVector::getSplat(
ElementCount::getFixed(
cast<FixedVectorType>(Ty)->getNumElements()),
- ConstantFP::get(EltTy, 1.0))
+ ConstantFP::get(EltTy, 1.0), &CGM.getDataLayout())
: ConstantFP::get(EltTy, 1.0);
return Builder.CreateFDiv(One, Op0, "hlsl.rcp");
}
diff --git a/clang/lib/CodeGen/CGObjCGNU.cpp b/clang/lib/CodeGen/CGObjCGNU.cpp
index 32fd6b760ed11..401bff23f8be2 100644
--- a/clang/lib/CodeGen/CGObjCGNU.cpp
+++ b/clang/lib/CodeGen/CGObjCGNU.cpp
@@ -1358,8 +1358,8 @@ class CGObjCGNUstep2 : public CGObjCGNUstep {
llvm::Constant *GenerateProtocolList(ArrayRef<llvm::Constant*> Protocols) {
llvm::ArrayType *ProtocolArrayTy = llvm::ArrayType::get(ProtocolPtrTy,
Protocols.size());
- llvm::Constant * ProtocolArray = llvm::ConstantArray::get(ProtocolArrayTy,
- Protocols);
+ llvm::Constant *ProtocolArray = llvm::ConstantArray::get(
+ ProtocolArrayTy, Protocols, &CGM.getDataLayout());
ConstantInitBuilder builder(CGM);
auto ProtocolBuilder = builder.beginStruct();
ProtocolBuilder.addNullPointer(PtrTy);
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index e6c244547cefd..d08a58089df53 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -3233,7 +3233,8 @@ llvm::Constant *CGObjCCommonMac::EmitProtocolMethodTypes(
llvm::ArrayType *AT =
llvm::ArrayType::get(ObjCTypes.Int8PtrTy, MethodTypes.size());
- llvm::Constant *Init = llvm::ConstantArray::get(AT, MethodTypes);
+ llvm::Constant *Init =
+ llvm::ConstantArray::get(AT, MethodTypes, &CGM.getDataLayout());
StringRef Section;
if (CGM.getTriple().isOSBinFormatMachO() && ObjCABI == 2)
@@ -6120,7 +6121,8 @@ void CGObjCNonFragileABIMac::AddModuleClassList(
Symbols[i] = Container[i];
llvm::Constant *Init = llvm::ConstantArray::get(
- llvm::ArrayType::get(ObjCTypes.Int8PtrTy, Symbols.size()), Symbols);
+ llvm::ArrayType::get(ObjCTypes.Int8PtrTy, Symbols.size()), Symbols,
+ &CGM.getDataLayout());
// Section name is obtained by calling GetSectionName, which returns
// sections in the __DATA segment on MachO.
diff --git a/clang/lib/CodeGen/CGVTT.cpp b/clang/lib/CodeGen/CGVTT.cpp
index 989a07d09d50e..cf9ea78726e57 100644
--- a/clang/lib/CodeGen/CGVTT.cpp
+++ b/clang/lib/CodeGen/CGVTT.cpp
@@ -99,7 +99,8 @@ CodeGenVTables::EmitVTTDefinition(llvm::GlobalVariable *VTT,
VTTComponents.push_back(Init);
}
- llvm::Constant *Init = llvm::ConstantArray::get(ArrayType, VTTComponents);
+ llvm::Constant *Init =
+ llvm::ConstantArray::get(ArrayType, VTTComponents, &CGM.getDataLayout());
VTT->setInitializer(Init);
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index c31bcabe49016..ec7a8bdc333f3 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1082,7 +1082,8 @@ void CodeGenModule::Release() {
auto *GV = new llvm::GlobalVariable(
getModule(), ATy, false, llvm::GlobalValue::InternalLinkage,
- llvm::ConstantArray::get(ATy, UsedArray), "__clang_gpu_used_external");
+ llvm::ConstantArray::get(ATy, UsedArray, &getDataLayout()),
+ "__clang_gpu_used_external");
addCompilerUsedGlobal(GV);
}
if (LangOpts.HIP) {
@@ -3487,7 +3488,7 @@ static void emitUsed(CodeGenModule &CGM, StringRef Name,
auto *GV = new llvm::GlobalVariable(
CGM.getModule(), ATy, false, llvm::GlobalValue::AppendingLinkage,
- llvm::ConstantArray::get(ATy, UsedArray), Name);
+ llvm::ConstantArray::get(ATy, UsedArray, &CGM.getDataLayout()), Name);
GV->setSection("llvm.metadata");
}
@@ -3804,8 +3805,9 @@ void CodeGenModule::EmitGlobalAnnotations() {
return;
// Create a new global variable for the ConstantStruct in the Module.
- llvm::Constant *Array = llvm::ConstantArray::get(llvm::ArrayType::get(
- Annotations[0]->getType(), Annotations.size()), Annotations);
+ llvm::Constant *Array = llvm::ConstantArray::get(
+ llvm::ArrayType::get(Annotations[0]->getType(), Annotations.size()),
+ Annotations, &getDataLayout());
auto *gv = new llvm::GlobalVariable(getModule(), Array->getType(), false,
llvm::GlobalValue::AppendingLinkage,
Array, "llvm.global.annotations");
@@ -3866,7 +3868,8 @@ llvm::Constant *CodeGenModule::EmitAnnotationArgs(const AnnotateAttr *Attr) {
return ConstEmiter.emitAbstract(CE->getBeginLoc(), CE->getAPValueResult(),
CE->getType());
});
- auto *Struct = llvm::ConstantStruct::getAnon(LLVMArgs);
+ auto *Struct =
+ llvm::ConstantStruct::getAnon(LLVMArgs, false, &getDataLayout());
auto *GV = new llvm::GlobalVariable(getModule(), Struct->getType(), true,
llvm::GlobalValue::PrivateLinkage, Struct,
".args");
@@ -3899,7 +3902,7 @@ llvm::Constant *CodeGenModule::EmitAnnotateAttr(llvm::GlobalValue *GV,
llvm::Constant *Fields[] = {
GVInGlobalsAS, AnnoGV, UnitGV, LineNoCst, Args,
};
- return llvm::ConstantStruct::getAnon(Fields);
+ return llvm::ConstantStruct::getAnon(Fields, false, &getDataLayout());
}
void CodeGenModule::AddGlobalAnnotations(const ValueDecl *D,
@@ -4129,7 +4132,7 @@ ConstantAddress CodeGenModule::GetAddrOfMSGuidDecl(const MSGuidDecl *GD) {
llvm::ConstantDataArray::getRaw(
StringRef(reinterpret_cast<char *>(Parts.Part4And5), 8), 8,
Int8Ty)};
- Init = llvm::ConstantStruct::getAnon(Fields);
+ Init = llvm::ConstantStruct::getAnon(Fields, false, &getDataLayout());
}
auto *GV = new llvm::GlobalVariable(
diff --git a/clang/lib/CodeGen/ConstantInitBuilder.cpp b/clang/lib/CodeGen/ConstantInitBuilder.cpp
index 7b3e7aea0f647..158123c7ad30e 100644
--- a/clang/lib/CodeGen/ConstantInitBuilder.cpp
+++ b/clang/lib/CodeGen/ConstantInitBuilder.cpp
@@ -270,7 +270,8 @@ llvm::Constant *ConstantAggregateBuilderBase::finishArray(llvm::Type *eltTy) {
auto elts = llvm::ArrayRef(buffer).slice(Begin);
if (!eltTy) eltTy = elts[0]->getType();
auto type = llvm::ArrayType::get(eltTy, elts.size());
- auto constant = llvm::ConstantArray::get(type, elts);
+ auto constant =
+ llvm::ConstantArray::get(type, elts, &Builder.CGM.getDataLayout());
buffer.erase(buffer.begin() + Begin, buffer.end());
return constant;
}
@@ -288,9 +289,11 @@ ConstantAggregateBuilderBase::finishStruct(llvm::StructType *ty) {
llvm::Constant *constant;
if (ty) {
assert(ty->isPacked() == Packed);
- constant = llvm::ConstantStruct::get(ty, elts);
+ constant =
+ llvm::ConstantStruct::get(ty, elts, &Builder.CGM.getDataLayout());
} else {
- constant = llvm::ConstantStruct::getAnon(elts, Packed);
+ constant = llvm::ConstantStruct::getAnon(elts, Packed,
+ &Builder.CGM.getDataLayout());
}
buffer.erase(buffer.begin() + Begin, buffer.end());
diff --git a/clang/lib/CodeGen/CoverageMappingGen.cpp b/clang/lib/CodeGen/CoverageMappingGen.cpp
index 803037d1874b3..2a082d168ac6c 100644
--- a/clang/lib/CodeGen/CoverageMappingGen.cpp
+++ b/clang/lib/CodeGen/CoverageMappingGen.cpp
@@ -2549,8 +2549,8 @@ void CoverageMappingModuleGen::emitFunctionMappingRecord(
llvm::Constant *FunctionRecordVals[] = {
#include "llvm/ProfileData/InstrProfData.inc"
};
- auto *FuncRecordConstant =
- llvm::ConstantStruct::get(FunctionRecordTy, ArrayRef(FunctionRecordVals));
+ auto *FuncRecordConstant = llvm::ConstantStruct::get(
+ FunctionRecordTy, ArrayRef(FunctionRecordVals), &CGM.getDataLayout());
// Create the function record global.
auto *FuncRecord = new llvm::GlobalVariable(
@@ -2643,14 +2643,15 @@ void CoverageMappingModuleGen::emit() {
#define COVMAP_HEADER(Type, LLVMType, Name, Init) Init,
#include "llvm/ProfileData/InstrProfData.inc"
};
- auto CovDataHeaderVal =
- llvm::ConstantStruct::get(CovDataHeaderTy, ArrayRef(CovDataHeaderVals));
+ auto CovDataHeaderVal = llvm::ConstantStruct::get(
+ CovDataHeaderTy, ArrayRef(CovDataHeaderVals), &CGM.getDataLayout());
// Create the coverage data record
llvm::Type *CovDataTypes[] = {CovDataHeaderTy, FilenamesVal->getType()};
auto CovDataTy = llvm::StructType::get(Ctx, ArrayRef(CovDataTypes));
llvm::Constant *TUDataVals[] = {CovDataHeaderVal, FilenamesVal};
- auto CovDataVal = llvm::ConstantStruct::get(CovDataTy, ArrayRef(TUDataVals));
+ auto CovDataVal = llvm::ConstantStruct::get(CovDataTy, ArrayRef(TUDataVals),
+ &CGM.getDataLayout());
auto CovData = new llvm::GlobalVariable(
CGM.getModule(), CovDataTy, true, llvm::GlobalValue::PrivateLinkage,
CovDataVal, llvm::getCoverageMappingVarName());
@@ -2665,7 +2666,8 @@ void CoverageMappingModuleGen::emit() {
auto AddrSpace = FunctionNames.front()->getType()->getPointerAddressSpace();
auto NamesArrTy = llvm::ArrayType::get(
llvm::PointerType::get(Ctx, AddrSpace), FunctionNames.size());
- auto NamesArrVal = llvm::ConstantArray::get(NamesArrTy, FunctionNames);
+ auto NamesArrVal = llvm::ConstantArray::get(NamesArrTy, FunctionNames,
+ &CGM.getDataLayout());
// This variable will *NOT* be emitted to the object file. It is used
// to pass the list of names referenced to codegen.
new llvm::GlobalVariable(CGM.getModule(), NamesArrTy, true,
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 397db2ee59408..8129230afbf79 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -1139,7 +1139,7 @@ ItaniumCXXABI::EmitNullMemberPointer(const MemberPointerType *MPT) {
llvm::Constant *Zero = llvm::ConstantInt::get(CGM.PtrDiffTy, 0);
llvm::Constant *Values[2] = { Zero, Zero };
- return llvm::ConstantStruct::getAnon(Values);
+ return llvm::ConstantStruct::getAnon(Values, false, &CGM.getDataLayout());
}
llvm::Constant *
@@ -1239,7 +1239,7 @@ llvm::Constant *ItaniumCXXABI::BuildMemberPointer(const CXXMethodDecl *MD,
ThisAdjustment.getQuantity());
}
- return llvm::ConstantStruct::getAnon(MemPtr);
+ return llvm::ConstantStruct::getAnon(MemPtr, false, &CGM.getDataLayout());
}
llvm::Constant *ItaniumCXXABI::EmitMemberPointer(const APValue &MP,
@@ -4335,7 +4335,8 @@ llvm::Constant *ItaniumRTTIBuilder::BuildTypeInfo(
llvm_unreachable("HLSL doesn't support RTTI");
}
- GV->replaceInitializer(llvm::ConstantStruct::getAnon(Fields));
+ GV->replaceInitializer(
+ llvm::ConstantStruct::getAnon(Fields, false, &CGM.getDataLayout()));
// Export the typeinfo in the same circumstances as the vtable is exported.
auto GVDLLStorageClass = DLLStorageClass;
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
index 06fce6171eb28..4a71da50c6eeb 100644
--- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp
+++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
@@ -401,7 +401,8 @@ class MicrosoftCXXABI : public CGCXXABI {
return nullptr;
llvm::ArrayType *VDispMapTy = llvm::ArrayType::get(CGM.IntTy, Map.size());
- llvm::Constant *Init = llvm::ConstantArray::get(VDispMapTy, Map);
+ llvm::Constant *Init =
+ llvm::ConstantArray::get(VDispMapTy, Map, &CGM.getDataLayout());
llvm::GlobalValue::LinkageTypes Linkage =
SrcRD->isExternallyVisible() && DstRD->isExternallyVisible()
? llvm::GlobalValue::LinkOnceODRLinkage
@@ -2894,7 +2895,8 @@ MicrosoftCXXABI::EmitNullMemberPointer(const MemberPointerType *MPT) {
GetNullMemberPointerFields(MPT, fields);
if (fields.size() == 1)
return fields[0];
- llvm::Constant *Res = llvm::ConstantStruct::getAnon(fields);
+ llvm::Constant *Res =
+ llvm::ConstantStruct::getAnon(fields, false, &CGM.getDataLayout());
assert(Res->getType() == ConvertMemberPointerType(MPT));
return Res;
}
@@ -2930,7 +2932,7 @@ MicrosoftCXXABI::EmitFullMemberPointer(llvm::Constant *FirstField,
if (inheritanceModelHasVBTableOffsetField(Inheritance))
fields.push_back(llvm::ConstantInt::get(CGM.IntTy, VBTableIndex));
- return llvm::ConstantStruct::getAnon(fields);
+ return llvm::ConstantStruct::getAnon(fields, false, &CGM.getDataLayout());
}
llvm::Constant *
@@ -3840,7 +3842,8 @@ llvm::GlobalVariable *MSRTTIBuilder::getClassHierarchyDescriptor() {
Bases->getValueType(), Bases,
llvm::ArrayRef<llvm::Value *>(GEPIndices))),
};
- CHD->setInitializer(llvm::ConstantStruct::get(Type, Fields));
+ CHD->setInitializer(
+ llvm::ConstantStruct::get(Type, Fields, &CGM.getDataLayout()));
return CHD;
}
@@ -3872,7 +3875,8 @@ MSRTTIBuilder::getBaseClassArray(SmallVectorImpl<MSRTTIClass> &Classes) {
BaseClassArrayData.push_back(
ABI.getImageRelativeConstant(getBaseClassDescriptor(Class)));
BaseClassArrayData.push_back(llvm::Constant::getNullValue(PtrType));
- BCA->setInitializer(llvm::ConstantArray::get(ArrType, BaseClassArrayData));
+ BCA->setInitializer(llvm::ConstantArray::get(ArrType, BaseClassArrayData,
+ &CGM.getDataLayout()));
return BCA;
}
@@ -3920,7 +3924,8 @@ MSRTTIBuilder::getBaseClassDescriptor(const MSRTTIClass &Class) {
ABI.getImageRelativeConstant(
MSRTTIBuilder(ABI, Class.RD).getClassHierarchyDescriptor()),
};
- BCD->setInitializer(llvm::ConstantStruct::get(Type, Fields));
+ BCD->setInitializer(
+ llvm::ConstantStruct::get(Type, Fields, &CGM.getDataLayout()));
return BCD;
}
@@ -3965,7 +3970,8 @@ MSRTTIBuilder::getCompleteObjectLocator(const VPtrInfo &Info) {
llvm::ArrayRef<llvm::Constant *> FieldsRef(Fields);
if (!ABI.isImageRelative())
FieldsRef = FieldsRef.drop_back();
- COL->setInitializer(llvm::ConstantStruct::get(Type, FieldsRef));
+ COL->setInitializer(
+ llvm::ConstantStruct::get(Type, FieldsRef, &CGM.getDataLayout()));
if (COL->isWeakForLinker())
COL->setComdat(CGM.getModule().getOrInsertComdat(COL->getName()));
return COL;
@@ -4067,7 +4073,8 @@ llvm::Constant *MicrosoftCXXABI::getAddrOfRTTIDescriptor(QualType Type) {
auto *Var = new llvm::GlobalVariable(
CGM.getModule(), TypeDescriptorType, /*isConstant=*/false,
getLinkageForRTTI(Type),
- llvm::ConstantStruct::get(TypeDescriptorType, Fields),
+ llvm::ConstantStruct::get(TypeDescriptorType, Fields,
+ &CGM.getDataLayout()),
MangledName);
if (Var->isWeakForLinker())
Var->setComdat(CGM.getModule().getOrInsertComdat(Var->getName()));
@@ -4315,7 +4322,8 @@ llvm::Constant *MicrosoftCXXABI::getCatchableType(QualType T,
llvm::StructType *CTType = getCatchableTypeType();
auto *GV = new llvm::GlobalVariable(
CGM.getModule(), CTType, /*isConstant=*/true, getLinkageForRTTI(T),
- llvm::ConstantStruct::get(CTType, Fields), MangledName);
+ llvm::ConstantStruct::get(CTType, Fields, &CGM.getDataLayout()),
+ MangledName);
GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
GV->setSection(".xdata");
if (GV->isWeakForLinker())
@@ -4422,8 +4430,8 @@ llvm::GlobalVariable *MicrosoftCXXABI::getCatchableTypeArray(QualType T) {
llvm::Constant *Fields[] = {
llvm::ConstantInt::get(CGM.IntTy, NumEntries), // NumEntries
llvm::ConstantArray::get(
- AT, llvm::ArrayRef(CatchableTypes.begin(),
- CatchableTypes.end())) // CatchableTypes
+ AT, llvm::ArrayRef(CatchableTypes.begin(), CatchableTypes.end()),
+ &CGM.getDataLayout()) // CatchableTypes
};
SmallString<256> MangledName;
{
@@ -4432,7 +4440,8 @@ llvm::GlobalVariable *MicrosoftCXXABI::getCatchableTypeArray(QualType T) {
}
CTA = new llvm::GlobalVariable(
CGM.getModule(), CTAType, /*isConstant=*/true, getLinkageForRTTI(T),
- llvm::ConstantStruct::get(CTAType, Fields), MangledName);
+ llvm::ConstantStruct::get(CTAType, Fields, &CGM.getDataLayout()),
+ MangledName);
CTA->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
CTA->setSection(".xdata");
if (CTA->isWeakForLinker())
@@ -4498,7 +4507,8 @@ llvm::GlobalVariable *MicrosoftCXXABI::getThrowInfo(QualType T) {
};
auto *GV = new llvm::GlobalVariable(
CGM.getModule(), TIType, /*isConstant=*/true, getLinkageForRTTI(T),
- llvm::ConstantStruct::get(TIType, Fields), MangledName.str());
+ llvm::ConstantStruct::get(TIType, Fields, &CGM.getDataLayout()),
+ MangledName.str());
GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
GV->setSection(".xdata");
if (GV->isWeakForLinker())
diff --git a/clang/lib/CodeGen/PatternInit.cpp b/clang/lib/CodeGen/PatternInit.cpp
index b5716e72d678d..5092300178505 100644
--- a/clang/lib/CodeGen/PatternInit.cpp
+++ b/clang/lib/CodeGen/PatternInit.cpp
@@ -68,7 +68,7 @@ llvm::Constant *clang::CodeGen::initializationPatternFor(CodeGenModule &CGM,
llvm::SmallVector<llvm::Constant *, 8> Element(
ArrTy->getNumElements(),
initializationPatternFor(CGM, ArrTy->getElementType()));
- return llvm::ConstantArray::get(ArrTy, Element);
+ return llvm::ConstantArray::get(ArrTy, Element, &CGM.getDataLayout());
}
// Note: this doesn't touch struct padding. It will initialize as much union
@@ -81,5 +81,5 @@ llvm::Constant *clang::CodeGen::initializationPatternFor(CodeGenModule &CGM,
llvm::SmallVector<llvm::Constant *, 8> Struct(StructTy->getNumElements());
for (unsigned El = 0; El != Struct.size(); ++El)
Struct[El] = initializationPatternFor(CGM, StructTy->getElementType(El));
- return llvm::ConstantStruct::get(StructTy, Struct);
+ return llvm::ConstantStruct::get(StructTy, Struct, &CGM.getDataLayout());
}
diff --git a/clang/lib/CodeGen/TargetBuiltins/ARM.cpp b/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
index a04f5e32c18ad..e264474383b1d 100644
--- a/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
+++ b/clang/lib/CodeGen/TargetBuiltins/ARM.cpp
@@ -413,7 +413,7 @@ static llvm::VectorType *GetFloatNeonType(CodeGenFunction *CGF,
Value *CodeGenFunction::EmitNeonSplat(Value *V, Constant *C,
const ElementCount &Count) {
- Value *SV = llvm::ConstantVector::getSplat(Count, C);
+ Value *SV = llvm::ConstantVector::getSplat(Count, C, &CGM.getDataLayout());
return Builder.CreateShuffleVector(V, V, SV, "lane");
}
@@ -3315,7 +3315,8 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
// Extract the other lane.
Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
int Lane = cast<ConstantInt>(Ops[2])->getZExtValue();
- Value *SV = llvm::ConstantVector::get(ConstantInt::get(Int32Ty, 1-Lane));
+ Value *SV = llvm::ConstantVector::get(
+ {ConstantInt::get(Int32Ty, 1 - Lane)}, &CGM.getDataLayout());
Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV);
// Load the value as a one-element vector.
Ty = llvm::FixedVectorType::get(VTy->getElementType(), 1);
@@ -3383,7 +3384,8 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
// a one-element vector and avoid poor code for i64 in the backend.
if (VTy->getElementType()->isIntegerTy(64)) {
Ops[1] = Builder.CreateBitCast(Ops[1], Ty);
- Value *SV = llvm::ConstantVector::get(cast<llvm::Constant>(Ops[2]));
+ Value *SV = llvm::ConstantVector::get({cast<llvm::Constant>(Ops[2])},
+ &CGM.getDataLayout());
Ops[1] = Builder.CreateShuffleVector(Ops[1], Ops[1], SV);
Ops[2] = getAlignmentValue32(PtrOp0);
llvm::Type *Tys[] = {Int8PtrTy, Ops[1]->getType()};
@@ -6741,7 +6743,8 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
VTy->getNumElements() * 2);
Ops[2] = Builder.CreateBitCast(Ops[2], STy);
Value *SV = llvm::ConstantVector::getSplat(VTy->getElementCount(),
- cast<ConstantInt>(Ops[3]));
+ cast<ConstantInt>(Ops[3]),
+ &CGM.getDataLayout());
Ops[2] = Builder.CreateShuffleVector(Ops[2], Ops[2], SV, "lane");
return emitCallMaybeConstrainedFPBuiltin(
@@ -7961,7 +7964,7 @@ BuildVector(ArrayRef<llvm::Value*> Ops) {
SmallVector<llvm::Constant*, 16> CstOps;
for (llvm::Value *Op : Ops)
CstOps.push_back(cast<Constant>(Op));
- return llvm::ConstantVector::get(CstOps);
+ return llvm::ConstantVector::get(CstOps, &CGM.getDataLayout());
}
// Otherwise, insertelement the values to build the vector.
diff --git a/clang/lib/CodeGen/TargetBuiltins/PPC.cpp b/clang/lib/CodeGen/TargetBuiltins/PPC.cpp
index 6568959351a5d..dc374d3c3d2a0 100644
--- a/clang/lib/CodeGen/TargetBuiltins/PPC.cpp
+++ b/clang/lib/CodeGen/TargetBuiltins/PPC.cpp
@@ -408,7 +408,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
SmallVector<Constant *, 16> Consts;
for (int Idx = 0; Idx < 16; Idx++)
Consts.push_back(Builder.getInt8(NumBytes + Idx));
- Value *Mask2 = ConstantVector::get(Consts);
+ Value *Mask2 = ConstantVector::get(Consts, &CGM.getDataLayout());
return Builder.CreateBitCast(
Builder.CreateCall(Vperm, {Zero, AllElts, Mask2}, "shuffle2"), ResTy);
}
diff --git a/llvm/include/llvm/Transforms/Utils/Evaluator.h b/llvm/include/llvm/Transforms/Utils/Evaluator.h
index 118037625421a..712d90f8b571d 100644
--- a/llvm/include/llvm/Transforms/Utils/Evaluator.h
+++ b/llvm/include/llvm/Transforms/Utils/Evaluator.h
@@ -60,10 +60,10 @@ class Evaluator {
return cast<MutableAggregate *>(Val)->Ty;
}
- Constant *toConstant() const {
+ Constant *toConstant(const DataLayout &DL) const {
if (auto *C = dyn_cast_if_present<Constant *>(Val))
return C;
- return cast<MutableAggregate *>(Val)->toConstant();
+ return cast<MutableAggregate *>(Val)->toConstant(DL);
}
Constant *read(Type *Ty, APInt Offset, const DataLayout &DL) const;
@@ -75,7 +75,7 @@ class Evaluator {
SmallVector<MutableValue> Elements;
MutableAggregate(Type *Ty) : Ty(Ty) {}
- Constant *toConstant() const;
+ Constant *toConstant(const DataLayout &DL) const;
};
public:
@@ -102,7 +102,7 @@ class Evaluator {
DenseMap<GlobalVariable *, Constant *> getMutatedInitializers() const {
DenseMap<GlobalVariable *, Constant *> Result;
for (const auto &Pair : MutatedMemory)
- Result[Pair.first] = Pair.second.toConstant();
+ Result[Pair.first] = Pair.second.toConstant(DL);
return Result;
}
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index ae4554b0ab837..a96c0f0b086ef 100644
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -155,7 +155,7 @@ Constant *FoldBitCast(Constant *C, Type *DestTy, const DataLayout &DL) {
if (!isa<VectorType>(C->getType()) &&
(isa<ConstantFP>(C) || isa<ConstantInt>(C))) {
Constant *Ops = C; // don't take the address of C!
- return FoldBitCast(ConstantVector::get(Ops), DestTy, DL);
+ return FoldBitCast(ConstantVector::get(Ops, &DL), DestTy, DL);
}
// Some of what follows may extend to cover scalable vectors but the current
@@ -258,7 +258,7 @@ Constant *FoldBitCast(Constant *C, Type *DestTy, const DataLayout &DL) {
}
Result.push_back(Elt);
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
// Handle: bitcast (<2 x i64> <i64 0, i64 1> to <4 x i32>)
@@ -294,7 +294,7 @@ Constant *FoldBitCast(Constant *C, Type *DestTy, const DataLayout &DL) {
}
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
} // end anonymous namespace
@@ -1128,7 +1128,7 @@ ConstantFoldConstantImpl(const Constant *C, const DataLayout &DL,
}
assert(isa<ConstantVector>(C));
- return ConstantVector::get(Ops);
+ return ConstantVector::get(Ops, &DL);
}
} // end anonymous namespace
@@ -4147,7 +4147,7 @@ static Constant *ConstantFoldFixedVectorCall(
}
if (NewElements.size() != FVTy->getNumElements())
return nullptr;
- return ConstantVector::get(NewElements);
+ return ConstantVector::get(NewElements, &DL);
}
case Intrinsic::arm_mve_vctp8:
case Intrinsic::arm_mve_vctp16:
@@ -4164,7 +4164,7 @@ static Constant *ConstantFoldFixedVectorCall(
else
NCs.push_back(ConstantInt::getFalse(Ty));
}
- return ConstantVector::get(NCs);
+ return ConstantVector::get(NCs, &DL);
}
return nullptr;
}
@@ -4210,7 +4210,7 @@ static Constant *ConstantFoldFixedVectorCall(
Result[I - StartingIndex] = Elt;
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
case Intrinsic::vector_insert: {
Constant *Vec = Operands[0];
@@ -4238,7 +4238,7 @@ static Constant *ConstantFoldFixedVectorCall(
return nullptr;
Result[I] = Elt;
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
case Intrinsic::vector_interleave2:
case Intrinsic::vector_interleave3:
@@ -4258,7 +4258,7 @@ static Constant *ConstantFoldFixedVectorCall(
Result[NumOperands * I + J] = Elt;
}
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
case Intrinsic::wasm_dot: {
unsigned NumElements =
@@ -4282,7 +4282,7 @@ static Constant *ConstantFoldFixedVectorCall(
Result[I] = ConstantInt::getSigned(Ty, IAdd, /*ImplicitTrunc=*/true);
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
default:
break;
@@ -4312,7 +4312,7 @@ static Constant *ConstantFoldFixedVectorCall(
Result[I] = Folded;
}
- return ConstantVector::get(Result);
+ return ConstantVector::get(Result, &DL);
}
static Constant *ConstantFoldScalableVectorCall(
@@ -4348,7 +4348,7 @@ static Constant *ConstantFoldScalableVectorCall(
if (!llvm::all_equal(Operands))
return nullptr;
- return ConstantVector::getSplat(SVTy->getElementCount(), SplatVal);
+ return ConstantVector::getSplat(SVTy->getElementCount(), SplatVal, &DL);
}
default:
break;
@@ -4376,7 +4376,7 @@ static Constant *ConstantFoldScalableVectorCall(
Name, IntrinsicID, SVTy->getElementType(), SplatOps, TLI, Call);
if (!Folded)
return nullptr;
- return ConstantVector::getSplat(SVTy->getElementCount(), Folded);
+ return ConstantVector::getSplat(SVTy->getElementCount(), Folded, &DL);
}
static std::pair<Constant *, Constant *>
@@ -4425,14 +4425,16 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID,
return nullptr;
}
- return ConstantStruct::get(StTy, ConstantVector::get(Results0),
- ConstantVector::get(Results1));
+ return ConstantStruct::get(StTy,
+ {ConstantVector::get(Results0, &DL),
+ ConstantVector::get(Results1, &DL)},
+ &DL);
}
auto [Result0, Result1] = ConstantFoldScalarFrexpCall(Operands[0], Ty1);
if (!Result0)
return nullptr;
- return ConstantStruct::get(StTy, Result0, Result1);
+ return ConstantStruct::get(StTy, {Result0, Result1}, &DL);
}
case Intrinsic::sincos: {
Type *Ty = StTy->getContainedType(0);
@@ -4459,14 +4461,16 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID,
return nullptr;
}
- return ConstantStruct::get(StTy, ConstantVector::get(SinResults),
- ConstantVector::get(CosResults));
+ return ConstantStruct::get(StTy,
+ {ConstantVector::get(SinResults, &DL),
+ ConstantVector::get(CosResults, &DL)},
+ &DL);
}
auto [SinResult, CosResult] = ConstantFoldScalarSincosCall(Operands[0]);
if (!SinResult || !CosResult)
return nullptr;
- return ConstantStruct::get(StTy, SinResult, CosResult);
+ return ConstantStruct::get(StTy, {SinResult, CosResult}, &DL);
}
case Intrinsic::vector_deinterleave2:
case Intrinsic::vector_deinterleave3:
@@ -4483,9 +4487,9 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID,
VecTy->getElementCount().divideCoefficientBy(NumResults);
if (auto *EltC = Vec->getSplatValue()) {
- auto *ResultVec = ConstantVector::getSplat(ResultEC, EltC);
+ auto *ResultVec = ConstantVector::getSplat(ResultEC, EltC, &DL);
SmallVector<Constant *, 8> Results(NumResults, ResultVec);
- return ConstantStruct::get(StTy, Results);
+ return ConstantStruct::get(StTy, Results, &DL);
}
if (!ResultEC.isFixed())
@@ -4501,9 +4505,9 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID,
return nullptr;
Elements[J] = Elt;
}
- Results[I] = ConstantVector::get(Elements);
+ Results[I] = ConstantVector::get(Elements, &DL);
}
- return ConstantStruct::get(StTy, Results);
+ return ConstantStruct::get(StTy, Results, &DL);
}
default:
// TODO: Constant folding of vector intrinsics that fall through here does
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp
index 94145f74d8531..31440794adf80 100644
--- a/llvm/lib/Analysis/InstructionSimplify.cpp
+++ b/llvm/lib/Analysis/InstructionSimplify.cpp
@@ -701,7 +701,7 @@ static Constant *computePointerDifference(const DataLayout &DL, Value *LHS,
// = LHSOffset - RHSOffset
Constant *Res = ConstantInt::get(LHS->getContext(), LHSOffset - RHSOffset);
if (auto *VecTy = dyn_cast<VectorType>(LHS->getType()))
- Res = ConstantVector::getSplat(VecTy->getElementCount(), Res);
+ Res = ConstantVector::getSplat(VecTy->getElementCount(), Res, &DL);
return Res;
}
@@ -5195,7 +5195,7 @@ static Value *simplifySelectInst(Value *Cond, Value *TrueVal, Value *FalseVal,
break;
}
if (NewC.size() == NumElts)
- return ConstantVector::get(NewC);
+ return ConstantVector::get(NewC, &Q.DL);
}
if (Value *V =
@@ -5756,7 +5756,7 @@ static Value *simplifyShuffleVectorInst(Value *Op0, Value *Op1,
for (unsigned i = 0; i != MaskNumElts; ++i)
if (Indices[i] == -1)
VecC[i] = PoisonValue::get(C->getType());
- return ConstantVector::get(VecC);
+ return ConstantVector::get(VecC, &Q.DL);
}
}
@@ -7131,7 +7131,7 @@ Value *llvm::simplifyBinaryIntrinsic(Intrinsic::ID IID, Type *ReturnType,
// Handle splat vectors (including scalable vectors)
OptResult = OptimizeConstMinMax(SplatVal, IID, Call, &NewConst);
if (OptResult == MinMaxOptResult::UseNewConstVal)
- NewConst = ConstantVector::getSplat(ElemCount, NewConst);
+ NewConst = ConstantVector::getSplat(ElemCount, NewConst, &Q.DL);
} else if (ElemCount.isFixed()) {
// Storage to build up new const return value (with NaNs quieted)
@@ -7161,7 +7161,7 @@ Value *llvm::simplifyBinaryIntrinsic(Intrinsic::ID IID, Type *ReturnType,
OptResult = ElemResult;
}
if (OptResult == MinMaxOptResult::UseNewConstVal)
- NewConst = ConstantVector::get(NewC);
+ NewConst = ConstantVector::get(NewC, &Q.DL);
}
} else {
// Handle scalar inputs
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 09b030b28dce8..a0a88eeb5d5c7 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -4203,7 +4203,8 @@ bool LLParser::parseValID(ValID &ID, PerFunctionState *PFS, Type *ExpectedTy) {
" is not of type '" +
getTypeString(Elts[0]->getType()));
- ID.ConstantVal = ConstantVector::get(Elts);
+ const auto &DL = M->getDataLayout();
+ ID.ConstantVal = ConstantVector::get(Elts, &DL);
ID.Kind = ValID::t_Constant;
return false;
}
@@ -6816,8 +6817,9 @@ bool LLParser::convertValIDToValue(Type *Ty, ValID &ID, Value *&V,
"element " + Twine(i) +
" of struct initializer doesn't match struct element type");
+ const auto &DL = M->getDataLayout();
V = ConstantStruct::get(
- ST, ArrayRef(ID.ConstantStructElts.get(), ID.UIntVal));
+ ST, ArrayRef(ID.ConstantStructElts.get(), ID.UIntVal), &DL);
} else
return error(ID.Loc, "constant expression type mismatch");
return false;
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index c0807c7be3e4f..40f10dd7ca5d7 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -1685,7 +1685,8 @@ Expected<Value *> BitcodeReader::materializeValue(unsigned StartValID,
if (Op->getType() != Ty)
return error("Incorrect type in struct initializer");
- C = ConstantStruct::get(ST, ConstOps);
+ const auto *DL = TheModule ? &TheModule->getDataLayout() : nullptr;
+ C = ConstantStruct::get(ST, ConstOps, DL);
break;
}
case BitcodeConstant::ConstantArrayOpcode: {
@@ -1697,7 +1698,8 @@ Expected<Value *> BitcodeReader::materializeValue(unsigned StartValID,
if (Op->getType() != AT->getElementType())
return error("Incorrect type in array initializer");
- C = ConstantArray::get(AT, ConstOps);
+ const auto *DL = TheModule ? &TheModule->getDataLayout() : nullptr;
+ C = ConstantArray::get(AT, ConstOps, DL);
break;
}
case BitcodeConstant::ConstantVectorOpcode: {
@@ -1709,7 +1711,8 @@ Expected<Value *> BitcodeReader::materializeValue(unsigned StartValID,
if (Op->getType() != VT->getElementType())
return error("Incorrect type in vector initializer");
- C = ConstantVector::get(ConstOps);
+ const auto *DL = TheModule ? &TheModule->getDataLayout() : nullptr;
+ C = ConstantVector::get(ConstOps, DL);
break;
}
case Instruction::GetElementPtr:
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index cc0491bd8577f..7a0523edf7df5 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -5924,9 +5924,10 @@ void llvm::embedBitcodeInModule(llvm::Module &M, llvm::MemoryBufferRef Buf,
return;
// Recreate llvm.compiler.used.
+ const auto &DL = M.getDataLayout();
ArrayType *ATy = ArrayType::get(UsedElementType, UsedArray.size());
auto *NewUsed = new GlobalVariable(
M, ATy, false, llvm::GlobalValue::AppendingLinkage,
- llvm::ConstantArray::get(ATy, UsedArray), "llvm.compiler.used");
+ llvm::ConstantArray::get(ATy, UsedArray, &DL), "llvm.compiler.used");
NewUsed->setSection("llvm.metadata");
}
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 3225c5b875acf..3625775d343b4 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -2763,7 +2763,8 @@ static void tagGlobalDefinition(Module &M, GlobalVariable *G) {
llvm::SmallVector<uint8_t> Init(NewSize - SizeInBytes, 0);
Constant *Padding = ConstantDataArray::get(M.getContext(), Init);
Constant *Initializer = G->getInitializer();
- Initializer = ConstantStruct::getAnon({Initializer, Padding});
+ Initializer = ConstantStruct::getAnon({Initializer, Padding},
+ /*Packed=*/false, &M.getDataLayout());
auto *NewGV = new GlobalVariable(
M, Initializer->getType(), G->isConstant(), G->getLinkage(),
Initializer, "", G, G->getThreadLocalMode(), G->getAddressSpace());
diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/CodeGenPrepare.cpp
index 537b91bc39e0e..c471b445d8d21 100644
--- a/llvm/lib/CodeGen/CodeGenPrepare.cpp
+++ b/llvm/lib/CodeGen/CodeGenPrepare.cpp
@@ -8289,7 +8289,7 @@ class VectorPromoteHelper {
ElementCount EC = cast<VectorType>(getTransitionType())->getElementCount();
if (UseSplat)
- return ConstantVector::getSplat(EC, Val);
+ return ConstantVector::getSplat(EC, Val, &DL);
if (!EC.isScalable()) {
SmallVector<Constant *, 4> ConstVec;
@@ -8300,7 +8300,7 @@ class VectorPromoteHelper {
else
ConstVec.push_back(PoisonVal);
}
- return ConstantVector::get(ConstVec);
+ return ConstantVector::get(ConstVec, &DL);
} else
llvm_unreachable(
"Generate scalable vector for non-splat is unimplemented");
diff --git a/llvm/lib/CodeGen/GlobalMerge.cpp b/llvm/lib/CodeGen/GlobalMerge.cpp
index 37f0bcdee10db..1ef3a5452ef90 100644
--- a/llvm/lib/CodeGen/GlobalMerge.cpp
+++ b/llvm/lib/CodeGen/GlobalMerge.cpp
@@ -540,7 +540,8 @@ bool GlobalMergeImpl::doMerge(const SmallVectorImpl<GlobalVariable *> &Globals,
: GlobalValue::InternalLinkage;
// Use a packed struct so we can control alignment.
StructType *MergedTy = StructType::get(M.getContext(), Tys, true);
- Constant *MergedInit = ConstantStruct::get(MergedTy, Inits);
+ const auto &DL = M.getDataLayout();
+ Constant *MergedInit = ConstantStruct::get(MergedTy, Inits, &DL);
// On Darwin external linkage needs to be preserved, otherwise
// dsymutil cannot preserve the debug info for the merged
diff --git a/llvm/lib/CodeGen/LowerEmuTLS.cpp b/llvm/lib/CodeGen/LowerEmuTLS.cpp
index 3bcf1fad53a42..581d1f72243d9 100644
--- a/llvm/lib/CodeGen/LowerEmuTLS.cpp
+++ b/llvm/lib/CodeGen/LowerEmuTLS.cpp
@@ -39,7 +39,7 @@ class LowerEmuTLS : public ModulePass {
bool runOnModule(Module &M) override;
};
-}
+} // namespace
static bool addEmuTlsVar(Module &M, const GlobalVariable *GV);
@@ -94,7 +94,7 @@ bool LowerEmuTLS::runOnModule(Module &M) {
return false;
bool Changed = false;
- SmallVector<const GlobalVariable*, 8> TlsVars;
+ SmallVector<const GlobalVariable *, 8> TlsVars;
for (const auto &G : M.globals()) {
if (G.isThreadLocal())
TlsVars.append({&G});
@@ -111,7 +111,7 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
std::string EmuTlsVarName = ("__emutls_v." + GV->getName()).str();
GlobalVariable *EmuTlsVar = M.getNamedGlobal(EmuTlsVarName);
if (EmuTlsVar)
- return false; // It has been added before.
+ return false; // It has been added before.
const DataLayout &DL = M.getDataLayout();
Constant *NullPtr = ConstantPointerNull::get(VoidPtrType);
@@ -155,7 +155,7 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
EmuTlsTmplVar = M.getOrInsertGlobal(EmuTlsTmplName, GVType);
assert(EmuTlsTmplVar && "Failed to create emualted TLS initializer");
EmuTlsTmplVar->setConstant(true);
- EmuTlsTmplVar->setInitializer(const_cast<Constant*>(InitValue));
+ EmuTlsTmplVar->setInitializer(const_cast<Constant *>(InitValue));
EmuTlsTmplVar->setAlignment(GVAlignment);
copyLinkageVisibility(M, GV, EmuTlsTmplVar);
}
@@ -165,7 +165,8 @@ bool addEmuTlsVar(Module &M, const GlobalVariable *GV) {
ConstantInt::get(WordType, DL.getTypeStoreSize(GVType)),
ConstantInt::get(WordType, GVAlignment.value()), NullPtr,
EmuTlsTmplVar ? EmuTlsTmplVar : NullPtr};
- EmuTlsVar->setInitializer(ConstantStruct::get(EmuTlsVarType, ElementValues));
+ EmuTlsVar->setInitializer(
+ ConstantStruct::get(EmuTlsVarType, ElementValues, &DL));
Align MaxAlignment =
std::max(DL.getABITypeAlign(WordType), DL.getABITypeAlign(VoidPtrType));
EmuTlsVar->setAlignment(MaxAlignment);
diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
index 0544995f979f7..98e6a6867985a 100644
--- a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -314,7 +314,7 @@ static Constant *getMemSetPattern16Value(MemSetPatternInst *Inst,
// Otherwise, we'll use an array of the constants.
uint64_t ArraySize = 16 / Size;
ArrayType *AT = ArrayType::get(V->getType(), ArraySize);
- return ConstantArray::get(AT, std::vector<Constant *>(ArraySize, C));
+ return ConstantArray::get(AT, std::vector<Constant *>(ArraySize, C), &DL);
}
// TODO: Handle atomic memcpy and memcpy.inline
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index dab32cbf26053..ce9a1d80c34fc 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -29850,7 +29850,7 @@ SDValue DAGCombiner::convertSelectOfFPConstantsToLoadOffset(
const DataLayout &TD = DAG.getDataLayout();
// Create a ConstantArray of the two constants.
- Constant *CA = ConstantArray::get(ArrayType::get(FPTy, 2), Elts);
+ Constant *CA = ConstantArray::get(ArrayType::get(FPTy, 2), Elts, &TD);
SDValue CPIdx = DAG.getConstantPool(CA, TLI.getPointerTy(DAG.getDataLayout()),
TD.getPrefTypeAlign(FPTy));
Align Alignment = cast<ConstantPoolSDNode>(CPIdx)->getAlign();
diff --git a/llvm/lib/CodeGen/ShadowStackGCLowering.cpp b/llvm/lib/CodeGen/ShadowStackGCLowering.cpp
index 000d6d842c6be..34da16faee053 100644
--- a/llvm/lib/CodeGen/ShadowStackGCLowering.cpp
+++ b/llvm/lib/CodeGen/ShadowStackGCLowering.cpp
@@ -80,8 +80,8 @@ class ShadowStackGCLoweringImpl {
Type *Ty, Value *BasePtr, int Idx1,
const char *Name);
static GetElementPtrInst *CreateGEP(LLVMContext &Context, IRBuilder<> &B,
- Type *Ty, Value *BasePtr, int Idx1, int Idx2,
- const char *Name);
+ Type *Ty, Value *BasePtr, int Idx1,
+ int Idx2, const char *Name);
};
class ShadowStackGCLowering : public FunctionPass {
@@ -139,11 +139,14 @@ INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
INITIALIZE_PASS_END(ShadowStackGCLowering, DEBUG_TYPE,
"Shadow Stack GC Lowering", false, false)
-FunctionPass *llvm::createShadowStackGCLoweringPass() { return new ShadowStackGCLowering(); }
+FunctionPass *llvm::createShadowStackGCLoweringPass() {
+ return new ShadowStackGCLowering();
+}
ShadowStackGCLowering::ShadowStackGCLowering() : FunctionPass(ID) {}
Constant *ShadowStackGCLoweringImpl::GetFrameMap(Function &F) {
+ const auto &DL = F.getDataLayout();
// doInitialization creates the abstract type of this value.
Type *VoidPtr = PointerType::getUnqual(F.getContext());
@@ -166,13 +169,13 @@ Constant *ShadowStackGCLoweringImpl::GetFrameMap(Function &F) {
};
Constant *DescriptorElts[] = {
- ConstantStruct::get(FrameMapTy, BaseElts),
- ConstantArray::get(ArrayType::get(VoidPtr, NumMeta), Metadata)};
+ ConstantStruct::get(FrameMapTy, BaseElts, &DL),
+ ConstantArray::get(ArrayType::get(VoidPtr, NumMeta), Metadata, &DL)};
Type *EltTys[] = {DescriptorElts[0]->getType(), DescriptorElts[1]->getType()};
StructType *STy = StructType::create(EltTys, "gc_map." + utostr(NumMeta));
- Constant *FrameMap = ConstantStruct::get(STy, DescriptorElts);
+ Constant *FrameMap = ConstantStruct::get(STy, DescriptorElts, &DL);
// FIXME: Is this actually dangerous as WritingAnLLVMPass.html claims? Seems
// that, short of multithreaded LLVM, it should be safe; all that is
@@ -188,8 +191,8 @@ Constant *ShadowStackGCLoweringImpl::GetFrameMap(Function &F) {
// (which uses a FunctionPassManager (which segfaults (not asserts) if
// provided a ModulePass))).
return new GlobalVariable(*F.getParent(), FrameMap->getType(), true,
- GlobalVariable::InternalLinkage, FrameMap,
- "__gc_" + F.getName());
+ GlobalVariable::InternalLinkage, FrameMap,
+ "__gc_" + F.getName());
}
Type *ShadowStackGCLoweringImpl::GetConcreteStackEntryType(Function &F) {
diff --git a/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp b/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
index 83fc4c6e03178..779743aeeeef9 100644
--- a/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
+++ b/llvm/lib/Frontend/Offloading/OffloadWrapper.cpp
@@ -127,6 +127,7 @@ GlobalVariable *createBinDesc(Module &M, ArrayRef<ArrayRef<char>> Bufs,
EntryArrayTy EntryArray, StringRef Suffix,
bool Relocatable) {
LLVMContext &C = M.getContext();
+ const auto &DL = M.getDataLayout();
auto [EntriesB, EntriesE] = EntryArray;
auto *Zero = ConstantInt::get(getSizeTTy(M), 0u);
@@ -175,13 +176,14 @@ GlobalVariable *createBinDesc(Module &M, ArrayRef<ArrayRef<char>> Bufs,
auto *ImageE =
ConstantExpr::getGetElementPtr(Image->getValueType(), Image, ZeroSize);
- ImagesInits.push_back(ConstantStruct::get(getDeviceImageTy(M), ImageB,
- ImageE, EntriesB, EntriesE));
+ ImagesInits.push_back(ConstantStruct::get(
+ getDeviceImageTy(M), {ImageB, ImageE, EntriesB, EntriesE}, &DL));
}
// Then create images array.
auto *ImagesData = ConstantArray::get(
- ArrayType::get(getDeviceImageTy(M), ImagesInits.size()), ImagesInits);
+ ArrayType::get(getDeviceImageTy(M), ImagesInits.size()), ImagesInits,
+ &DL);
auto *Images =
new GlobalVariable(M, ImagesData->getType(), /*isConstant*/ true,
@@ -192,8 +194,9 @@ GlobalVariable *createBinDesc(Module &M, ArrayRef<ArrayRef<char>> Bufs,
// And finally create the binary descriptor object.
auto *DescInit = ConstantStruct::get(
getBinDescTy(M),
- ConstantInt::get(Type::getInt32Ty(C), ImagesInits.size()), Images,
- EntriesB, EntriesE);
+ {ConstantInt::get(Type::getInt32Ty(C), ImagesInits.size()), Images,
+ EntriesB, EntriesE},
+ &DL);
return new GlobalVariable(M, DescInit->getType(), /*isConstant=*/true,
GlobalValue::InternalLinkage, DescInit,
@@ -303,8 +306,9 @@ GlobalVariable *createFatbinDesc(Module &M, ArrayRef<char> Image, bool IsHIP,
ConstantExpr::getPointerBitCastOrAddrSpaceCast(Fatbin, Int8PtrTy),
ConstantPointerNull::get(PointerType::getUnqual(C))};
+ const auto &DL = M.getDataLayout();
Constant *FatbinInitializer =
- ConstantStruct::get(getFatbinWrapperTy(M), FatbinWrapper);
+ ConstantStruct::get(getFatbinWrapperTy(M), FatbinWrapper, &DL);
auto *FatbinDesc =
new GlobalVariable(M, getFatbinWrapperTy(M),
@@ -916,8 +920,9 @@ class SYCLWrapper {
EntriesInits.push_back(GV->getInitializer());
}
+ const auto &DL = M.getDataLayout();
Constant *Arr = ConstantArray::get(
- ArrayType::get(EntryTy, EntriesInits.size()), EntriesInits);
+ ArrayType::get(EntryTy, EntriesInits.size()), EntriesInits, &DL);
GlobalVariable *EntriesGV = new GlobalVariable(
M, Arr->getType(), /*isConstant*/ true, GlobalVariable::InternalLinkage,
Arr, OffloadKindTag + "entries_arr");
@@ -967,19 +972,24 @@ class SYCLWrapper {
// .first and .second arguments below correspond to start and end pointers
// respectively.
+ const auto &DL = M.getDataLayout();
Constant *WrappedBinary = ConstantStruct::get(
- SyclDeviceImageTy, Version, OffloadKindConstant, ImageKindConstant,
- TripleConstant, CompileOptions, LinkOptions, Binary.first,
- Binary.second, ImageEntriesPtrs.first, ImageEntriesPtrs.second,
- PropertiesConstants.first, PropertiesConstants.second);
+ SyclDeviceImageTy,
+ {Version, OffloadKindConstant, ImageKindConstant, TripleConstant,
+ CompileOptions, LinkOptions, Binary.first, Binary.second,
+ ImageEntriesPtrs.first, ImageEntriesPtrs.second,
+ PropertiesConstants.first, PropertiesConstants.second},
+ &DL);
return WrappedBinary;
}
GlobalVariable *combineWrappedImages(ArrayRef<Constant *> WrappedImages,
StringRef OffloadKindTag) {
+ const auto &DL = M.getDataLayout();
Constant *ImagesData = ConstantArray::get(
- ArrayType::get(SyclDeviceImageTy, WrappedImages.size()), WrappedImages);
+ ArrayType::get(SyclDeviceImageTy, WrappedImages.size()), WrappedImages,
+ &DL);
GlobalVariable *ImagesGV =
new GlobalVariable(M, ImagesData->getType(), /*isConstant*/ true,
GlobalValue::InternalLinkage, ImagesData,
@@ -991,9 +1001,10 @@ class SYCLWrapper {
static constexpr uint16_t BinDescStructVersion = 1;
Constant *DescInit = ConstantStruct::get(
SyclBinDescTy,
- ConstantInt::get(Type::getInt16Ty(C), BinDescStructVersion),
- ConstantInt::get(Type::getInt16Ty(C), WrappedImages.size()), ImagesGV,
- EntriesB, EntriesE);
+ {ConstantInt::get(Type::getInt16Ty(C), BinDescStructVersion),
+ ConstantInt::get(Type::getInt16Ty(C), WrappedImages.size()), ImagesGV,
+ EntriesB, EntriesE},
+ &DL);
return new GlobalVariable(M, DescInit->getType(), /*isConstant*/ true,
GlobalValue::InternalLinkage, DescInit,
diff --git a/llvm/lib/Frontend/Offloading/Utility.cpp b/llvm/lib/Frontend/Offloading/Utility.cpp
index 5000488a52f37..c15936818ca08 100644
--- a/llvm/lib/Frontend/Offloading/Utility.cpp
+++ b/llvm/lib/Frontend/Offloading/Utility.cpp
@@ -67,6 +67,7 @@ offloading::getOffloadingEntryInitializer(Module &M, object::OffloadKind Kind,
MD->addOperand(llvm::MDNode::get(M.getContext(), MDVals));
// Construct the offloading entry.
+ const auto &DL = M.getDataLayout();
Constant *EntryData[] = {
ConstantExpr::getNullValue(Int64Ty),
ConstantInt::get(Int16Ty, 1),
@@ -78,7 +79,8 @@ offloading::getOffloadingEntryInitializer(Module &M, object::OffloadKind Kind,
ConstantInt::get(Int64Ty, Data),
AuxAddr ? ConstantExpr::getPointerBitCastOrAddrSpaceCast(AuxAddr, PtrTy)
: ConstantExpr::getNullValue(PtrTy)};
- Constant *EntryInitializer = ConstantStruct::get(getEntryTy(M), EntryData);
+ Constant *EntryInitializer =
+ ConstantStruct::get(getEntryTy(M), EntryData, &DL);
return {EntryInitializer, Str};
}
diff --git a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
index 2ae0d70acdec7..052ca43a34d65 100644
--- a/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
+++ b/llvm/lib/Frontend/OpenMP/OMPIRBuilder.cpp
@@ -1020,8 +1020,9 @@ Constant *OpenMPIRBuilder::getOrCreateIdent(Constant *SrcLocStr,
IdentData[SrcLocStrArgIdx]->getType()->getPointerAddressSpace())
IdentData[SrcLocStrArgIdx] = ConstantExpr::getAddrSpaceCast(
SrcLocStr, OpenMPIRBuilder::Ident->getElementType(SrcLocStrArgIdx));
+ const auto &DL = M.getDataLayout();
Constant *Initializer =
- ConstantStruct::get(OpenMPIRBuilder::Ident, IdentData);
+ ConstantStruct::get(OpenMPIRBuilder::Ident, IdentData, &DL);
// Look for existing encoding of the location + flags, not needed but
// minimizes the difference to the existing solution while we transition.
@@ -7769,24 +7770,23 @@ OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::createTargetInit(
: ConstantExpr::getAddrSpaceCast(DynamicEnvironmentGV,
DynamicEnvironmentPtr);
- Constant *ConfigurationEnvironmentInitializer = ConstantStruct::get(
- ConfigurationEnvironment, {
- UseGenericStateMachineVal,
- MayUseNestedParallelismVal,
- IsSPMDVal,
- MinThreads,
- MaxThreads,
- MinTeams,
- MaxTeams,
- ReductionDataSize,
- ReductionBufferLength,
- });
+ Constant *ConfigurationEnvironmentInitializer =
+ ConstantStruct::get(ConfigurationEnvironment,
+ {
+ UseGenericStateMachineVal,
+ MayUseNestedParallelismVal,
+ IsSPMDVal,
+ MinThreads,
+ MaxThreads,
+ MinTeams,
+ MaxTeams,
+ ReductionDataSize,
+ ReductionBufferLength,
+ },
+ &DL);
Constant *KernelEnvironmentInitializer = ConstantStruct::get(
- KernelEnvironment, {
- ConfigurationEnvironmentInitializer,
- Ident,
- DynamicEnvironment,
- });
+ KernelEnvironment,
+ {ConfigurationEnvironmentInitializer, Ident, DynamicEnvironment}, &DL);
std::string KernelEnvironmentName =
(KernelName + "_kernel_environment").str();
GlobalVariable *KernelEnvironmentGV = new GlobalVariable(
@@ -9967,8 +9967,9 @@ Error OpenMPIRBuilder::emitOffloadingArrays(
SizeArrayType, /* ArraySize = */ nullptr, ".offload_sizes");
restoreIPandDebugLoc(Builder, CodeGenIP);
} else {
+ const auto &DL = M.getDataLayout();
auto *SizesArrayInit = ConstantArray::get(
- ArrayType::get(Int64Ty, ConstSizes.size()), ConstSizes);
+ ArrayType::get(Int64Ty, ConstSizes.size()), ConstSizes, &DL);
std::string Name = createPlatformSpecificName({"offload_sizes"});
auto *SizesArrayGbl =
new GlobalVariable(M, SizesArrayInit->getType(), /*isConstant=*/true,
@@ -10993,10 +10994,11 @@ OpenMPIRBuilder::createDistribute(const LocationDescription &Loc,
GlobalVariable *
OpenMPIRBuilder::createOffloadMapnames(SmallVectorImpl<llvm::Constant *> &Names,
std::string VarName) {
+ const auto &DL = M.getDataLayout();
llvm::Constant *MapNamesArrayInit = llvm::ConstantArray::get(
llvm::ArrayType::get(llvm::PointerType::getUnqual(M.getContext()),
Names.size()),
- Names);
+ Names, &DL);
auto *MapNamesArrayGlobal = new llvm::GlobalVariable(
M, MapNamesArrayInit->getType(),
/*isConstant=*/true, llvm::GlobalValue::PrivateLinkage, MapNamesArrayInit,
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index 790ecb40dc87b..d89d4217989be 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -1913,16 +1913,20 @@ GlobalVariable *llvm::UpgradeGlobalVariable(GlobalVariable *GV) {
IRBuilder<> IRB(C);
auto EltTy = StructType::get(STy->getElementType(0), STy->getElementType(1),
IRB.getPtrTy());
+ const auto &DL = GV->getParent()->getDataLayout();
Constant *Init = GV->getInitializer();
unsigned N = Init->getNumOperands();
std::vector<Constant *> NewCtors(N);
for (unsigned i = 0; i != N; ++i) {
auto Ctor = cast<Constant>(Init->getOperand(i));
- NewCtors[i] = ConstantStruct::get(EltTy, Ctor->getAggregateElement(0u),
- Ctor->getAggregateElement(1),
- ConstantPointerNull::get(IRB.getPtrTy()));
- }
- Constant *NewInit = ConstantArray::get(ArrayType::get(EltTy, N), NewCtors);
+ NewCtors[i] = ConstantStruct::get(
+ EltTy,
+ {Ctor->getAggregateElement(0u), Ctor->getAggregateElement(1),
+ ConstantPointerNull::get(IRB.getPtrTy())},
+ &DL);
+ }
+ Constant *NewInit =
+ ConstantArray::get(ArrayType::get(EltTy, N), NewCtors, &DL);
return new GlobalVariable(NewInit->getType(), false, GV->getLinkage(),
NewInit, GV->getName());
diff --git a/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp b/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp
index c27a693ceecc1..42ffd3e5fd4f6 100644
--- a/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64Arm64ECCallLowering.cpp
@@ -922,16 +922,18 @@ bool AArch64Arm64ECCallLowering::runOnModule(Module &Mod) {
}
if (!ThunkMapping.empty()) {
+ const DataLayout &DL = Mod.getDataLayout();
SmallVector<Constant *> ThunkMappingArrayElems;
for (ThunkInfo &Thunk : ThunkMapping) {
ThunkMappingArrayElems.push_back(ConstantStruct::getAnon(
{Thunk.Src, Thunk.Dst,
- ConstantInt::get(M->getContext(), APInt(32, uint8_t(Thunk.Kind)))}));
+ ConstantInt::get(M->getContext(), APInt(32, uint8_t(Thunk.Kind)))},
+ /*Packed=*/false, &DL));
}
Constant *ThunkMappingArray = ConstantArray::get(
llvm::ArrayType::get(ThunkMappingArrayElems[0]->getType(),
ThunkMappingArrayElems.size()),
- ThunkMappingArrayElems);
+ ThunkMappingArrayElems, &DL);
new GlobalVariable(Mod, ThunkMappingArray->getType(), /*isConstant*/ false,
GlobalValue::ExternalLinkage, ThunkMappingArray,
"llvm.arm64ec.symbolmap");
diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
index b96d251a9c4d9..a5dbd96205a59 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp
@@ -1730,7 +1730,7 @@ static Value *stripInactiveLanes(Value *V, const Value *Pg) {
Dup->getOperand(1) == Pg && isa<Constant>(Dup->getOperand(2)))
return ConstantVector::getSplat(
cast<VectorType>(V->getType())->getElementCount(),
- cast<Constant>(Dup->getOperand(2)));
+ cast<Constant>(Dup->getOperand(2)), &Dup->getDataLayout());
return V;
}
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp b/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
index 502f77d1dba63..ad947f931ad67 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULowerModuleLDSPass.cpp
@@ -312,7 +312,8 @@ class AMDGPULowerModuleLDS {
static Constant *getAddressesOfVariablesInKernel(
LLVMContext &Ctx, ArrayRef<GlobalVariable *> Variables,
- const DenseMap<GlobalVariable *, Constant *> &LDSVarsToConstantGEP) {
+ const DenseMap<GlobalVariable *, Constant *> &LDSVarsToConstantGEP,
+ const DataLayout *DL) {
// Create a ConstantArray containing the address of each Variable within the
// kernel corresponding to LDSVarsToConstantGEP, or poison if that kernel
// does not allocate it
@@ -329,7 +330,7 @@ class AMDGPULowerModuleLDS {
Elements.push_back(PoisonValue::get(LocalPtrTy));
}
}
- return ConstantArray::get(KernelOffsetsType, Elements);
+ return ConstantArray::get(KernelOffsetsType, Elements, DL);
}
static GlobalVariable *buildLookupTable(
@@ -358,11 +359,12 @@ class AMDGPULowerModuleLDS {
(Replacement == KernelToReplacement.end())
? Missing
: getAddressesOfVariablesInKernel(
- Ctx, Variables, Replacement->second.LDSVarsToConstantGEP);
+ Ctx, Variables, Replacement->second.LDSVarsToConstantGEP,
+ &M.getDataLayout());
}
- Constant *init =
- ConstantArray::get(AllKernelsOffsetsType, overallConstantExprElts);
+ Constant *init = ConstantArray::get(
+ AllKernelsOffsetsType, overallConstantExprElts, &M.getDataLayout());
return new GlobalVariable(
M, AllKernelsOffsetsType, true, GlobalValue::InternalLinkage, init,
@@ -889,7 +891,7 @@ class AMDGPULowerModuleLDS {
assert(OrderedKernels.size() == newDynamicLDS.size());
ArrayType *t = ArrayType::get(LocalPtrTy, newDynamicLDS.size());
- Constant *init = ConstantArray::get(t, newDynamicLDS);
+ Constant *init = ConstantArray::get(t, newDynamicLDS, &M.getDataLayout());
GlobalVariable *table = new GlobalVariable(
M, t, true, GlobalValue::InternalLinkage, init,
"llvm.amdgcn.dynlds.offset.table", nullptr,
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSwLowerLDS.cpp b/llvm/lib/Target/AMDGPU/AMDGPUSwLowerLDS.cpp
index 362c221aa1392..9d6c21759c55b 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSwLowerLDS.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSwLowerLDS.cpp
@@ -449,9 +449,10 @@ void AMDGPUSwLowerLDS::populateSwMetadataGlobal(Function *Func) {
ConstantInt::get(Int32Ty, AlignedSize);
// Align MallocSize
MallocSize = alignTo(MallocSize, MaxAlignment);
- Constant *InitItem =
- ConstantStruct::get(LDSItemTy, {ItemStartOffset, SizeInBytesConst,
- AlignedSizeInBytesConst});
+ Constant *InitItem = ConstantStruct::get(
+ LDSItemTy,
+ {ItemStartOffset, SizeInBytesConst, AlignedSizeInBytesConst},
+ &DL);
Initializers.push_back(InitItem);
}
};
@@ -480,7 +481,7 @@ void AMDGPUSwLowerLDS::populateSwMetadataGlobal(Function *Func) {
M, MetadataStructType, false, GlobalValue::InternalLinkage,
PoisonValue::get(MetadataStructType), MDOS.str(), nullptr,
GlobalValue::NotThreadLocal, AMDGPUAS::GLOBAL_ADDRESS, false);
- Constant *data = ConstantStruct::get(MetadataStructType, Initializers);
+ Constant *data = ConstantStruct::get(MetadataStructType, Initializers, &DL);
LDSParams.SwLDSMetadata->setInitializer(data);
assert(LDSParams.SwLDS);
// Set the alignment to MaxAlignment for SwLDS.
@@ -979,7 +980,8 @@ Constant *AMDGPUSwLowerLDS::getAddressesOfVariablesInKernel(
SwLDSMetadata, GEPIdx, true);
Elements.push_back(GEP);
}
- return ConstantArray::get(KernelOffsetsType, Elements);
+ const DataLayout &DL = M.getDataLayout();
+ return ConstantArray::get(KernelOffsetsType, Elements, &DL);
}
void AMDGPUSwLowerLDS::buildNonKernelLDSBaseTable(
@@ -999,8 +1001,9 @@ void AMDGPUSwLowerLDS::buildNonKernelLDSBaseTable(
auto &LDSParams = FuncLDSAccessInfo.KernelToLDSParametersMap[Func];
OverallConstantExprElts[i] = LDSParams.SwLDS;
}
+ const DataLayout &DL = M.getDataLayout();
Constant *init =
- ConstantArray::get(AllKernelsOffsetsType, OverallConstantExprElts);
+ ConstantArray::get(AllKernelsOffsetsType, OverallConstantExprElts, &DL);
NKLDSParams.LDSBaseTable = new GlobalVariable(
M, AllKernelsOffsetsType, true, GlobalValue::InternalLinkage, init,
"llvm.amdgcn.sw.lds.base.table", nullptr, GlobalValue::NotThreadLocal,
@@ -1037,8 +1040,9 @@ void AMDGPUSwLowerLDS::buildNonKernelLDSOffsetTable(
overallConstantExprElts[i] =
getAddressesOfVariablesInKernel(Func, Variables);
}
+ const DataLayout &DL = M.getDataLayout();
Constant *Init =
- ConstantArray::get(AllKernelsOffsetsType, overallConstantExprElts);
+ ConstantArray::get(AllKernelsOffsetsType, overallConstantExprElts, &DL);
NKLDSParams.LDSOffsetTable = new GlobalVariable(
M, AllKernelsOffsetsType, true, GlobalValue::InternalLinkage, Init,
"llvm.amdgcn.sw.lds.offset.table", nullptr, GlobalValue::NotThreadLocal,
diff --git a/llvm/lib/Target/PowerPC/PPCPrepareIFuncsOnAIX.cpp b/llvm/lib/Target/PowerPC/PPCPrepareIFuncsOnAIX.cpp
index 5b6a6d6b95c52..c574b77f665ba 100644
--- a/llvm/lib/Target/PowerPC/PPCPrepareIFuncsOnAIX.cpp
+++ b/llvm/lib/Target/PowerPC/PPCPrepareIFuncsOnAIX.cpp
@@ -96,7 +96,7 @@ bool PPCPrepareIFuncsOnAIX::runOnModule(Module &M) {
// function descriptor, which is what these two values end up being
// in assembly.
Constant *InitVals[] = {&IFunc, IFunc.getResolver()};
- GV->setInitializer(ConstantStruct::get(IFuncPairType, InitVals));
+ GV->setInitializer(ConstantStruct::get(IFuncPairType, InitVals, &DL));
// Liveness of __update_foo is dependent on liveness of ifunc foo.
IFunc.setMetadata(LLVMContext::MD_implicit_ref,
diff --git a/llvm/lib/Target/RISCV/RISCVPromoteConstant.cpp b/llvm/lib/Target/RISCV/RISCVPromoteConstant.cpp
index bf1f69f8e8d93..aa54c0afc5ce4 100644
--- a/llvm/lib/Target/RISCV/RISCVPromoteConstant.cpp
+++ b/llvm/lib/Target/RISCV/RISCVPromoteConstant.cpp
@@ -149,8 +149,9 @@ bool RISCVPromoteConstant::runOnFunction(Function &F,
ConstantVector.push_back(Pair.first);
ArrayType *ArrayTy = ArrayType::get(DoubleTy, ConstantVector.size());
+ const DataLayout &DL = M->getDataLayout();
Constant *GlobalArrayInitializer =
- ConstantArray::get(ArrayTy, ConstantVector);
+ ConstantArray::get(ArrayTy, ConstantVector, &DL);
auto *GlobalArray = new GlobalVariable(
*M, ArrayTy,
diff --git a/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp b/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
index 9a85634c82626..892bc166368e5 100644
--- a/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp
@@ -616,8 +616,9 @@ Register SPIRVGlobalRegistry::getOrCreateConstVector(const APInt &Val,
assert(LLVMBaseTy->isIntegerTy() &&
"Expected integer element type for APInt constant vector");
auto *ConstVal = cast<ConstantInt>(ConstantInt::get(LLVMBaseTy, Val));
+ const DataLayout &DL = CurMF->getFunction().getParent()->getDataLayout();
auto *ConstVec =
- ConstantVector::getSplat(LLVMVecTy->getElementCount(), ConstVal);
+ ConstantVector::getSplat(LLVMVecTy->getElementCount(), ConstVal, &DL);
unsigned BW = getScalarOrVectorBitWidth(SpvType);
return getOrCreateCompositeOrNull(ConstVal, I, SpvType, TII, ConstVec, BW,
SpvType->getOperand(2).getImm(),
@@ -635,8 +636,9 @@ Register SPIRVGlobalRegistry::getOrCreateConstVector(APFloat Val,
Type *LLVMBaseTy = LLVMVecTy->getElementType();
assert(LLVMBaseTy->isFloatingPointTy());
auto *ConstVal = ConstantFP::get(LLVMBaseTy, Val);
+ const DataLayout &DL = CurMF->getFunction().getParent()->getDataLayout();
auto *ConstVec =
- ConstantVector::getSplat(LLVMVecTy->getElementCount(), ConstVal);
+ ConstantVector::getSplat(LLVMVecTy->getElementCount(), ConstVal, &DL);
unsigned BW = getScalarOrVectorBitWidth(SpvType);
return getOrCreateCompositeOrNull(ConstVal, I, SpvType, TII, ConstVec, BW,
SpvType->getOperand(2).getImm(),
@@ -663,9 +665,11 @@ Register SPIRVGlobalRegistry::getOrCreateConstIntArray(
// the creation of constants of arbitrary length (that is, the parameter of
// memset) which were missing in the original module.
Type *I64Ty = Type::getInt64Ty(LLVMBaseTy->getContext());
+ const DataLayout &DL = CurMF->getFunction().getParent()->getDataLayout();
Constant *UniqueKey = ConstantStruct::getAnon(
{PoisonValue::get(const_cast<ArrayType *>(LLVMArrTy)),
- ConstantInt::get(LLVMBaseTy, Val), ConstantInt::get(I64Ty, Num)});
+ ConstantInt::get(LLVMBaseTy, Val), ConstantInt::get(I64Ty, Num)},
+ /*Packed=*/false, &DL);
return getOrCreateCompositeOrNull(CI, I, SpvType, TII, UniqueKey, BW,
LLVMArrTy->getNumElements());
}
@@ -717,8 +721,9 @@ Register SPIRVGlobalRegistry::getOrCreateConsIntVector(
const FixedVectorType *LLVMVecTy = cast<FixedVectorType>(LLVMTy);
Type *LLVMBaseTy = LLVMVecTy->getElementType();
const auto ConstInt = ConstantInt::get(LLVMBaseTy, Val);
+ const DataLayout &DL = CurMF->getFunction().getParent()->getDataLayout();
auto ConstVec =
- ConstantVector::getSplat(LLVMVecTy->getElementCount(), ConstInt);
+ ConstantVector::getSplat(LLVMVecTy->getElementCount(), ConstInt, &DL);
unsigned BW = getScalarOrVectorBitWidth(SpvType);
return getOrCreateIntCompositeOrNull(Val, MIRBuilder, SpvType, EmitIR,
ConstVec, BW,
diff --git a/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp b/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp
index 06e4561aafd26..dac9338d21b98 100644
--- a/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVLegalizeZeroSizeArrays.cpp
@@ -75,7 +75,7 @@ class SPIRVLegalizeZeroSizeArraysImpl
private:
Type *legalizeType(Type *Ty);
- Constant *legalizeConstant(Constant *C);
+ Constant *legalizeConstant(Constant *C, const DataLayout *DL);
const SPIRVTargetMachine &TM;
DenseMap<Type *, Type *> TypeMap;
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 179c61a2268a4..5a787dbc0f4cd 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -7946,7 +7946,8 @@ static SDValue combineToConsecutiveLoads(EVT VT, SDValue Op, const SDLoc &DL,
}
static Constant *getConstantVector(MVT VT, ArrayRef<APInt> Bits,
- const APInt &Undefs, LLVMContext &C) {
+ const APInt &Undefs, LLVMContext &C,
+ const DataLayout *DL) {
unsigned ScalarSize = VT.getScalarSizeInBits();
Type *Ty = EVT(VT.getScalarType()).getTypeForEVT(C);
@@ -7967,11 +7968,12 @@ static Constant *getConstantVector(MVT VT, ArrayRef<APInt> Bits,
ConstantVec.push_back(Undefs[I] ? UndefValue::get(Ty)
: getConstantScalar(Bits[I]));
- return ConstantVector::get(ArrayRef<Constant *>(ConstantVec));
+ return ConstantVector::get(ArrayRef<Constant *>(ConstantVec), DL);
}
static Constant *getConstantVector(MVT VT, const APInt &SplatValue,
- unsigned SplatBitSize, LLVMContext &C) {
+ unsigned SplatBitSize, LLVMContext &C,
+ const DataLayout *DL) {
unsigned ScalarSize = VT.getScalarSizeInBits();
auto getConstantScalar = [&](const APInt &Val) -> Constant * {
@@ -7995,7 +7997,7 @@ static Constant *getConstantVector(MVT VT, const APInt &SplatValue,
APInt Val = SplatValue.extractBits(ScalarSize, ScalarSize * I);
ConstantVec.push_back(getConstantScalar(Val));
}
- return ConstantVector::get(ArrayRef<Constant *>(ConstantVec));
+ return ConstantVector::get(ArrayRef<Constant *>(ConstantVec), DL);
}
static bool isFoldableUseOfShuffle(SDNode *N) {
@@ -8125,7 +8127,8 @@ static SDValue lowerBuildVectorAsBroadcast(BuildVectorSDNode *BVOp,
(SplatBitSize < 32 && Subtarget.hasAVX2())) {
// Load the constant scalar/subvector and broadcast it.
MVT CVT = MVT::getIntegerVT(SplatBitSize);
- Constant *C = getConstantVector(VT, SplatValue, SplatBitSize, *Ctx);
+ Constant *C = getConstantVector(VT, SplatValue, SplatBitSize, *Ctx,
+ &DAG.getDataLayout());
SDValue CP = DAG.getConstantPool(C, PVT);
unsigned Repeat = VT.getSizeInBits() / SplatBitSize;
@@ -8141,7 +8144,8 @@ static SDValue lowerBuildVectorAsBroadcast(BuildVectorSDNode *BVOp,
}
if (SplatBitSize > 64) {
// Load the vector of constants and broadcast it.
- Constant *VecC = getConstantVector(VT, SplatValue, SplatBitSize, *Ctx);
+ Constant *VecC = getConstantVector(VT, SplatValue, SplatBitSize, *Ctx,
+ &DAG.getDataLayout());
SDValue VCP = DAG.getConstantPool(VecC, PVT);
unsigned NumElm = SplatBitSize / VT.getScalarSizeInBits();
MVT VVT = MVT::getVectorVT(VT.getScalarType(), NumElm);
@@ -9813,7 +9817,7 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
InsIndex = DAG.getVectorIdxConstant(i, dl);
}
}
- Constant *CV = ConstantVector::get(ConstVecOps);
+ Constant *CV = ConstantVector::get(ConstVecOps, &DAG.getDataLayout());
SDValue DAGConstVec = DAG.getConstantPool(CV, VT);
// The constants we just created may not be legal (eg, floating point). We
@@ -20861,7 +20865,7 @@ static SDValue LowerUINT_TO_FP_i64(SDValue Op, const SDLoc &dl,
CV1.push_back(
ConstantFP::get(*Context, APFloat(APFloat::IEEEdouble(),
APInt(64, 0x4530000000000000ULL))));
- Constant *C1 = ConstantVector::get(CV1);
+ Constant *C1 = ConstantVector::get(CV1, &DAG.getDataLayout());
SDValue CPIdx1 = DAG.getConstantPool(C1, PtrVT, Align(16));
// Load the 64-bit value into an XMM register.
@@ -29278,7 +29282,8 @@ SDValue X86TargetLowering::LowerRESET_FPENV(SDValue Op,
// MXCSR: mask all floating-point exceptions, sets rounding to nearest, clear
// all exceptions, sets DAZ and FTZ to 0.
FPEnvVals.push_back(ConstantInt::get(ItemTy, 0x1F80));
- Constant *FPEnvBits = ConstantArray::get(FPEnvTy, FPEnvVals);
+ Constant *FPEnvBits =
+ ConstantArray::get(FPEnvTy, FPEnvVals, &DAG.getDataLayout());
MVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy(DAG.getDataLayout());
SDValue Env = DAG.getConstantPool(FPEnvBits, PtrVT);
MachinePointerInfo MPI =
@@ -43254,7 +43259,8 @@ static SDValue combineTargetShuffle(SDValue N, const SDLoc &DL,
// Load the vector constant from constant pool.
MVT PVT = TLI.getPointerTy(DAG.getDataLayout());
- SDValue CP = DAG.getConstantPool(ConstantVector::get(ConstantVec), PVT);
+ SDValue CP = DAG.getConstantPool(
+ ConstantVector::get(ConstantVec, &DAG.getDataLayout()), PVT);
MachinePointerInfo MPI =
MachinePointerInfo::getConstantPool(DAG.getMachineFunction());
Align Alignment = cast<ConstantPoolSDNode>(CP)->getAlign();
@@ -44214,7 +44220,8 @@ bool X86TargetLowering::SimplifyDemandedVectorEltsForTargetShuffle(
// Generate new constant pool entry + legalize immediately for the load.
SDLoc DL(Op);
- SDValue CV = TLO.DAG.getConstantPool(ConstantVector::get(ConstVecOps), BCVT);
+ SDValue CV = TLO.DAG.getConstantPool(
+ ConstantVector::get(ConstVecOps, &TLO.DAG.getDataLayout()), BCVT);
SDValue LegalCV = LowerConstantPool(CV, TLO.DAG);
SDValue NewMask = TLO.DAG.getLoad(
BCVT, DL, TLO.DAG.getEntryNode(), LegalCV,
@@ -60757,7 +60764,8 @@ static SDValue combineConcatVectorOps(const SDLoc &DL, MVT VT,
UndefElts.insertBits(OpUndefElts, I * OpUndefElts.getBitWidth());
}
if (EltBits.size() == VT.getVectorNumElements()) {
- Constant *C = getConstantVector(VT, EltBits, UndefElts, Ctx);
+ Constant *C =
+ getConstantVector(VT, EltBits, UndefElts, Ctx, &DAG.getDataLayout());
MVT PVT = TLI.getPointerTy(DAG.getDataLayout());
SDValue CV = DAG.getConstantPool(C, PVT);
MachineFunction &MF = DAG.getMachineFunction();
diff --git a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
index 028d568fb0fb2..c8b152bed0443 100644
--- a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
+++ b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
@@ -404,7 +404,7 @@ static Value *simplifyX86varShift(const IntrinsicInst &II,
ConstantVec.push_back(ConstantInt::getNullValue(SVT));
}
}
- return ConstantVector::get(ConstantVec);
+ return ConstantVector::get(ConstantVec, &II.getDataLayout());
}
// We can't handle only some out of range values with generic logical shifts.
@@ -419,7 +419,7 @@ static Value *simplifyX86varShift(const IntrinsicInst &II,
else
ShiftVecAmts.push_back(ConstantInt::get(SVT, Idx));
}
- auto ShiftVec = ConstantVector::get(ShiftVecAmts);
+ auto ShiftVec = ConstantVector::get(ShiftVecAmts, &II.getDataLayout());
if (ShiftLeft)
return Builder.CreateShl(Vec, ShiftVec);
@@ -1844,11 +1844,12 @@ static Value *simplifyX86insertps(const IntrinsicInst &II,
static Value *simplifyX86extrq(IntrinsicInst &II, Value *Op0,
ConstantInt *CILength, ConstantInt *CIIndex,
InstCombiner::BuilderTy &Builder) {
+ const DataLayout &DL = II.getDataLayout();
auto LowConstantHighUndef = [&](uint64_t Val) {
Type *IntTy64 = Type::getInt64Ty(II.getContext());
Constant *Args[] = {ConstantInt::get(IntTy64, Val),
UndefValue::get(IntTy64)};
- return ConstantVector::get(Args);
+ return ConstantVector::get(Args, &DL);
};
// See if we're dealing with constant values.
@@ -2003,7 +2004,7 @@ static Value *simplifyX86insertq(IntrinsicInst &II, Value *Op0, Value *Op1,
Type *IntTy64 = Type::getInt64Ty(II.getContext());
Constant *Args[] = {ConstantInt::get(IntTy64, Val.getZExtValue()),
UndefValue::get(IntTy64)};
- return ConstantVector::get(Args);
+ return ConstantVector::get(Args, &II.getDataLayout());
}
// If we were an INSERTQ call, we'll save demanded elements if we convert to
diff --git a/llvm/lib/Transforms/Coroutines/CoroCleanup.cpp b/llvm/lib/Transforms/Coroutines/CoroCleanup.cpp
index c44eaddd7ee55..8e415429aa6cf 100644
--- a/llvm/lib/Transforms/Coroutines/CoroCleanup.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroCleanup.cpp
@@ -54,7 +54,7 @@ class NoopCoroElider : public PtrUseVisitor<NoopCoroElider> {
bool tryEraseCallInvoke(Instruction *I);
void eraseFromWorklist(Instruction *I);
};
-}
+} // namespace
static void lowerSubFn(IRBuilder<> &Builder, CoroSubFnInst *SubFn) {
Builder.SetInsertPoint(SubFn);
@@ -149,8 +149,9 @@ bool Lowerer::lower(Function &F) {
break;
}
auto *TargetRelativeFunOffset = Target->getOperand(0);
+ const auto &DL = II->getModule()->getDataLayout();
auto *NewFuncPtrStruct = ConstantStruct::get(
- Target->getType(), TargetRelativeFunOffset, SourceSize);
+ Target->getType(), {TargetRelativeFunOffset, SourceSize}, &DL);
Target->replaceAllUsesWith(NewFuncPtrStruct);
break;
}
@@ -188,7 +189,8 @@ void Lowerer::lowerCoroNoop(IntrinsicInst *II) {
// Create a constant struct for the frame.
Constant *Values[] = {NoopFn, NoopFn};
- Constant *NoopCoroConst = ConstantStruct::get(FrameTy, Values);
+ const auto &DL = M.getDataLayout();
+ Constant *NoopCoroConst = ConstantStruct::get(FrameTy, Values, &DL);
NoopCoro = new GlobalVariable(
M, NoopCoroConst->getType(), /*isConstant=*/true,
GlobalVariable::PrivateLinkage, NoopCoroConst, "NoopCoro.Frame.Const");
@@ -264,8 +266,7 @@ static bool declaresCoroCleanupIntrinsics(const Module &M) {
Intrinsic::coro_async_resume, Intrinsic::coro_begin_custom_abi});
}
-PreservedAnalyses CoroCleanupPass::run(Module &M,
- ModuleAnalysisManager &MAM) {
+PreservedAnalyses CoroCleanupPass::run(Module &M, ModuleAnalysisManager &MAM) {
if (!declaresCoroCleanupIntrinsics(M))
return PreservedAnalyses::all();
diff --git a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
index f83b6a601572d..e23ab09c1e079 100644
--- a/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
+++ b/llvm/lib/Transforms/Coroutines/CoroSplit.cpp
@@ -623,8 +623,7 @@ static void replaceSwiftErrorOps(Function &F, coro::Shape &Shape,
}
/// Returns all debug records in F.
-static SmallVector<DbgVariableRecord *>
-collectDbgVariableRecords(Function &F) {
+static SmallVector<DbgVariableRecord *> collectDbgVariableRecords(Function &F) {
SmallVector<DbgVariableRecord *> DbgVariableRecords;
for (auto &I : instructions(F)) {
for (DbgVariableRecord &DVR : filterDbgVars(I.getDbgRecordRange()))
@@ -1112,8 +1111,10 @@ static void updateAsyncFuncPointerContextSize(coro::Shape &Shape) {
auto *OrigContextSize = FuncPtrStruct->getOperand(1);
auto *NewContextSize = ConstantInt::get(OrigContextSize->getType(),
Shape.AsyncLowering.ContextSize);
+ const auto &DL =
+ Shape.AsyncLowering.AsyncFuncPointer->getParent()->getDataLayout();
auto *NewFuncPtrStruct = ConstantStruct::get(
- FuncPtrStruct->getType(), OrigRelativeFunOffset, NewContextSize);
+ FuncPtrStruct->getType(), {OrigRelativeFunOffset, NewContextSize}, &DL);
Shape.AsyncLowering.AsyncFuncPointer->setInitializer(NewFuncPtrStruct);
}
@@ -1651,9 +1652,10 @@ struct SwitchCoroutineSplitter {
assert(!Args.empty());
Function *Part = *Fns.begin();
Module *M = Part->getParent();
+ const auto &DL = M->getDataLayout();
auto *ArrTy = ArrayType::get(Part->getType(), Args.size());
- auto *ConstVal = ConstantArray::get(ArrTy, Args);
+ auto *ConstVal = ConstantArray::get(ArrTy, Args, &DL);
auto *GV = new GlobalVariable(*M, ConstVal->getType(), /*isConstant=*/true,
GlobalVariable::PrivateLinkage, ConstVal,
F.getName() + Twine(".resumers"));
diff --git a/llvm/lib/Transforms/HipStdPar/HipStdPar.cpp b/llvm/lib/Transforms/HipStdPar/HipStdPar.cpp
index d895cd7d78bf6..b80e3e2b4045b 100644
--- a/llvm/lib/Transforms/HipStdPar/HipStdPar.cpp
+++ b/llvm/lib/Transforms/HipStdPar/HipStdPar.cpp
@@ -185,11 +185,14 @@ appendIndirectedGlobal(const GlobalVariable *IndirectionTable,
Type *NameTy = SymbolListTy->getElementType(0);
Type *IndirectTy = SymbolListTy->getElementType(1);
+ const auto &DL = M->getDataLayout();
Constant *NameG = getGlobalForName(ToIndirect);
Constant *IndirectG = getIndirectionGlobal(M);
Constant *Entry = ConstantStruct::get(
- SymbolListTy, {ConstantExpr::getAddrSpaceCast(NameG, NameTy),
- ConstantExpr::getAddrSpaceCast(IndirectG, IndirectTy)});
+ SymbolListTy,
+ {ConstantExpr::getAddrSpaceCast(NameG, NameTy),
+ ConstantExpr::getAddrSpaceCast(IndirectG, IndirectTy)},
+ &DL);
SymbolIndirections.push_back(Entry);
return IndirectG;
@@ -208,14 +211,15 @@ static void fillIndirectionTable(GlobalVariable *IndirectionTable,
M->removeGlobalVariable(IndirectionTable);
GlobalVariable *Symbols =
M->getOrInsertGlobal("", ArrayType::get(SymbolTy, SymCnt));
+ const auto &DL = M->getDataLayout();
Symbols->setLinkage(GlobalValue::LinkageTypes::PrivateLinkage);
- Symbols->setInitializer(
- ConstantArray::get(ArrayType::get(SymbolTy, SymCnt), {Indirections}));
+ Symbols->setInitializer(ConstantArray::get(ArrayType::get(SymbolTy, SymCnt),
+ {Indirections}, &DL));
Symbols->setConstant(true);
Constant *ASCSymbols = ConstantExpr::getAddrSpaceCast(Symbols, SymbolListTy);
Constant *Init = ConstantStruct::get(
- InitTy, {Count, ASCSymbols, PoisonValue::get(SymbolTy)});
+ InitTy, {Count, ASCSymbols, PoisonValue::get(SymbolTy)}, &DL);
M->insertGlobalVariable(IndirectionTable);
IndirectionTable->setInitializer(Init);
}
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index 3ef2d377b7a0f..42f08df47da38 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -2145,10 +2145,11 @@ static void setUsedInitializer(GlobalVariable &V,
ArrayType *ATy = ArrayType::get(PtrTy, UsedArray.size());
Module *M = V.getParent();
+ const auto &DL = M->getDataLayout();
V.removeFromParent();
GlobalVariable *NV = new GlobalVariable(
*M, ATy, false, GlobalValue::AppendingLinkage,
- ConstantArray::get(ATy, UsedArray), "", nullptr,
+ ConstantArray::get(ATy, UsedArray, &DL), "", nullptr,
GlobalVariable::NotThreadLocal, V.getType()->getAddressSpace());
NV->takeName(&V);
NV->setSection("llvm.metadata");
diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
index 518e91628a478..4c859511cc286 100644
--- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -862,7 +862,8 @@ void LowerTypeTestsModule::buildBitSetsFromGlobalVariables(
DesiredPadding = alignTo(InitSize, 32) - InitSize;
}
- Constant *NewInit = ConstantStruct::getAnon(M.getContext(), GlobalInits);
+ Constant *NewInit = ConstantStruct::getAnon(M.getContext(), GlobalInits,
+ /*Packed=*/false, &DL);
auto *CombinedGlobal =
new GlobalVariable(M, NewInit->getType(), /*isConstant=*/true,
GlobalValue::PrivateLinkage, NewInit);
diff --git a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
index 8c2420a45a24c..7a6d9a14dc917 100644
--- a/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
+++ b/llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp
@@ -366,8 +366,7 @@ void wholeprogramdevirt::setAfterReturnValues(
}
VirtualCallTarget::VirtualCallTarget(GlobalValue *Fn, const TypeMemberInfo *TM)
- : Fn(Fn), TM(TM),
- IsBigEndian(Fn->getDataLayout().isBigEndian()),
+ : Fn(Fn), TM(TM), IsBigEndian(Fn->getDataLayout().isBigEndian()),
WasDevirt(false) {}
namespace {
@@ -395,8 +394,7 @@ template <> struct llvm::DenseMapInfo<VTableSlot> {
return DenseMapInfo<Metadata *>::getHashValue(I.TypeID) ^
DenseMapInfo<uint64_t>::getHashValue(I.ByteOffset);
}
- static bool isEqual(const VTableSlot &LHS,
- const VTableSlot &RHS) {
+ static bool isEqual(const VTableSlot &LHS, const VTableSlot &RHS) {
return LHS.TypeID == RHS.TypeID && LHS.ByteOffset == RHS.ByteOffset;
}
};
@@ -1604,7 +1602,7 @@ void DevirtModule::applyICallBranchFunnel(VTableSlotInfo &SlotInfo,
NewArgAttrs.push_back(AttributeSet::get(
M.getContext(), ArrayRef<Attribute>{Attribute::get(
M.getContext(), Attribute::Nest)}));
- for (unsigned I = 0; I + 2 < Attrs.getNumAttrSets(); ++I)
+ for (unsigned I = 0; I + 2 < Attrs.getNumAttrSets(); ++I)
NewArgAttrs.push_back(Attrs.getParamAttrs(I));
NewCS->setAttributes(
AttributeList::get(M.getContext(), Attrs.getFnAttrs(),
@@ -2008,7 +2006,6 @@ bool DevirtModule::tryVirtualConstProp(
for (auto &&Target : TargetsForSlot)
Target.WasDevirt = true;
-
if (CSByConstantArg.second.isExported()) {
ResByArg->TheKind = WholeProgramDevirtResolution::ByArg::VirtualConstProp;
exportConstant(Slot, CSByConstantArg.first, "byte", OffsetByte,
@@ -2042,10 +2039,12 @@ void DevirtModule::rebuildGlobal(VTableBits &B) {
// Build an anonymous global containing the before bytes, followed by the
// original initializer, followed by the after bytes.
+ const auto &DL = M.getDataLayout();
auto *NewInit = ConstantStruct::getAnon(
{ConstantDataArray::get(M.getContext(), B.Before.Bytes),
B.GV->getInitializer(),
- ConstantDataArray::get(M.getContext(), B.After.Bytes)});
+ ConstantDataArray::get(M.getContext(), B.After.Bytes)},
+ /*Packed=*/false, &DL);
auto *NewGV =
new GlobalVariable(M, NewInit->getType(), B.GV->isConstant(),
GlobalVariable::PrivateLinkage, NewInit, "", B.GV);
@@ -2655,7 +2654,8 @@ void DevirtIndex::run() {
// function implementation at offset S.first.ByteOffset, and add to
// TargetsForSlot.
std::vector<ValueInfo> TargetsForSlot;
- auto TidSummary = ExportSummary.getTypeIdCompatibleVtableSummary(S.first.TypeID);
+ auto TidSummary =
+ ExportSummary.getTypeIdCompatibleVtableSummary(S.first.TypeID);
assert(TidSummary);
// The type id summary would have been created while building the NameByGUID
// map earlier.
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp b/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
index 35ab21f6d8740..48b6bdba591b4 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
@@ -2552,7 +2552,7 @@ Instruction *InstCombinerImpl::visitSRem(BinaryOperator &I) {
}
}
- Constant *NewRHSV = ConstantVector::get(Elts);
+ Constant *NewRHSV = ConstantVector::get(Elts, &getDataLayout());
if (NewRHSV != C) // Don't loop on -MININT
return replaceOperand(I, 1, NewRHSV);
}
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
index bcc6e56059270..5e099b00be920 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
@@ -1525,7 +1525,7 @@ Value *InstCombinerImpl::SimplifyDemandedVectorElts(Value *V,
}
// If we changed the constant, return it.
- Constant *NewCV = ConstantVector::get(Elts);
+ Constant *NewCV = ConstantVector::get(Elts, &getDataLayout());
return NewCV != C ? NewCV : nullptr;
}
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
index 3b034f6c37f66..5d8b6dea0cf97 100644
--- a/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstCombineVectorOps.cpp
@@ -1507,7 +1507,8 @@ static Instruction *hoistInsEltConst(InsertElementInst &InsElt2,
/// insertelt (shufflevector X, CVec, Mask|insertelt X, C1, CIndex1), C, CIndex
/// --> shufflevector X, CVec', Mask'
-static Instruction *foldConstantInsEltIntoShuffle(InsertElementInst &InsElt) {
+static Instruction *foldConstantInsEltIntoShuffle(InsertElementInst &InsElt,
+ InstCombinerImpl &IC) {
auto *Inst = dyn_cast<Instruction>(InsElt.getOperand(0));
// Bail out if the parent has more than one use. In that case, we'd be
// replacing the insertelt with a shuffle, and that's not a clear win.
@@ -1560,8 +1561,9 @@ static Instruction *foldConstantInsEltIntoShuffle(InsertElementInst &InsElt) {
// Create new operands for a shuffle that includes the constant of the
// original insertelt. The old shuffle will be dead now.
- return new ShuffleVectorInst(Shuf->getOperand(0),
- ConstantVector::get(NewShufElts), NewMaskElts);
+ return new ShuffleVectorInst(
+ Shuf->getOperand(0),
+ ConstantVector::get(NewShufElts, &IC.getDataLayout()), NewMaskElts);
} else if (auto *IEI = dyn_cast<InsertElementInst>(Inst)) {
// Transform sequences of insertelements ops with constant data/indexes into
// a single shuffle op.
@@ -1601,8 +1603,9 @@ static Instruction *foldConstantInsEltIntoShuffle(InsertElementInst &InsElt) {
}
// Create new operands for a shuffle that includes the constant of the
// original insertelt.
- return new ShuffleVectorInst(IEI->getOperand(0),
- ConstantVector::get(Values), Mask);
+ return new ShuffleVectorInst(
+ IEI->getOperand(0), ConstantVector::get(Values, &IC.getDataLayout()),
+ Mask);
}
return nullptr;
}
@@ -1836,7 +1839,7 @@ Instruction *InstCombinerImpl::visitInsertElementInst(InsertElementInst &IE) {
}
}
- if (Instruction *Shuf = foldConstantInsEltIntoShuffle(IE))
+ if (Instruction *Shuf = foldConstantInsEltIntoShuffle(IE, *this))
return Shuf;
if (Instruction *NewInsElt = hoistInsEltConst(IE, Builder))
diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index 0ca5da1bbf251..04ebc7d43dc4d 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -2349,7 +2349,8 @@ Constant *InstCombinerImpl::unshuffleConstant(ArrayRef<int> ShMask, Constant *C,
Constant *Splat = C->getSplatValue();
if (!Splat)
return nullptr;
- return ConstantVector::getSplat(NewCTy->getElementCount(), Splat);
+ return ConstantVector::getSplat(NewCTy->getElementCount(), Splat,
+ &getDataLayout());
}
if (cast<FixedVectorType>(NewCTy)->getNumElements() >
@@ -2377,7 +2378,7 @@ Constant *InstCombinerImpl::unshuffleConstant(ArrayRef<int> ShMask, Constant *C,
NewVecC[ShMask[I]] = CElt;
}
}
- return ConstantVector::get(NewVecC);
+ return ConstantVector::get(NewVecC, &getDataLayout());
}
// Get the result of `Vector Op Splat` (or Splat Op Vector if \p SplatLHS).
@@ -2385,7 +2386,7 @@ static Constant *constantFoldBinOpWithSplat(unsigned Opcode, Constant *Vector,
Constant *Splat, bool SplatLHS,
const DataLayout &DL) {
ElementCount EC = cast<VectorType>(Vector->getType())->getElementCount();
- Constant *LHS = ConstantVector::getSplat(EC, Splat);
+ Constant *LHS = ConstantVector::getSplat(EC, Splat, &DL);
Constant *RHS = Vector;
if (!SplatLHS)
std::swap(LHS, RHS);
@@ -5024,7 +5025,8 @@ Instruction *InstCombinerImpl::visitLandingPadInst(LandingPadInst &LI) {
if (MakeNewFilter) {
FilterType = ArrayType::get(FilterType->getElementType(),
NewFilterElts.size());
- FilterClause = ConstantArray::get(FilterType, NewFilterElts);
+ FilterClause =
+ ConstantArray::get(FilterType, NewFilterElts, &getDataLayout());
MakeNewInstruction = true;
}
diff --git a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
index 54fa484ac763f..8286ecddafe99 100644
--- a/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -2507,9 +2507,12 @@ void ModuleAddressSanitizer::InstrumentGlobalsMachO(
// On recent Mach-O platforms, we emit the global metadata in a way that
// allows the linker to properly strip dead globals.
+ const auto &DL = M.getDataLayout();
auto LivenessBinder =
- ConstantStruct::get(LivenessTy, Initializer->getAggregateElement(0u),
- ConstantExpr::getPointerCast(Metadata, IntptrTy));
+ ConstantStruct::get(LivenessTy,
+ {Initializer->getAggregateElement(0u),
+ ConstantExpr::getPointerCast(Metadata, IntptrTy)},
+ &DL);
GlobalVariable *Liveness = new GlobalVariable(
M, LivenessTy, false, GlobalVariable::InternalLinkage, LivenessBinder,
Twine("__asan_binder_") + G->getName());
diff --git a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp b/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
index 9f47c43bb9a0b..f143b1b42e2c9 100644
--- a/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
+++ b/llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
@@ -1041,10 +1041,11 @@ void GCOVProfiler::emitModuleInitFunctionPtrs(
#include "llvm/ProfileData/InstrProfData.inc"
};
+ const auto &DL = M->getDataLayout();
auto *CovInitGV =
new GlobalVariable(*M, STy, false, GlobalValue::PrivateLinkage, nullptr,
"__llvm_covinit_functions");
- CovInitGV->setInitializer(ConstantStruct::get(STy, InitFuncPtrs));
+ CovInitGV->setInitializer(ConstantStruct::get(STy, InitFuncPtrs, &DL));
CovInitGV->setVisibility(GlobalValue::VisibilityTypes::DefaultVisibility);
CovInitGV->setSection(getInstrProfSectionName(
IPSK_covinit, M->getTargetTriple().getObjectFormat()));
@@ -1122,6 +1123,7 @@ Function *GCOVProfiler::insertCounterWriteout(
// Collect the relevant data into a large constant data structure that we can
// walk to write out everything.
+ const auto &DL = M->getDataLayout();
StructType *StartFileCallArgsTy = StructType::create(
{Builder.getPtrTy(), Builder.getInt32Ty(), Builder.getInt32Ty()},
"start_file_args_ty");
@@ -1148,7 +1150,8 @@ Function *GCOVProfiler::insertCounterWriteout(
StartFileCallArgsTy,
{Builder.CreateGlobalString(FilenameGcda),
Builder.getInt32(endian::read32be(Options.Version)),
- Builder.getInt32(CfgChecksum)});
+ Builder.getInt32(CfgChecksum)},
+ &DL);
SmallVector<Constant *, 8> EmitFunctionCallArgsArray;
SmallVector<Constant *, 8> EmitArcsCallArgsArray;
@@ -1156,14 +1159,14 @@ Function *GCOVProfiler::insertCounterWriteout(
uint32_t FuncChecksum = Funcs.empty() ? 0 : Funcs[j]->getFuncChecksum();
EmitFunctionCallArgsArray.push_back(ConstantStruct::get(
EmitFunctionCallArgsTy,
- {Builder.getInt32(j),
- Builder.getInt32(FuncChecksum),
- Builder.getInt32(CfgChecksum)}));
+ {Builder.getInt32(j), Builder.getInt32(FuncChecksum),
+ Builder.getInt32(CfgChecksum)},
+ &DL));
GlobalVariable *GV = CountersBySP[j].first;
unsigned Arcs = cast<ArrayType>(GV->getValueType())->getNumElements();
EmitArcsCallArgsArray.push_back(ConstantStruct::get(
- EmitArcsCallArgsTy, {Builder.getInt32(Arcs), GV}));
+ EmitArcsCallArgsTy, {Builder.getInt32(Arcs), GV}, &DL));
}
// Create global arrays for the two emit calls.
int CountersSize = CountersBySP.size();
@@ -1177,7 +1180,7 @@ Function *GCOVProfiler::insertCounterWriteout(
*M, EmitFunctionCallArgsArrayTy, /*isConstant*/ true,
GlobalValue::InternalLinkage,
ConstantArray::get(EmitFunctionCallArgsArrayTy,
- EmitFunctionCallArgsArray),
+ EmitFunctionCallArgsArray, &DL),
Twine("__llvm_internal_gcov_emit_function_args.") + Twine(i));
auto *EmitArcsCallArgsArrayTy =
ArrayType::get(EmitArcsCallArgsTy, CountersSize);
@@ -1186,13 +1189,15 @@ Function *GCOVProfiler::insertCounterWriteout(
auto *EmitArcsCallArgsArrayGV = new GlobalVariable(
*M, EmitArcsCallArgsArrayTy, /*isConstant*/ true,
GlobalValue::InternalLinkage,
- ConstantArray::get(EmitArcsCallArgsArrayTy, EmitArcsCallArgsArray),
+ ConstantArray::get(EmitArcsCallArgsArrayTy, EmitArcsCallArgsArray, &DL),
Twine("__llvm_internal_gcov_emit_arcs_args.") + Twine(i));
EmitArcsCallArgsArrayGV->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);
FileInfos.push_back(ConstantStruct::get(
- FileInfoTy, {StartFileCallArgs, Builder.getInt32(CountersSize),
- EmitFunctionCallArgsArrayGV, EmitArcsCallArgsArrayGV}));
+ FileInfoTy,
+ {StartFileCallArgs, Builder.getInt32(CountersSize),
+ EmitFunctionCallArgsArrayGV, EmitArcsCallArgsArrayGV},
+ &DL));
}
// If we didn't find anything to actually emit, bail on out.
@@ -1214,7 +1219,7 @@ Function *GCOVProfiler::insertCounterWriteout(
auto *FileInfoArrayTy = ArrayType::get(FileInfoTy, FileInfos.size());
auto *FileInfoArrayGV = new GlobalVariable(
*M, FileInfoArrayTy, /*isConstant*/ true, GlobalValue::InternalLinkage,
- ConstantArray::get(FileInfoArrayTy, FileInfos),
+ ConstantArray::get(FileInfoArrayTy, FileInfos, &DL),
"__llvm_internal_gcov_emit_file_info");
FileInfoArrayGV->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);
diff --git a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
index fcad2705cf584..fb8342aab1b2e 100644
--- a/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp
@@ -613,11 +613,13 @@ void HWAddressSanitizer::createHwasanNote() {
ConstantExpr::getPtrToInt(Note, Int64Ty)),
Int32Ty);
};
+ const auto &DL = M.getDataLayout();
Note->setInitializer(ConstantStruct::getAnon(
{ConstantInt::get(Int32Ty, 8), // n_namesz
ConstantInt::get(Int32Ty, 8), // n_descsz
ConstantInt::get(Int32Ty, ELF::NT_LLVM_HWASAN_GLOBALS), // n_type
- Name, CreateRelPtr(Start), CreateRelPtr(Stop)}));
+ Name, CreateRelPtr(Start), CreateRelPtr(Stop)},
+ /*Packed=*/false, &DL));
appendToCompilerUsed(M, Note);
// Create a zero-length global in hwasan_globals so that the linker will
@@ -1723,7 +1725,9 @@ void HWAddressSanitizer::instrumentGlobal(GlobalVariable *GV, uint8_t Tag) {
std::vector<uint8_t> Init(NewSize - SizeInBytes, 0);
Init.back() = Tag;
Constant *Padding = ConstantDataArray::get(*C, Init);
- Initializer = ConstantStruct::getAnon({Initializer, Padding});
+ const auto &DL = M.getDataLayout();
+ Initializer = ConstantStruct::getAnon({Initializer, Padding},
+ /*Packed=*/false, &DL);
}
auto *NewGV = new GlobalVariable(M, Initializer->getType(), GV->isConstant(),
@@ -1768,7 +1772,9 @@ void HWAddressSanitizer::instrumentGlobal(GlobalVariable *GV, uint8_t Tag) {
uint32_t Size = std::min(SizeInBytes - DescriptorPos, MaxDescriptorSize);
auto *SizeAndTag = ConstantInt::get(Int32Ty, Size | (uint32_t(Tag) << 24));
Descriptor->setComdat(NewGV->getComdat());
- Descriptor->setInitializer(ConstantStruct::getAnon({GVRelPtr, SizeAndTag}));
+ const auto &DL = M.getDataLayout();
+ Descriptor->setInitializer(
+ ConstantStruct::getAnon({GVRelPtr, SizeAndTag}, /*Packed=*/false, &DL));
Descriptor->setSection("hwasan_globals");
Descriptor->setMetadata(LLVMContext::MD_associated,
MDNode::get(*C, ValueAsMetadata::get(NewGV)));
diff --git a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp
index 6d1e6bf68e3f1..d96c84470bcbe 100644
--- a/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp
+++ b/llvm/lib/Transforms/Instrumentation/InstrProfiling.cpp
@@ -1544,9 +1544,10 @@ void InstrLowerer::getOrCreateVTableProfData(GlobalVariable *GV) {
#undef INSTR_PROF_VTABLE_DATA
};
+ const auto &DL = M.getDataLayout();
auto *Data =
new GlobalVariable(M, DataTy, /*constant=*/false, Linkage,
- ConstantStruct::get(DataTy, DataVals),
+ ConstantStruct::get(DataTy, DataVals, &DL),
getInstrProfVTableVarPrefix() + PGOVTableName);
Data->setVisibility(Visibility);
@@ -1656,9 +1657,10 @@ InstrLowerer::createRegionCounters(InstrProfCntrInstBase *Inc, StringRef Name,
// TODO: `Constant::getAllOnesValue()` does not yet accept an array type.
std::vector<Constant *> InitialValues(NumCounters,
Constant::getAllOnesValue(CounterTy));
- GV = new GlobalVariable(M, CounterArrTy, false, Linkage,
- ConstantArray::get(CounterArrTy, InitialValues),
- Name);
+ const auto &DL = M.getDataLayout();
+ GV = new GlobalVariable(
+ M, CounterArrTy, false, Linkage,
+ ConstantArray::get(CounterArrTy, InitialValues, &DL), Name);
GV->setAlignment(Align(1));
} else {
auto *CounterTy = ArrayType::get(Type::getInt64Ty(Ctx), NumCounters);
@@ -1856,7 +1858,8 @@ void InstrLowerer::createDataVariable(InstrProfCntrInstBase *Inc) {
#define INSTR_PROF_DATA(Type, LLVMType, Name, Init) Init,
#include "llvm/ProfileData/InstrProfData.inc"
};
- Data->setInitializer(ConstantStruct::get(DataTy, DataVals));
+ const auto &DL = M.getDataLayout();
+ Data->setInitializer(ConstantStruct::get(DataTy, DataVals, &DL));
Data->setVisibility(Visibility);
Data->setSection(
diff --git a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
index b83bc7be53795..e257b9304f6e6 100644
--- a/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -1797,9 +1797,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
Constant *constToIntPtr(Type *IntPtrTy, uint64_t C) const {
if (VectorType *VectTy = dyn_cast<VectorType>(IntPtrTy)) {
+ const auto &DL = F.getDataLayout();
return ConstantVector::getSplat(
- VectTy->getElementCount(),
- constToIntPtr(VectTy->getElementType(), C));
+ VectTy->getElementCount(), constToIntPtr(VectTy->getElementType(), C),
+ &DL);
}
assert(IntPtrTy == MS.IntptrTy);
// TODO: Avoid implicit trunc?
@@ -2017,16 +2018,17 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
assert(ShadowTy);
if (isa<IntegerType>(ShadowTy) || isa<VectorType>(ShadowTy))
return Constant::getAllOnesValue(ShadowTy);
+ const auto &DL = F.getDataLayout();
if (ArrayType *AT = dyn_cast<ArrayType>(ShadowTy)) {
SmallVector<Constant *, 4> Vals(AT->getNumElements(),
getPoisonedShadow(AT->getElementType()));
- return ConstantArray::get(AT, Vals);
+ return ConstantArray::get(AT, Vals, &DL);
}
if (StructType *ST = dyn_cast<StructType>(ShadowTy)) {
SmallVector<Constant *, 4> Vals;
for (unsigned i = 0, n = ST->getNumElements(); i < n; i++)
Vals.push_back(getPoisonedShadow(ST->getElementType(i)));
- return ConstantStruct::get(ST, Vals);
+ return ConstantStruct::get(ST, Vals, &DL);
}
llvm_unreachable("Unexpected shadow type");
}
@@ -2168,7 +2170,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
: getCleanShadow(Elem);
}
- Value *ShadowConstant = ConstantVector::get(ShadowVector);
+ const auto &DL = F.getDataLayout();
+ Value *ShadowConstant = ConstantVector::get(ShadowVector, &DL);
LLVM_DEBUG(dbgs() << "Partial undef constant vector: " << *V << " ==> "
<< *ShadowConstant << "\n");
@@ -3033,7 +3036,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
Elements.push_back(ConstantInt::get(EltTy, 1));
}
}
- ShadowMul = ConstantVector::get(Elements);
+ const auto &DL = I.getModule()->getDataLayout();
+ ShadowMul = ConstantVector::get(Elements, &DL);
} else {
if (ConstantInt *Elt = dyn_cast<ConstantInt>(ConstArg)) {
const APInt &V = Elt->getValue();
@@ -3910,7 +3914,8 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
M = ConstantInt::getBool(F.getContext(), Mask & 1);
Mask >>= 1;
}
- return ConstantVector::get(R);
+ const auto &DL = F.getDataLayout();
+ return ConstantVector::get(R, &DL);
}
// Calculate output shadow as array of booleans `<n x i1>`, assuming if any
@@ -5657,9 +5662,10 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
// ummla multiplies a 2x8 matrix with an 8x2 matrix. If all entries of the
// input matrices are equal to 0x1, all entries of the output matrix will
// be 0x8.
+ const auto &DL = F.getDataLayout();
Value *FullyInit = ConstantVector::getSplat(
ExpectedRTy->getElementCount(),
- ConstantInt::get(ExpectedRTy->getElementType(), 0x8));
+ ConstantInt::get(ExpectedRTy->getElementType(), 0x8), &DL);
ShadowAB = IRB.CreateSExt(IRB.CreateICmpNE(ShadowAB, FullyInit),
ShadowAB->getType());
diff --git a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
index de7c1696078db..8c75942465aa4 100644
--- a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
+++ b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp
@@ -138,16 +138,18 @@ CtxInstrumentationLowerer::CtxInstrumentationLowerer(Module &M,
#undef _VOLATILE_PTRDECL
#undef _MUTEXDECL
+ const auto &DL = M.getDataLayout();
#define _PTRDECL(_, __) Constant::getNullValue(PointerTy),
#define _VOLATILE_PTRDECL(_, __) _PTRDECL(_, __)
#define _MUTEXDECL(_) Constant::getNullValue(SanitizerMutexType),
#define _CONTEXT_ROOT \
Constant::getIntegerValue( \
- PointerTy, \
- APInt(M.getDataLayout().getPointerTypeSizeInBits(PointerTy), 1U)),
+ PointerTy, APInt(DL.getPointerTypeSizeInBits(PointerTy), 1U)),
CannotBeRootInitializer = ConstantStruct::get(
- FunctionDataTy, {CTXPROF_FUNCTION_DATA(_PTRDECL, _CONTEXT_ROOT,
- _VOLATILE_PTRDECL, _MUTEXDECL)});
+ FunctionDataTy,
+ {CTXPROF_FUNCTION_DATA(_PTRDECL, _CONTEXT_ROOT, _VOLATILE_PTRDECL,
+ _MUTEXDECL)},
+ &DL);
#undef _PTRDECL
#undef _CONTEXT_ROOT
#undef _VOLATILE_PTRDECL
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
index 7f061e2259711..4d1471e7b15ba 100644
--- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
+++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
@@ -806,7 +806,7 @@ ModuleSanitizerCoverage::CreatePCArray(Function &F,
auto *PCArray =
CreateFunctionLocalArrayInSection(N * 2, F, PtrTy, SanCovPCsSectionName);
PCArray->setInitializer(
- ConstantArray::get(ArrayType::get(PtrTy, N * 2), PCs));
+ ConstantArray::get(ArrayType::get(PtrTy, N * 2), PCs, DL));
PCArray->setConstant(true);
return PCArray;
@@ -925,7 +925,7 @@ void ModuleSanitizerCoverage::InjectTraceForSwitch(
ArrayType *ArrayOfInt64Ty = ArrayType::get(Int64Ty, Initializers.size());
GlobalVariable *GV = new GlobalVariable(
*CurModule, ArrayOfInt64Ty, false, GlobalVariable::InternalLinkage,
- ConstantArray::get(ArrayOfInt64Ty, Initializers),
+ ConstantArray::get(ArrayOfInt64Ty, Initializers, DL),
"__sancov_gen_cov_switch_values");
if (Options.GatedCallbacks) {
auto GateBranch = CreateGateBranch(F, FunctionGateCmp, I);
@@ -1235,6 +1235,6 @@ void ModuleSanitizerCoverage::createFunctionControlFlow(Function &F) {
FunctionCFsArray = CreateFunctionLocalArrayInSection(CFs.size(), F, PtrTy,
SanCovCFsSectionName);
FunctionCFsArray->setInitializer(
- ConstantArray::get(ArrayType::get(PtrTy, CFs.size()), CFs));
+ ConstantArray::get(ArrayType::get(PtrTy, CFs.size()), CFs, DL));
FunctionCFsArray->setConstant(true);
}
diff --git a/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp
index 98a8068cac946..28c640f719e87 100644
--- a/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/TypeSanitizer.cpp
@@ -381,8 +381,9 @@ bool TypeSanitizer::generateBaseTypeDescriptor(
PushTDSub(NameData);
+ const auto &DL = M.getDataLayout();
StructType *TDTy = StructType::get(C, TDSubTys);
- Constant *TD = ConstantStruct::get(TDTy, TDSubData);
+ Constant *TD = ConstantStruct::get(TDTy, TDSubData, &DL);
GlobalVariable *TDGV =
new GlobalVariable(TDTy, true,
@@ -460,11 +461,14 @@ bool TypeSanitizer::generateTypeDescriptor(
// The descriptor for a scalar is:
// [1, base-type pointer, access-type pointer, offset]
+ const auto &DL = M.getDataLayout();
StructType *TDTy =
StructType::get(IntptrTy, Base->getType(), Access->getType(), IntptrTy);
Constant *TD =
- ConstantStruct::get(TDTy, ConstantInt::get(IntptrTy, 1), Base, Access,
- ConstantInt::get(IntptrTy, Offset));
+ ConstantStruct::get(TDTy,
+ {ConstantInt::get(IntptrTy, 1), Base, Access,
+ ConstantInt::get(IntptrTy, Offset)},
+ &DL);
bool ShouldBeComdat = cast<GlobalVariable>(Base)->getLinkage() ==
GlobalValue::LinkOnceODRLinkage;
diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
index f4897034569c6..fe257814aeed8 100644
--- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
+++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
@@ -639,9 +639,12 @@ static bool processOverflowIntrinsic(WithOverflowInst *WO, LazyValueInfo *LVI) {
setDeducedOverflowingFlags(NewOp, Opcode, NSW, NUW);
StructType *ST = cast<StructType>(WO->getType());
- Constant *Struct = ConstantStruct::get(ST,
- { PoisonValue::get(ST->getElementType(0)),
- ConstantInt::getFalse(ST->getElementType(1)) });
+ const auto &DL = WO->getDataLayout();
+ Constant *Struct =
+ ConstantStruct::get(ST,
+ {PoisonValue::get(ST->getElementType(0)),
+ ConstantInt::getFalse(ST->getElementType(1))},
+ &DL);
Value *NewI = B.CreateInsertValue(Struct, NewOp, 0);
WO->replaceAllUsesWith(NewI);
WO->eraseFromParent();
diff --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
index 074cc73d53080..df1f44f769b04 100644
--- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
@@ -1559,7 +1559,7 @@ bool LoopIdiomRecognize::optimizeCRCLoop(const PolynomialInfo &Info) {
CRCConstants.begin(),
[CRCTy](const APInt &E) { return ConstantInt::get(CRCTy, E); });
Constant *ConstArray =
- ConstantArray::get(ArrayType::get(CRCTy, 256), CRCConstants);
+ ConstantArray::get(ArrayType::get(CRCTy, 256), CRCConstants, DL);
GlobalVariable *GV =
new GlobalVariable(M, ConstArray->getType(), true,
GlobalValue::PrivateLinkage, ConstArray, ".crctable");
diff --git a/llvm/lib/Transforms/Utils/CtorUtils.cpp b/llvm/lib/Transforms/Utils/CtorUtils.cpp
index 968446c4eee11..cc65a31c3d43a 100644
--- a/llvm/lib/Transforms/Utils/CtorUtils.cpp
+++ b/llvm/lib/Transforms/Utils/CtorUtils.cpp
@@ -13,6 +13,7 @@
#include "llvm/Transforms/Utils/CtorUtils.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/IR/Constants.h"
+#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Module.h"
@@ -25,7 +26,9 @@
using namespace llvm;
/// Given a specified llvm.global_ctors list, remove the listed elements.
-static void removeGlobalCtors(GlobalVariable *GCL, const BitVector &CtorsToRemove) {
+static void removeGlobalCtors(GlobalVariable *GCL,
+ const BitVector &CtorsToRemove) {
+ const auto &DL = GCL->getParent()->getDataLayout();
// Filter out the initializer elements to remove.
ConstantArray *OldCA = cast<ConstantArray>(GCL->getInitializer());
SmallVector<Constant *, 10> CAList;
@@ -36,7 +39,7 @@ static void removeGlobalCtors(GlobalVariable *GCL, const BitVector &CtorsToRemov
// Create the new array initializer.
ArrayType *ATy =
ArrayType::get(OldCA->getType()->getElementType(), CAList.size());
- Constant *CA = ConstantArray::get(ATy, CAList);
+ Constant *CA = ConstantArray::get(ATy, CAList, &DL);
// If we didn't change the number of elements, don't create a new GV.
if (CA->getType() == OldCA->getType()) {
diff --git a/llvm/lib/Transforms/Utils/Evaluator.cpp b/llvm/lib/Transforms/Utils/Evaluator.cpp
index b2ee1da143ba7..606f1e8d98cef 100644
--- a/llvm/lib/Transforms/Utils/Evaluator.cpp
+++ b/llvm/lib/Transforms/Utils/Evaluator.cpp
@@ -198,17 +198,17 @@ bool Evaluator::MutableValue::write(Constant *V, APInt Offset,
return true;
}
-Constant *Evaluator::MutableAggregate::toConstant() const {
+Constant *Evaluator::MutableAggregate::toConstant(const DataLayout &DL) const {
SmallVector<Constant *, 32> Consts;
for (const MutableValue &MV : Elements)
- Consts.push_back(MV.toConstant());
+ Consts.push_back(MV.toConstant(DL));
if (auto *ST = dyn_cast<StructType>(Ty))
- return ConstantStruct::get(ST, Consts);
+ return ConstantStruct::get(ST, Consts, &DL);
if (auto *AT = dyn_cast<ArrayType>(Ty))
- return ConstantArray::get(AT, Consts);
+ return ConstantArray::get(AT, Consts, &DL);
assert(isa<FixedVectorType>(Ty) && "Must be vector");
- return ConstantVector::get(Consts);
+ return ConstantVector::get(Consts, &DL);
}
/// Return the value that would be computed by a load from P after the stores
diff --git a/llvm/lib/Transforms/Utils/ModuleUtils.cpp b/llvm/lib/Transforms/Utils/ModuleUtils.cpp
index 63a234960a0ad..df1d1568c8ffc 100644
--- a/llvm/lib/Transforms/Utils/ModuleUtils.cpp
+++ b/llvm/lib/Transforms/Utils/ModuleUtils.cpp
@@ -13,6 +13,7 @@
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Analysis/VectorUtils.h"
+#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
@@ -71,11 +72,13 @@ static void appendToGlobalArray(StringRef ArrayName, Module &M, Function *F,
GlobalValue::AppendingLinkage, NewInit, ArrayName);
}
-void llvm::appendToGlobalCtors(Module &M, Function *F, int Priority, Constant *Data) {
+void llvm::appendToGlobalCtors(Module &M, Function *F, int Priority,
+ Constant *Data) {
appendToGlobalArray("llvm.global_ctors", M, F, Priority, Data);
}
-void llvm::appendToGlobalDtors(Module &M, Function *F, int Priority, Constant *Data) {
+void llvm::appendToGlobalDtors(Module &M, Function *F, int Priority,
+ Constant *Data) {
appendToGlobalArray("llvm.global_dtors", M, F, Priority, Data);
}
@@ -106,8 +109,9 @@ static void transformGlobalArray(StringRef ArrayName, Module &M,
GVCtor->eraseFromParent();
// Create a new initializer.
+ const auto &DL = M.getDataLayout();
ArrayType *AT = ArrayType::get(EltTy, CurrentCtors.size());
- Constant *NewInit = ConstantArray::get(AT, CurrentCtors);
+ Constant *NewInit = ConstantArray::get(AT, CurrentCtors, &DL);
// Create the new global variable and replace all uses of
// the old global variable with the new one.
@@ -133,7 +137,9 @@ static void collectUsedGlobals(GlobalVariable *GV,
Init.insert(cast<Constant>(Op));
}
-static void appendToUsedList(Module &M, StringRef Name, ArrayRef<GlobalValue *> Values) {
+static void appendToUsedList(Module &M, StringRef Name,
+ ArrayRef<GlobalValue *> Values) {
+ const auto &DL = M.getDataLayout();
GlobalVariable *GV = M.getGlobalVariable(Name);
SmallSetVector<Constant *, 16> Init;
@@ -149,9 +155,9 @@ static void appendToUsedList(Module &M, StringRef Name, ArrayRef<GlobalValue *>
return;
ArrayType *ATy = ArrayType::get(ArrayEltTy, Init.size());
- GV = new llvm::GlobalVariable(M, ATy, false, GlobalValue::AppendingLinkage,
- ConstantArray::get(ATy, Init.getArrayRef()),
- Name);
+ GV = new llvm::GlobalVariable(
+ M, ATy, false, GlobalValue::AppendingLinkage,
+ ConstantArray::get(ATy, Init.getArrayRef(), &DL), Name);
GV->setSection("llvm.metadata");
}
@@ -165,6 +171,7 @@ void llvm::appendToCompilerUsed(Module &M, ArrayRef<GlobalValue *> Values) {
static void removeFromUsedList(Module &M, StringRef Name,
function_ref<bool(Constant *)> ShouldRemove) {
+ const auto &DL = M.getDataLayout();
GlobalVariable *GV = M.getNamedGlobal(Name);
if (!GV)
return;
@@ -184,7 +191,7 @@ static void removeFromUsedList(Module &M, StringRef Name,
ArrayType *ATy = ArrayType::get(ArrayEltTy, NewInit.size());
GlobalVariable *NewGV =
new GlobalVariable(M, ATy, false, GlobalValue::AppendingLinkage,
- ConstantArray::get(ATy, NewInit), "", GV,
+ ConstantArray::get(ATy, NewInit, &DL), "", GV,
GV->getThreadLocalMode(), GV->getAddressSpace());
NewGV->setSection(GV->getSection());
NewGV->takeName(GV);
diff --git a/llvm/lib/Transforms/Utils/RelLookupTableConverter.cpp b/llvm/lib/Transforms/Utils/RelLookupTableConverter.cpp
index 1891dacd19a7a..871752e7da335 100644
--- a/llvm/lib/Transforms/Utils/RelLookupTableConverter.cpp
+++ b/llvm/lib/Transforms/Utils/RelLookupTableConverter.cpp
@@ -15,6 +15,7 @@
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/DataLayout.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
@@ -111,8 +112,7 @@ static bool shouldConvertToRelLookupTable(LookupTableInfo &Info, Module &M,
if (!GlovalVarOp || !GlovalVarOp->isConstant())
return false;
- if (!GlovalVarOp->hasLocalLinkage() ||
- !GlovalVarOp->isDSOLocal() ||
+ if (!GlovalVarOp->hasLocalLinkage() || !GlovalVarOp->isDSOLocal() ||
!GlovalVarOp->isImplicitDSOLocal())
return false;
@@ -133,6 +133,7 @@ static GlobalVariable *createRelLookupTable(LookupTableInfo &Info,
Function &Func,
GlobalVariable &LookupTable) {
Module &M = *Func.getParent();
+ const auto &DL = M.getDataLayout();
ArrayType *IntArrayTy =
ArrayType::get(Type::getInt32Ty(M.getContext()), Info.Ptrs.size());
@@ -156,7 +157,7 @@ static GlobalVariable *createRelLookupTable(LookupTableInfo &Info,
}
Constant *Initializer =
- ConstantArray::get(IntArrayTy, RelLookupTableContents);
+ ConstantArray::get(IntArrayTy, RelLookupTableContents, &DL);
RelLookupTable->setInitializer(Initializer);
RelLookupTable->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);
RelLookupTable->setAlignment(llvm::Align(4));
diff --git a/llvm/lib/Transforms/Utils/SanitizerStats.cpp b/llvm/lib/Transforms/Utils/SanitizerStats.cpp
index b80c5a6f9d684..f4a45cb2edeb2 100644
--- a/llvm/lib/Transforms/Utils/SanitizerStats.cpp
+++ b/llvm/lib/Transforms/Utils/SanitizerStats.cpp
@@ -46,13 +46,15 @@ void SanitizerStatReport::create(IRBuilder<> &B, SanitizerStatKind SK) {
IntegerType *IntPtrTy = B.getIntPtrTy(M->getDataLayout());
ArrayType *StatTy = ArrayType::get(PtrTy, 2);
+ const auto &DL = M->getDataLayout();
Inits.push_back(ConstantArray::get(
StatTy,
{Constant::getNullValue(PtrTy),
ConstantExpr::getIntToPtr(
ConstantInt::get(IntPtrTy, uint64_t(SK) << (IntPtrTy->getBitWidth() -
kSanitizerStatKindBits)),
- PtrTy)}));
+ PtrTy)},
+ &DL));
FunctionType *StatReportTy = FunctionType::get(B.getVoidTy(), PtrTy, false);
FunctionCallee StatReport =
@@ -73,6 +75,7 @@ void SanitizerStatReport::finish() {
return;
}
+ const auto &DL = M->getDataLayout();
PointerType *Int8PtrTy = PointerType::getUnqual(M->getContext());
IntegerType *Int32Ty = Type::getInt32Ty(M->getContext());
Type *VoidTy = Type::getVoidTy(M->getContext());
@@ -84,7 +87,8 @@ void SanitizerStatReport::finish() {
ConstantStruct::getAnon(
{Constant::getNullValue(Int8PtrTy),
ConstantInt::get(Int32Ty, Inits.size()),
- ConstantArray::get(makeModuleStatsArrayTy(), Inits)}));
+ ConstantArray::get(makeModuleStatsArrayTy(), Inits, &DL)},
+ /*Packed=*/false, &DL));
ModuleStatsGV->replaceAllUsesWith(NewModuleStatsGV);
ModuleStatsGV->eraseFromParent();
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 95cc209721352..ad8a332e7cb40 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -6962,7 +6962,7 @@ SwitchReplacement::SwitchReplacement(
// Store the table in an array.
auto *TableTy = ArrayType::get(ValueType, TableSize);
- Initializer = ConstantArray::get(TableTy, TableContents);
+ Initializer = ConstantArray::get(TableTy, TableContents, &DL);
Kind = LookupTableKind;
}
diff --git a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
index e6bb7bd076e4d..9fa4af24efbc0 100644
--- a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
@@ -1990,7 +1990,7 @@ Value *Vectorizer::createMaskForExtraElements(const ArrayRef<ChainElem> C,
else
MaskElts[VecIdx] = Builder.getInt1(true);
}
- return ConstantVector::get(MaskElts);
+ return ConstantVector::get(MaskElts, &DL);
}
void Vectorizer::deleteExtraElements() {
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index 3a10d2b2a7158..361caf8b77855 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -14260,7 +14260,7 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
DL.getTypeStoreSizeInBits(Ty->getScalarType()))),
Ty->getScalarType());
if (auto *VTy = dyn_cast<VectorType>(Ty))
- Res = ConstantVector::getSplat(VTy->getElementCount(), Res);
+ Res = ConstantVector::getSplat(VTy->getElementCount(), Res, &DL);
return Res;
}
return Constant::getAllOnesValue(Ty);
@@ -15045,12 +15045,12 @@ class BoUpSLP::ShuffleCostEstimator : public BaseShuffleAnalysis {
// types.
Vals = replicateMask(Vals, VecTy->getNumElements());
}
- return ConstantVector::get(Vals);
+ return ConstantVector::get(Vals, R.DL);
}
return ConstantVector::getSplat(
ElementCount::getFixed(
cast<FixedVectorType>(Root->getType())->getNumElements()),
- getAllOnesValue(*R.DL, ScalarTy->getScalarType()));
+ getAllOnesValue(*R.DL, ScalarTy->getScalarType()), R.DL);
}
InstructionCost createFreeze(InstructionCost Cost) { return Cost; }
/// Finalize emission of the shuffles.
@@ -21201,7 +21201,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
assert(SLPReVec && "Only supported by REVEC.");
MaskValues = replicateMask(MaskValues, VecTy->getNumElements());
}
- Constant *MaskValue = ConstantVector::get(MaskValues);
+ Constant *MaskValue = ConstantVector::get(MaskValues, DL);
NewLI = Builder.CreateMaskedLoad(LoadVecTy, PO, CommonAlignment,
MaskValue);
} else {
@@ -21276,7 +21276,7 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
VecTy->getElementType(),
Builder.CreateShuffleVector(
VecPtr, createReplicatedMask(ScalarTyNumElements, VF)),
- ConstantVector::get(Indices));
+ ConstantVector::get(Indices, DL));
}
// Use the minimum alignment of the gathered loads.
Align CommonAlignment = computeCommonAlignment<LoadInst>(E->Scalars);
@@ -26368,7 +26368,7 @@ class HorizontalReduction {
// Emit code to correctly handle reused reduced values, if required.
if (OptReusedScalars && !SameScaleFactor) {
VectorizedRoot = emitReusedOps(VectorizedRoot, Builder, V,
- SameValuesCounter, TrackedToOrig);
+ SameValuesCounter, TrackedToOrig, DL);
}
Type *ScalarTy = VL.front()->getType();
@@ -26415,7 +26415,7 @@ class HorizontalReduction {
if (!VectorValuesAndScales.empty())
VectorizedTree = GetNewVectorizedTree(
VectorizedTree,
- emitReduction(Builder, *TTI, ReductionRoot->getType()));
+ emitReduction(Builder, *TTI, ReductionRoot->getType(), DL));
if (!VectorizedTree) {
if (!CheckForReusedReductionOps) {
@@ -26825,7 +26825,7 @@ class HorizontalReduction {
/// sub-registers, combines them with the given reduction operation as a
/// vector operation and then performs single (small enough) reduction.
Value *emitReduction(IRBuilderBase &Builder, const TargetTransformInfo &TTI,
- Type *DestTy) {
+ Type *DestTy, const DataLayout &DL) {
Value *ReducedSubTree = nullptr;
// Creates reduction and combines with the previous reduction.
auto CreateSingleOp = [&](Value *Vec, unsigned Scale, bool IsSigned,
@@ -26878,7 +26878,7 @@ class HorizontalReduction {
Vec, getWidenedType(DestTy, getNumElements(Vec->getType())),
IsSigned);
Value *Scale = ConstantVector::getSplat(
- EC, ConstantInt::get(DestTy->getScalarType(), Cnt));
+ EC, ConstantInt::get(DestTy->getScalarType(), Cnt), &DL);
LLVM_DEBUG(dbgs() << "SLP: Add (to-mul) " << Cnt << "of " << Vec
<< ". (HorRdx)\n");
++NumVectorInstructions;
@@ -26896,7 +26896,7 @@ class HorizontalReduction {
case RecurKind::FAdd: {
// res = fmul v, n
Value *Scale =
- ConstantVector::getSplat(EC, ConstantFP::get(ScalarTy, Cnt));
+ ConstantVector::getSplat(EC, ConstantFP::get(ScalarTy, Cnt), &DL);
LLVM_DEBUG(dbgs() << "SLP: FAdd (to-fmul) " << Cnt << "of " << Vec
<< ". (HorRdx)\n");
++NumVectorInstructions;
@@ -27080,7 +27080,8 @@ class HorizontalReduction {
Value *
emitReusedOps(Value *VectorizedValue, IRBuilderBase &Builder, BoUpSLP &R,
const SmallMapVector<Value *, unsigned, 16> &SameValuesCounter,
- const DenseMap<Value *, Value *> &TrackedToOrig) {
+ const DenseMap<Value *, Value *> &TrackedToOrig,
+ const DataLayout &DL) {
assert(IsSupportedHorRdxIdentityOp &&
"The optimization of matched scalar identity horizontal reductions "
"must be supported.");
@@ -27100,7 +27101,7 @@ class HorizontalReduction {
unsigned Cnt = SameValuesCounter.lookup(TrackedToOrig.at(V));
Vals.push_back(ConstantInt::get(V->getType(), Cnt, /*IsSigned=*/false));
}
- auto *Scale = ConstantVector::get(Vals);
+ auto *Scale = ConstantVector::get(Vals, &DL);
LLVM_DEBUG(dbgs() << "SLP: Add (to-mul) " << Scale << "of "
<< VectorizedValue << ". (HorRdx)\n");
return Builder.CreateMul(VectorizedValue, Scale);
@@ -27158,7 +27159,7 @@ class HorizontalReduction {
unsigned Cnt = SameValuesCounter.lookup(TrackedToOrig.at(V));
Vals.push_back(ConstantFP::get(V->getType(), Cnt));
}
- auto *Scale = ConstantVector::get(Vals);
+ auto *Scale = ConstantVector::get(Vals, &DL);
return Builder.CreateFMul(VectorizedValue, Scale);
}
case RecurKind::Sub:
diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index c94977965d4f6..42e615c1d80b1 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -1540,7 +1540,7 @@ bool VectorCombine::foldExtractedCmps(Instruction &I) {
PoisonValue::get(VecTy->getElementType()));
CmpC[Index0] = C0;
CmpC[Index1] = C1;
- Value *VCmp = Builder.CreateCmp(Pred, X, ConstantVector::get(CmpC));
+ Value *VCmp = Builder.CreateCmp(Pred, X, ConstantVector::get(CmpC, DL));
Value *Shuf = createShiftShuffle(VCmp, ExpensiveIndex, CheapIndex, Builder);
Value *LHS = ConvertToShuf == Ext0 ? Shuf : VCmp;
Value *RHS = ConvertToShuf == Ext0 ? VCmp : Shuf;
@@ -5428,7 +5428,8 @@ bool VectorCombine::foldInterleaveIntrinsics(Instruction &I) {
NewSplatVal <<= Width;
NewSplatVal |= SplatVal0->zext(Width * 2);
auto *NewSplat = ConstantVector::getSplat(
- ExtVTy->getElementCount(), ConstantInt::get(F.getContext(), NewSplatVal));
+ ExtVTy->getElementCount(), ConstantInt::get(F.getContext(), NewSplatVal),
+ DL);
IRBuilder<> Builder(&I);
replaceValue(I, *Builder.CreateBitCast(NewSplat, I.getType()));
More information about the llvm-branch-commits
mailing list