[llvm-branch-commits] [llvm] [NFC] Thread `DataLayout` through helper function signatures for aggregate construction (PR #183213)

Shilei Tian via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Feb 24 15:55:43 PST 2026


https://github.com/shiltian created https://github.com/llvm/llvm-project/pull/183213

Add `const DataLayout *DL` parameter to helper functions and classes that
construct aggregate constants but previously had no access to `DataLayout`. This
is the final preparatory step before the `ConstantPointerNull` semantic change,
ensuring aggregate collapse-to-`ConstantAggregateZero` checks have `DataLayout`
awareness in all remaining call sites.

>From 73228aaa20af7ee0e35ba55e1e5173a416da6e9a Mon Sep 17 00:00:00 2001
From: Shilei Tian <i at tianshilei.me>
Date: Sun, 15 Feb 2026 13:20:53 -0500
Subject: [PATCH] [NFC] Thread `DataLayout` through helper function signatures
 for aggregate construction

Add `const DataLayout *DL` parameter to helper functions and classes that
construct aggregate constants but previously had no access to `DataLayout`. This
is the final preparatory step before the `ConstantPointerNull` semantic change,
ensuring aggregate collapse-to-`ConstantAggregateZero` checks have `DataLayout`
awareness in all remaining call sites.
---
 .../llvm/Transforms/Utils/ValueMapper.h       | 45 ++++++++++++-------
 llvm/lib/Linker/IRMover.cpp                   |  3 +-
 .../AMDGPU/AMDGPULowerBufferFatPointers.cpp   | 30 ++++++++-----
 .../Target/DirectX/DXILDataScalarization.cpp  | 12 ++---
 llvm/lib/Target/DirectX/DXILFlattenArrays.cpp |  8 ++--
 .../Target/XCore/XCoreLowerThreadLocal.cpp    | 12 ++---
 .../Transforms/Scalar/InferAddressSpaces.cpp  |  4 +-
 llvm/lib/Transforms/Utils/ValueMapper.cpp     | 21 +++++----
 8 files changed, 81 insertions(+), 54 deletions(-)

diff --git a/llvm/include/llvm/Transforms/Utils/ValueMapper.h b/llvm/include/llvm/Transforms/Utils/ValueMapper.h
index 28c4ae840b29f..b29fb14f5e614 100644
--- a/llvm/include/llvm/Transforms/Utils/ValueMapper.h
+++ b/llvm/include/llvm/Transforms/Utils/ValueMapper.h
@@ -24,6 +24,7 @@
 namespace llvm {
 
 class Constant;
+class DataLayout;
 class DIBuilder;
 class DbgRecord;
 class Function;
@@ -167,7 +168,8 @@ class ValueMapper {
   LLVM_ABI ValueMapper(ValueToValueMapTy &VM, RemapFlags Flags = RF_None,
                        ValueMapTypeRemapper *TypeMapper = nullptr,
                        ValueMaterializer *Materializer = nullptr,
-                       const MetadataPredicate *IdentityMD = nullptr);
+                       const MetadataPredicate *IdentityMD = nullptr,
+                       const DataLayout *DL = nullptr);
   ValueMapper(ValueMapper &&) = delete;
   ValueMapper(const ValueMapper &) = delete;
   ValueMapper &operator=(ValueMapper &&) = delete;
@@ -237,8 +239,9 @@ inline Value *MapValue(const Value *V, ValueToValueMapTy &VM,
                        RemapFlags Flags = RF_None,
                        ValueMapTypeRemapper *TypeMapper = nullptr,
                        ValueMaterializer *Materializer = nullptr,
-                       const MetadataPredicate *IdentityMD = nullptr) {
-  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                       const MetadataPredicate *IdentityMD = nullptr,
+                       const DataLayout *DL = nullptr) {
+  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .mapValue(*V);
 }
 
@@ -263,8 +266,9 @@ inline Metadata *MapMetadata(const Metadata *MD, ValueToValueMapTy &VM,
                              RemapFlags Flags = RF_None,
                              ValueMapTypeRemapper *TypeMapper = nullptr,
                              ValueMaterializer *Materializer = nullptr,
-                             const MetadataPredicate *IdentityMD = nullptr) {
-  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                             const MetadataPredicate *IdentityMD = nullptr,
+                             const DataLayout *DL = nullptr) {
+  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .mapMetadata(*MD);
 }
 
@@ -273,8 +277,9 @@ inline MDNode *MapMetadata(const MDNode *MD, ValueToValueMapTy &VM,
                            RemapFlags Flags = RF_None,
                            ValueMapTypeRemapper *TypeMapper = nullptr,
                            ValueMaterializer *Materializer = nullptr,
-                           const MetadataPredicate *IdentityMD = nullptr) {
-  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                           const MetadataPredicate *IdentityMD = nullptr,
+                           const DataLayout *DL = nullptr) {
+  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .mapMDNode(*MD);
 }
 
@@ -290,8 +295,9 @@ inline void RemapInstruction(Instruction *I, ValueToValueMapTy &VM,
                              RemapFlags Flags = RF_None,
                              ValueMapTypeRemapper *TypeMapper = nullptr,
                              ValueMaterializer *Materializer = nullptr,
-                             const MetadataPredicate *IdentityMD = nullptr) {
-  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                             const MetadataPredicate *IdentityMD = nullptr,
+                             const DataLayout *DL = nullptr) {
+  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .remapInstruction(*I);
 }
 
@@ -307,8 +313,9 @@ inline void RemapDbgRecord(Module *M, DbgRecord *DR, ValueToValueMapTy &VM,
                            RemapFlags Flags = RF_None,
                            ValueMapTypeRemapper *TypeMapper = nullptr,
                            ValueMaterializer *Materializer = nullptr,
-                           const MetadataPredicate *IdentityMD = nullptr) {
-  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                           const MetadataPredicate *IdentityMD = nullptr,
+                           const DataLayout *DL = nullptr) {
+  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .remapDbgRecord(M, *DR);
 }
 
@@ -320,8 +327,9 @@ inline void RemapDbgRecordRange(Module *M,
                                 RemapFlags Flags = RF_None,
                                 ValueMapTypeRemapper *TypeMapper = nullptr,
                                 ValueMaterializer *Materializer = nullptr,
-                                const MetadataPredicate *IdentityMD = nullptr) {
-  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                                const MetadataPredicate *IdentityMD = nullptr,
+                                const DataLayout *DL = nullptr) {
+  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .remapDbgRecordRange(M, Range);
 }
 
@@ -335,8 +343,10 @@ inline void RemapFunction(Function &F, ValueToValueMapTy &VM,
                           RemapFlags Flags = RF_None,
                           ValueMapTypeRemapper *TypeMapper = nullptr,
                           ValueMaterializer *Materializer = nullptr,
-                          const MetadataPredicate *IdentityMD = nullptr) {
-  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD).remapFunction(F);
+                          const MetadataPredicate *IdentityMD = nullptr,
+                          const DataLayout *DL = nullptr) {
+  ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
+      .remapFunction(F);
 }
 
 /// Version of MapValue with type safety for Constant.
@@ -344,8 +354,9 @@ inline Constant *MapValue(const Constant *V, ValueToValueMapTy &VM,
                           RemapFlags Flags = RF_None,
                           ValueMapTypeRemapper *TypeMapper = nullptr,
                           ValueMaterializer *Materializer = nullptr,
-                          const MetadataPredicate *IdentityMD = nullptr) {
-  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD)
+                          const MetadataPredicate *IdentityMD = nullptr,
+                          const DataLayout *DL = nullptr) {
+  return ValueMapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)
       .mapConstant(*V);
 }
 
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index 03c807ead9dfd..9c25d0dd11413 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -447,7 +447,8 @@ class IRLinker {
         GValMaterializer(*this), LValMaterializer(*this), SharedMDs(SharedMDs),
         IsPerformingImport(IsPerformingImport),
         Mapper(ValueMap, RF_ReuseAndMutateDistinctMDs | RF_IgnoreMissingLocals,
-               &TypeMap, &GValMaterializer),
+               &TypeMap, &GValMaterializer, /*IdentityMD=*/nullptr,
+               &DstM.getDataLayout()),
         IndirectSymbolMCID(Mapper.registerAlternateMappingContext(
             IndirectSymbolValueMap, &LValMaterializer)) {
     ValueMap.getMDMap() = std::move(SharedMDs);
diff --git a/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp b/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
index 05e97d2fc7508..37ca2aff005c9 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp
@@ -1199,6 +1199,7 @@ namespace {
 /// Handle the remapping of ptr addrspace(7) constants.
 class FatPtrConstMaterializer final : public ValueMaterializer {
   BufferFatPtrToStructTypeMap *TypeMap;
+  const DataLayout *DL;
   // An internal mapper that is used to recurse into the arguments of constants.
   // While the documentation for `ValueMapper` specifies not to use it
   // recursively, examination of the logic in mapValue() shows that it can
@@ -1211,9 +1212,11 @@ class FatPtrConstMaterializer final : public ValueMaterializer {
 public:
   // UnderlyingMap is the value map this materializer will be filling.
   FatPtrConstMaterializer(BufferFatPtrToStructTypeMap *TypeMap,
+                          const DataLayout *DL,
                           ValueToValueMapTy &UnderlyingMap)
-      : TypeMap(TypeMap),
-        InternalMapper(UnderlyingMap, RF_None, TypeMap, this) {}
+      : TypeMap(TypeMap), DL(DL),
+        InternalMapper(UnderlyingMap, RF_None, TypeMap, this,
+                       /*IdentityMD=*/nullptr, DL) {}
   ~FatPtrConstMaterializer() = default;
 
   Value *materialize(Value *V) override;
@@ -1228,12 +1231,14 @@ Constant *FatPtrConstMaterializer::materializeBufferFatPtrConst(Constant *C) {
   if (isa<PoisonValue>(C)) {
     return ConstantStruct::get(NewTy,
                                {PoisonValue::get(NewTy->getElementType(0)),
-                                PoisonValue::get(NewTy->getElementType(1))});
+                                PoisonValue::get(NewTy->getElementType(1))},
+                               DL);
   }
   if (isa<UndefValue>(C)) {
     return ConstantStruct::get(NewTy,
                                {UndefValue::get(NewTy->getElementType(0)),
-                                UndefValue::get(NewTy->getElementType(1))});
+                                UndefValue::get(NewTy->getElementType(1))},
+                               DL);
   }
 
   if (auto *VC = dyn_cast<ConstantVector>(C)) {
@@ -1243,8 +1248,10 @@ Constant *FatPtrConstMaterializer::materializeBufferFatPtrConst(Constant *C) {
         return nullptr;
       auto [Rsrc, Off] = splitLoweredFatBufferConst(NewS);
       auto EC = VC->getType()->getElementCount();
-      return ConstantStruct::get(NewTy, {ConstantVector::getSplat(EC, Rsrc),
-                                         ConstantVector::getSplat(EC, Off)});
+      return ConstantStruct::get(NewTy,
+                                 {ConstantVector::getSplat(EC, Rsrc, DL),
+                                  ConstantVector::getSplat(EC, Off, DL)},
+                                 DL);
     }
     SmallVector<Constant *> Rsrcs;
     SmallVector<Constant *> Offs;
@@ -1256,9 +1263,9 @@ Constant *FatPtrConstMaterializer::materializeBufferFatPtrConst(Constant *C) {
       Rsrcs.push_back(Rsrc);
       Offs.push_back(Off);
     }
-    Constant *RsrcVec = ConstantVector::get(Rsrcs);
-    Constant *OffVec = ConstantVector::get(Offs);
-    return ConstantStruct::get(NewTy, {RsrcVec, OffVec});
+    Constant *RsrcVec = ConstantVector::get(Rsrcs, DL);
+    Constant *OffVec = ConstantVector::get(Offs, DL);
+    return ConstantStruct::get(NewTy, {RsrcVec, OffVec}, DL);
   }
 
   if (isa<GlobalValue>(C))
@@ -2535,9 +2542,10 @@ bool AMDGPULowerBufferFatPointers::run(Module &M, const TargetMachine &TM) {
   SmallVector<Function *> Intrinsics;
   // Keep one big map so as to memoize constants across functions.
   ValueToValueMapTy CloneMap;
-  FatPtrConstMaterializer Materializer(&StructTM, CloneMap);
+  FatPtrConstMaterializer Materializer(&StructTM, &DL, CloneMap);
 
-  ValueMapper LowerInFuncs(CloneMap, RF_None, &StructTM, &Materializer);
+  ValueMapper LowerInFuncs(CloneMap, RF_None, &StructTM, &Materializer,
+                           /*IdentityMD=*/nullptr, &DL);
   for (auto [F, InterfaceChange] : NeedsRemap) {
     Function *NewF = F;
     if (InterfaceChange)
diff --git a/llvm/lib/Target/DirectX/DXILDataScalarization.cpp b/llvm/lib/Target/DirectX/DXILDataScalarization.cpp
index 1e069e24e0ade..847885659d6e8 100644
--- a/llvm/lib/Target/DirectX/DXILDataScalarization.cpp
+++ b/llvm/lib/Target/DirectX/DXILDataScalarization.cpp
@@ -352,7 +352,8 @@ bool DataScalarizerVisitor::visitGetElementPtrInst(GetElementPtrInst &GEPI) {
 }
 
 static Constant *transformInitializer(Constant *Init, Type *OrigType,
-                                      Type *NewType, LLVMContext &Ctx) {
+                                      Type *NewType, LLVMContext &Ctx,
+                                      const DataLayout *DL) {
   // Handle ConstantAggregateZero (zero-initialized constants)
   if (isa<ConstantAggregateZero>(Init)) {
     return ConstantAggregateZero::get(NewType);
@@ -375,7 +376,7 @@ static Constant *transformInitializer(Constant *Init, Type *OrigType,
 
     assert(ArrayElements.size() == E &&
            "Expected fixed length constant aggregate for vector initializer!");
-    return ConstantArray::get(cast<ArrayType>(NewType), ArrayElements);
+    return ConstantArray::get(cast<ArrayType>(NewType), ArrayElements, DL);
   }
 
   // Handle array of vectors transformation
@@ -388,11 +389,11 @@ static Constant *transformInitializer(Constant *Init, Type *OrigType,
       // Recursively transform array elements
       Constant *NewElemInit = transformInitializer(
           ArrayInit->getOperand(I), ArrayTy->getElementType(),
-          cast<ArrayType>(NewType)->getElementType(), Ctx);
+          cast<ArrayType>(NewType)->getElementType(), Ctx, DL);
       NewArrayElements.push_back(NewElemInit);
     }
 
-    return ConstantArray::get(cast<ArrayType>(NewType), NewArrayElements);
+    return ConstantArray::get(cast<ArrayType>(NewType), NewArrayElements, DL);
   }
 
   // If not a vector or array, return the original initializer
@@ -425,7 +426,8 @@ static bool findAndReplaceVectors(Module &M) {
 
       if (G.hasInitializer()) {
         Constant *Init = G.getInitializer();
-        Constant *NewInit = transformInitializer(Init, OrigType, NewType, Ctx);
+        Constant *NewInit = transformInitializer(Init, OrigType, NewType, Ctx,
+                                                 &M.getDataLayout());
         NewGlobal->setInitializer(NewInit);
       }
 
diff --git a/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp b/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp
index 7e1436e05a34a..bfc335a64a3fb 100644
--- a/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp
+++ b/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp
@@ -417,7 +417,7 @@ static void collectElements(Constant *Init,
 
 static Constant *transformInitializer(Constant *Init, Type *OrigType,
                                       ArrayType *FlattenedType,
-                                      LLVMContext &Ctx) {
+                                      LLVMContext &Ctx, const DataLayout *DL) {
   // Handle ConstantAggregateZero (zero-initialized constants)
   if (isa<ConstantAggregateZero>(Init))
     return ConstantAggregateZero::get(FlattenedType);
@@ -433,7 +433,7 @@ static Constant *transformInitializer(Constant *Init, Type *OrigType,
   collectElements(Init, FlattenedElements);
   assert(FlattenedType->getNumElements() == FlattenedElements.size() &&
          "The number of collected elements should match the FlattenedType");
-  return ConstantArray::get(FlattenedType, FlattenedElements);
+  return ConstantArray::get(FlattenedType, FlattenedElements, DL);
 }
 
 static void flattenGlobalArrays(
@@ -465,8 +465,8 @@ static void flattenGlobalArrays(
 
     if (G.hasInitializer()) {
       Constant *Init = G.getInitializer();
-      Constant *NewInit =
-          transformInitializer(Init, OrigType, FattenedArrayType, Ctx);
+      Constant *NewInit = transformInitializer(
+          Init, OrigType, FattenedArrayType, Ctx, &M.getDataLayout());
       NewGlobal->setInitializer(NewInit);
     }
     GlobalMap[&G] = NewGlobal;
diff --git a/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp b/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp
index 9e373021a826a..2bf7b35516d1e 100644
--- a/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp
+++ b/llvm/lib/Target/XCore/XCoreLowerThreadLocal.cpp
@@ -62,16 +62,16 @@ static ArrayType *createLoweredType(Type *OriginalType) {
   return ArrayType::get(OriginalType, MaxThreads);
 }
 
-static Constant *
-createLoweredInitializer(ArrayType *NewType, Constant *OriginalInitializer) {
+static Constant *createLoweredInitializer(ArrayType *NewType,
+                                          Constant *OriginalInitializer,
+                                          const DataLayout *DL) {
   SmallVector<Constant *, 8> Elements(MaxThreads);
   for (unsigned i = 0; i != MaxThreads; ++i) {
     Elements[i] = OriginalInitializer;
   }
-  return ConstantArray::get(NewType, Elements);
+  return ConstantArray::get(NewType, Elements, DL);
 }
 
-
 static bool replaceConstantExprOp(ConstantExpr *CE, Pass *P) {
   do {
     SmallVector<WeakTrackingVH, 8> WUsers(CE->users());
@@ -140,8 +140,8 @@ bool XCoreLowerThreadLocal::lowerGlobal(GlobalVariable *GV) {
   ArrayType *NewType = createLoweredType(GV->getValueType());
   Constant *NewInitializer = nullptr;
   if (GV->hasInitializer())
-    NewInitializer = createLoweredInitializer(NewType,
-                                              GV->getInitializer());
+    NewInitializer = createLoweredInitializer(NewType, GV->getInitializer(),
+                                              &M->getDataLayout());
   GlobalVariable *NewGV =
     new GlobalVariable(*M, NewType, GV->isConstant(), GV->getLinkage(),
                        NewInitializer, "", nullptr,
diff --git a/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp b/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
index 1082625d12a15..2bf32b41eee7e 100644
--- a/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
+++ b/llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp
@@ -1558,7 +1558,9 @@ bool InferAddressSpacesImpl::rewriteWithNewAddressSpaces(
 
   SmallVector<Instruction *, 16> DeadInstructions;
   ValueToValueMapTy VMap;
-  ValueMapper VMapper(VMap, RF_NoModuleLevelChanges | RF_IgnoreMissingLocals);
+  ValueMapper VMapper(VMap, RF_NoModuleLevelChanges | RF_IgnoreMissingLocals,
+                      /*TypeMapper=*/nullptr, /*Materializer=*/nullptr,
+                      /*IdentityMD=*/nullptr, DL);
 
   // Replaces the uses of the old address expressions with the new ones.
   for (const WeakTrackingVH &WVH : Postorder) {
diff --git a/llvm/lib/Transforms/Utils/ValueMapper.cpp b/llvm/lib/Transforms/Utils/ValueMapper.cpp
index 6e36006890df4..e6fbd64bc3334 100644
--- a/llvm/lib/Transforms/Utils/ValueMapper.cpp
+++ b/llvm/lib/Transforms/Utils/ValueMapper.cpp
@@ -121,13 +121,15 @@ class Mapper {
   SmallVector<DelayedBasicBlock, 1> DelayedBBs;
   SmallVector<Constant *, 16> AppendingInits;
   const MetadataPredicate *IdentityMD;
+  const DataLayout *DL;
 
 public:
   Mapper(ValueToValueMapTy &VM, RemapFlags Flags,
          ValueMapTypeRemapper *TypeMapper, ValueMaterializer *Materializer,
-         const MetadataPredicate *IdentityMD)
+         const MetadataPredicate *IdentityMD, const DataLayout *DL)
       : Flags(Flags), TypeMapper(TypeMapper),
-        MCs(1, MappingContext(VM, Materializer)), IdentityMD(IdentityMD) {}
+        MCs(1, MappingContext(VM, Materializer)), IdentityMD(IdentityMD),
+        DL(DL) {}
 
   /// ValueMapper should explicitly call \a flush() before destruction.
   ~Mapper() { assert(!hasWorkToDo() && "Expected to be flushed"); }
@@ -520,11 +522,11 @@ Value *Mapper::mapValue(const Value *V) {
   if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
     return getVM()[V] = CE->getWithOperands(Ops, NewTy, false, NewSrcTy);
   if (isa<ConstantArray>(C))
-    return getVM()[V] = ConstantArray::get(cast<ArrayType>(NewTy), Ops);
+    return getVM()[V] = ConstantArray::get(cast<ArrayType>(NewTy), Ops, DL);
   if (isa<ConstantStruct>(C))
-    return getVM()[V] = ConstantStruct::get(cast<StructType>(NewTy), Ops);
+    return getVM()[V] = ConstantStruct::get(cast<StructType>(NewTy), Ops, DL);
   if (isa<ConstantVector>(C))
-    return getVM()[V] = ConstantVector::get(Ops);
+    return getVM()[V] = ConstantVector::get(Ops, DL);
   if (isa<ConstantPtrAuth>(C))
     return getVM()[V] =
                ConstantPtrAuth::get(Ops[0], cast<ConstantInt>(Ops[1]),
@@ -1130,7 +1132,7 @@ void Mapper::mapAppendingVariable(GlobalVariable &GV, GlobalVariable *OldGV,
       auto *E1 = cast<Constant>(mapValue(S->getOperand(0)));
       auto *E2 = cast<Constant>(mapValue(S->getOperand(1)));
       Constant *Null = Constant::getNullValue(VoidPtrTy);
-      NewV = ConstantStruct::get(cast<StructType>(EltTy), E1, E2, Null);
+      NewV = ConstantStruct::get(cast<StructType>(EltTy), {E1, E2, Null}, DL);
     } else {
       NewV = cast_or_null<Constant>(mapValue(V));
     }
@@ -1138,7 +1140,7 @@ void Mapper::mapAppendingVariable(GlobalVariable &GV, GlobalVariable *OldGV,
   }
 
   GV.setInitializer(
-      ConstantArray::get(cast<ArrayType>(GV.getValueType()), Elements));
+      ConstantArray::get(cast<ArrayType>(GV.getValueType()), Elements, DL));
 }
 
 void Mapper::scheduleMapGlobalInitializer(GlobalVariable &GV, Constant &Init,
@@ -1228,8 +1230,9 @@ class FlushingMapper {
 ValueMapper::ValueMapper(ValueToValueMapTy &VM, RemapFlags Flags,
                          ValueMapTypeRemapper *TypeMapper,
                          ValueMaterializer *Materializer,
-                         const MetadataPredicate *IdentityMD)
-    : pImpl(new Mapper(VM, Flags, TypeMapper, Materializer, IdentityMD)) {}
+                         const MetadataPredicate *IdentityMD,
+                         const DataLayout *DL)
+    : pImpl(new Mapper(VM, Flags, TypeMapper, Materializer, IdentityMD, DL)) {}
 
 ValueMapper::~ValueMapper() { delete getAsMapper(pImpl); }
 



More information about the llvm-branch-commits mailing list