[llvm] r243114 - Remove access to the DataLayout in the TargetMachine

Mehdi Amini mehdi.amini at apple.com
Fri Jul 24 10:15:00 PDT 2015


Hi,

Is it this project: http://llvm.org/docs/GoldPlugin.html <http://llvm.org/docs/GoldPlugin.html> ?
I probably can’t contribute, but I can hint you about how to do it, the lines you are quoting should be replaced by:

  M.setDataLayout(TM.createDataLayout());

— 
Mehdi



> On Jul 24, 2015, at 10:05 AM, Reid Kleckner <rnk at google.com> wrote:
> 
> Can you fix gold plugin? It does this currently:
> 
>   if (const DataLayout *DL = TM.getDataLayout())
>     M.setDataLayout(*DL);
> 
> I'm not 100% sure what the fix is from your change.
> 
> On Fri, Jul 24, 2015 at 9:04 AM, Mehdi Amini <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>> wrote:
> Author: mehdi_amini
> Date: Fri Jul 24 11:04:22 2015
> New Revision: 243114
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=243114&view=rev <http://llvm.org/viewvc/llvm-project?rev=243114&view=rev>
> Log:
> Remove access to the DataLayout in the TargetMachine
> 
> Summary:
> Replace getDataLayout() with a createDataLayout() method to make
> explicit that it is intended to create a DataLayout only and not
> accessing it for other purpose.
> 
> This change is the last of a series of commits dedicated to have a
> single DataLayout during compilation by using always the one owned
> by the module.
> 
> Reviewers: echristo
> 
> Subscribers: jholewinski, llvm-commits, rafael, yaron.keren
> 
> Differential Revision: http://reviews.llvm.org/D11103 <http://reviews.llvm.org/D11103>
> 
> (cherry picked from commit 5609fc56bca971e5a7efeaa6ca4676638eaec5ea)
> 
> From: Mehdi Amini <mehdi.amini at apple.com <mailto:mehdi.amini at apple.com>>
> 
> Modified:
>     llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp
>     llvm/trunk/include/llvm/Target/TargetMachine.h
>     llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
>     llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp
>     llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
>     llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
>     llvm/trunk/lib/LTO/LTOModule.cpp
>     llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp
>     llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
>     llvm/trunk/lib/Target/TargetMachineC.cpp
>     llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>     llvm/trunk/tools/llc/llc.cpp
>     llvm/trunk/tools/lli/OrcLazyJIT.cpp
>     llvm/trunk/tools/lli/OrcLazyJIT.h
> 
> Modified: llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Orc/fully_lazy/toy.cpp Fri Jul 24 11:04:22 2015
> @@ -717,7 +717,7 @@ public:
>        M(new Module(GenerateUniqueName("jit_module_"),
>                     Session.getLLVMContext())),
>        Builder(Session.getLLVMContext()) {
> -    M->setDataLayout(*Session.getTarget().getDataLayout());
> +    M->setDataLayout(Session.getTarget().createDataLayout());
>    }
> 
>    SessionContext& getSession() { return Session; }
> @@ -1179,7 +1179,7 @@ public:
>      {
>        raw_string_ostream MangledNameStream(MangledName);
>        Mangler::getNameWithPrefix(MangledNameStream, Name,
> -                                 *Session.getTarget().getDataLayout());
> +                                 Session.getTarget().createDataLayout());
>      }
>      return MangledName;
>    }
> 
> Modified: llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Orc/initial/toy.cpp Fri Jul 24 11:04:22 2015
> @@ -716,7 +716,7 @@ public:
>        M(new Module(GenerateUniqueName("jit_module_"),
>                     Session.getLLVMContext())),
>        Builder(Session.getLLVMContext()) {
> -    M->setDataLayout(*Session.getTarget().getDataLayout());
> +    M->setDataLayout(Session.getTarget().createDataLayout());
>    }
> 
>    SessionContext& getSession() { return Session; }
> @@ -1160,7 +1160,7 @@ public:
>    typedef CompileLayerT::ModuleSetHandleT ModuleHandleT;
> 
>    KaleidoscopeJIT(SessionContext &Session)
> -      : DL(*Session.getTarget().getDataLayout()),
> +      : DL(Session.getTarget().createDataLayout()),
>          CompileLayer(ObjectLayer, SimpleCompiler(Session.getTarget())) {}
> 
>    std::string mangle(const std::string &Name) {
> @@ -1201,7 +1201,7 @@ public:
>    }
> 
>  private:
> -  const DataLayout &DL;
> +  const DataLayout DL;
>    ObjLayerT ObjectLayer;
>    CompileLayerT CompileLayer;
>  };
> 
> Modified: llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp Fri Jul 24 11:04:22 2015
> @@ -716,7 +716,7 @@ public:
>        M(new Module(GenerateUniqueName("jit_module_"),
>                     Session.getLLVMContext())),
>        Builder(Session.getLLVMContext()) {
> -    M->setDataLayout(*Session.getTarget().getDataLayout());
> +    M->setDataLayout(Session.getTarget().createDataLayout());
>    }
> 
>    SessionContext& getSession() { return Session; }
> @@ -1162,7 +1162,7 @@ public:
>    typedef LazyEmitLayerT::ModuleSetHandleT ModuleHandleT;
> 
>    KaleidoscopeJIT(SessionContext &Session)
> -      : DL(*Session.getTarget().getDataLayout()),
> +      : DL(Session.getTarget().createDataLayout()),
>          CompileLayer(ObjectLayer, SimpleCompiler(Session.getTarget())),
>          LazyEmitLayer(CompileLayer) {}
> 
> @@ -1204,7 +1204,7 @@ public:
>    }
> 
>  private:
> -  const DataLayout &DL;
> +  const DataLayout DL;
>    ObjLayerT ObjectLayer;
>    CompileLayerT CompileLayer;
>    LazyEmitLayerT LazyEmitLayer;
> 
> Modified: llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp Fri Jul 24 11:04:22 2015
> @@ -716,7 +716,7 @@ public:
>        M(new Module(GenerateUniqueName("jit_module_"),
>                     Session.getLLVMContext())),
>        Builder(Session.getLLVMContext()) {
> -    M->setDataLayout(*Session.getTarget().getDataLayout());
> +    M->setDataLayout(Session.getTarget().createDataLayout());
>    }
> 
>    SessionContext& getSession() { return Session; }
> @@ -1170,7 +1170,7 @@ public:
>      {
>        raw_string_ostream MangledNameStream(MangledName);
>        Mangler::getNameWithPrefix(MangledNameStream, Name,
> -                                 *Session.getTarget().getDataLayout());
> +                                 Session.getTarget().createDataLayout());
>      }
>      return MangledName;
>    }
> 
> Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetMachine.h Fri Jul 24 11:04:22 2015
> @@ -76,7 +76,12 @@ protected: // Can only create subclasses
>    /// The Target that this machine was created for.
>    const Target &TheTarget;
> 
> -  /// For ABI type size and alignment.
> +  /// DataLayout for the target: keep ABI type size and alignment.
> +  ///
> +  /// The DataLayout is created based on the string representation provided
> +  /// during construction. It is kept here only to avoid reparsing the string
> +  /// but should not really be used during compilation, because it has an
> +  /// internal cache that is context specific.
>    const DataLayout DL;
> 
>    /// Triple string, CPU name, and target feature strings the TargetMachine
> @@ -125,9 +130,13 @@ public:
>      return *static_cast<const STC*>(getSubtargetImpl(F));
>    }
> 
> -  /// This method returns a pointer to the DataLayout for the target. It should
> -  /// be unchanging for every subtarget.
> -  const DataLayout *getDataLayout() const { return &DL; }
> +  /// Create a DataLayout.
> +  const DataLayout createDataLayout() const { return DL; }
> +
> +  /// Get the pointer size for this target.
> +  ///
> +  /// This is the only time the DataLayout in the TargetMachine is used.
> +  unsigned getPointerSize() const { return DL.getPointerSize(); }
> 
>    /// \brief Reset the target options based on the function's attributes.
>    // FIXME: Remove TargetOptions that affect per-function code generation
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Fri Jul 24 11:04:22 2015
> @@ -139,9 +139,9 @@ const DataLayout &AsmPrinter::getDataLay
>    return MMI->getModule()->getDataLayout();
>  }
> 
> -unsigned AsmPrinter::getPointerSize() const {
> -  return TM.getDataLayout()->getPointerSize();
> -}
> +// Do not use the cached DataLayout because some client use it without a Module
> +// (llmv-dsymutil, llvm-dwarfdump).
> +unsigned AsmPrinter::getPointerSize() const { return TM.getPointerSize(); }
> 
>  const MCSubtargetInfo &AsmPrinter::getSubtargetInfo() const {
>    assert(MF && "getSubtargetInfo requires a valid MachineFunction!");
> 
> Modified: llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/MCJIT/MCJIT.cpp Fri Jul 24 11:04:22 2015
> @@ -68,7 +68,7 @@ MCJIT::createJIT(std::unique_ptr<Module>
>  MCJIT::MCJIT(std::unique_ptr<Module> M, std::unique_ptr<TargetMachine> TM,
>               std::shared_ptr<MCJITMemoryManager> MemMgr,
>               std::shared_ptr<RuntimeDyld::SymbolResolver> Resolver)
> -    : ExecutionEngine(*TM->getDataLayout(), std::move(M)), TM(std::move(TM)),
> +    : ExecutionEngine(TM->createDataLayout(), std::move(M)), TM(std::move(TM)),
>        Ctx(nullptr), MemMgr(std::move(MemMgr)),
>        Resolver(*this, std::move(Resolver)), Dyld(*this->MemMgr, this->Resolver),
>        ObjCache(nullptr) {
> 
> Modified: llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h (original)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/OrcMCJITReplacement.h Fri Jul 24 11:04:22 2015
> @@ -140,7 +140,7 @@ public:
>        std::shared_ptr<MCJITMemoryManager> MemMgr,
>        std::shared_ptr<RuntimeDyld::SymbolResolver> ClientResolver,
>        std::unique_ptr<TargetMachine> TM)
> -      : ExecutionEngine(*TM->getDataLayout()), TM(std::move(TM)),
> +      : ExecutionEngine(TM->createDataLayout()), TM(std::move(TM)),
>          MemMgr(*this, std::move(MemMgr)), Resolver(*this),
>          ClientResolver(std::move(ClientResolver)), NotifyObjectLoaded(*this),
>          NotifyFinalized(*this),
> 
> Modified: llvm/trunk/lib/LTO/LTOCodeGenerator.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOCodeGenerator.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/LTO/LTOCodeGenerator.cpp (original)
> +++ llvm/trunk/lib/LTO/LTOCodeGenerator.cpp Fri Jul 24 11:04:22 2015
> @@ -521,7 +521,7 @@ bool LTOCodeGenerator::optimize(bool Dis
>    legacy::PassManager passes;
> 
>    // Add an appropriate DataLayout instance for this module...
> -  mergedModule->setDataLayout(*TargetMach->getDataLayout());
> +  mergedModule->setDataLayout(TargetMach->createDataLayout());
> 
>    passes.add(
>        createTargetTransformInfoWrapperPass(TargetMach->getTargetIRAnalysis()));
> 
> Modified: llvm/trunk/lib/LTO/LTOModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/LTO/LTOModule.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/LTO/LTOModule.cpp (original)
> +++ llvm/trunk/lib/LTO/LTOModule.cpp Fri Jul 24 11:04:22 2015
> @@ -232,7 +232,7 @@ LTOModule *LTOModule::makeLTOModule(Memo
> 
>    TargetMachine *target = march->createTargetMachine(TripleStr, CPU, FeatureStr,
>                                                       options);
> -  M->setDataLayout(*target->getDataLayout());
> +  M->setDataLayout(target->createDataLayout());
> 
>    std::unique_ptr<object::IRObjectFile> IRObj(
>        new object::IRObjectFile(Buffer, std::move(M)));
> 
> Modified: llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp Fri Jul 24 11:04:22 2015
> @@ -1370,7 +1370,7 @@ static SPCC::CondCodes FPCondCCodeToFCC(
>  SparcTargetLowering::SparcTargetLowering(TargetMachine &TM,
>                                           const SparcSubtarget &STI)
>      : TargetLowering(TM), Subtarget(&STI) {
> -  auto &DL = *TM.getDataLayout();
> +  MVT PtrVT = MVT::getIntegerVT(8 * TM.getPointerSize());
> 
>    // Set up the register classes.
>    addRegisterClass(MVT::i32, &SP::IntRegsRegClass);
> @@ -1396,10 +1396,10 @@ SparcTargetLowering::SparcTargetLowering
>    setTruncStoreAction(MVT::f128, MVT::f64, Expand);
> 
>    // Custom legalize GlobalAddress nodes into LO/HI parts.
> -  setOperationAction(ISD::GlobalAddress, getPointerTy(DL), Custom);
> -  setOperationAction(ISD::GlobalTLSAddress, getPointerTy(DL), Custom);
> -  setOperationAction(ISD::ConstantPool, getPointerTy(DL), Custom);
> -  setOperationAction(ISD::BlockAddress, getPointerTy(DL), Custom);
> +  setOperationAction(ISD::GlobalAddress, PtrVT, Custom);
> +  setOperationAction(ISD::GlobalTLSAddress, PtrVT, Custom);
> +  setOperationAction(ISD::ConstantPool, PtrVT, Custom);
> +  setOperationAction(ISD::BlockAddress, PtrVT, Custom);
> 
>    // Sparc doesn't have sext_inreg, replace them with shl/sra
>    setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16, Expand);
> 
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp Fri Jul 24 11:04:22 2015
> @@ -84,8 +84,7 @@ static MachineOperand earlyUseOperand(Ma
>  SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &TM,
>                                               const SystemZSubtarget &STI)
>      : TargetLowering(TM), Subtarget(STI) {
> -  auto &DL = *TM.getDataLayout();
> -  MVT PtrVT = getPointerTy(DL);
> +  MVT PtrVT = MVT::getIntegerVT(8 * TM.getPointerSize());
> 
>    // Set up the register classes.
>    if (Subtarget.hasHighWord())
> 
> Modified: llvm/trunk/lib/Target/TargetMachineC.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachineC.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetMachineC.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetMachineC.cpp (original)
> +++ llvm/trunk/lib/Target/TargetMachineC.cpp Fri Jul 24 11:04:22 2015
> @@ -32,15 +32,25 @@
> 
>  using namespace llvm;
> 
> +
> +// The TargetMachine uses to offer access to a DataLayout member. This is reflected
> +// in the C API. For backward compatibility reason, this structure allows to keep
> +// a DataLayout member accessible to C client that have a handle to a
> +// LLVMTargetMachineRef.
> +struct LLVMOpaqueTargetMachine {
> +  std::unique_ptr<TargetMachine> Machine;
> +  DataLayout DL;
> +};
> +
> +
>  inline TargetMachine *unwrap(LLVMTargetMachineRef P) {
> -  return reinterpret_cast<TargetMachine*>(P);
> +  return P->Machine.get();
>  }
>  inline Target *unwrap(LLVMTargetRef P) {
>    return reinterpret_cast<Target*>(P);
>  }
>  inline LLVMTargetMachineRef wrap(const TargetMachine *P) {
> -  return
> -    reinterpret_cast<LLVMTargetMachineRef>(const_cast<TargetMachine*>(P));
> +  return new LLVMOpaqueTargetMachine{ std::unique_ptr<TargetMachine>(const_cast<TargetMachine*>(P)),  P->createDataLayout() };
>  }
>  inline LLVMTargetRef wrap(const Target * P) {
>    return reinterpret_cast<LLVMTargetRef>(const_cast<Target*>(P));
> @@ -147,7 +157,7 @@ LLVMTargetMachineRef LLVMCreateTargetMac
> 
> 
>  void LLVMDisposeTargetMachine(LLVMTargetMachineRef T) {
> -  delete unwrap(T);
> +  delete T;
>  }
> 
>  LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T) {
> @@ -170,8 +180,9 @@ char* LLVMGetTargetMachineFeatureString(
>    return strdup(StringRep.c_str());
>  }
> 
> +/// @deprecated: see "struct LLVMOpaqueTargetMachine" description above
>  LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T) {
> -  return wrap(unwrap(T)->getDataLayout());
> +  return wrap(&T->DL);
>  }
> 
>  void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,
> @@ -190,14 +201,7 @@ static LLVMBool LLVMTargetMachineEmit(LL
> 
>    std::string error;
> 
> -  const DataLayout *td = TM->getDataLayout();
> -
> -  if (!td) {
> -    error = "No DataLayout in TargetMachine";
> -    *ErrorMessage = strdup(error.c_str());
> -    return true;
> -  }
> -  Mod->setDataLayout(*td);
> +  Mod->setDataLayout(TM->createDataLayout());
> 
>    TargetMachine::CodeGenFileType ft;
>    switch (codegen) {
> 
> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Jul 24 11:04:22 2015
> @@ -76,7 +76,7 @@ X86TargetLowering::X86TargetLowering(con
>      : TargetLowering(TM), Subtarget(&STI) {
>    X86ScalarSSEf64 = Subtarget->hasSSE2();
>    X86ScalarSSEf32 = Subtarget->hasSSE1();
> -  TD = TM.getDataLayout();
> +  MVT PtrVT = MVT::getIntegerVT(8 * TM.getPointerSize());
> 
>    // Set up the TargetLowering object.
>    static const MVT IntVTs[] = { MVT::i8, MVT::i16, MVT::i32, MVT::i64 };
> @@ -505,7 +505,7 @@ X86TargetLowering::X86TargetLowering(con
>    setOperationAction(ISD::STACKSAVE,          MVT::Other, Expand);
>    setOperationAction(ISD::STACKRESTORE,       MVT::Other, Expand);
> 
> -  setOperationAction(ISD::DYNAMIC_STACKALLOC, getPointerTy(*TD), Custom);
> +  setOperationAction(ISD::DYNAMIC_STACKALLOC, PtrVT, Custom);
> 
>    // GC_TRANSITION_START and GC_TRANSITION_END need custom lowering.
>    setOperationAction(ISD::GC_TRANSITION_START, MVT::Other, Custom);
> @@ -16515,9 +16515,11 @@ SDValue X86TargetLowering::LowerINIT_TRA
> 
>          for (FunctionType::param_iterator I = FTy->param_begin(),
>               E = FTy->param_end(); I != E; ++I, ++Idx)
> -          if (Attrs.hasAttribute(Idx, Attribute::InReg))
> +          if (Attrs.hasAttribute(Idx, Attribute::InReg)) {
> +            auto &DL = DAG.getDataLayout();
>              // FIXME: should only count parameters that are lowered to integers.
> -            InRegCount += (TD->getTypeSizeInBits(*I) + 31) / 32;
> +            InRegCount += (DL.getTypeSizeInBits(*I) + 31) / 32;
> +          }
> 
>          if (InRegCount > 2) {
>            report_fatal_error("Nest register in use - reduce number of inreg"
> 
> Modified: llvm/trunk/tools/llc/llc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llc/llc.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/tools/llc/llc.cpp (original)
> +++ llvm/trunk/tools/llc/llc.cpp Fri Jul 24 11:04:22 2015
> @@ -312,8 +312,7 @@ static int compileModule(char **argv, LL
>    PM.add(new TargetLibraryInfoWrapperPass(TLII));
> 
>    // Add the target data from the target machine, if it exists, or the module.
> -  if (const DataLayout *DL = Target->getDataLayout())
> -    M->setDataLayout(*DL);
> +  M->setDataLayout(Target->createDataLayout());
> 
>    // Override function attributes based on CPUStr, FeaturesStr, and command line
>    // flags.
> 
> Modified: llvm/trunk/tools/lli/OrcLazyJIT.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.cpp?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.cpp?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/tools/lli/OrcLazyJIT.cpp (original)
> +++ llvm/trunk/tools/lli/OrcLazyJIT.cpp Fri Jul 24 11:04:22 2015
> @@ -136,7 +136,8 @@ int llvm::runOrcLazyJIT(std::unique_ptr<
>    }
> 
>    // Everything looks good. Build the JIT.
> -  OrcLazyJIT J(std::move(TM), Context, CallbackMgrBuilder);
> +  auto &DL = M->getDataLayout();
> +  OrcLazyJIT J(std::move(TM), DL, Context, CallbackMgrBuilder);
> 
>    // Add the module, look up main and run it.
>    auto MainHandle = J.addModule(std::move(M));
> 
> Modified: llvm/trunk/tools/lli/OrcLazyJIT.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.h?rev=243114&r1=243113&r2=243114&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/lli/OrcLazyJIT.h?rev=243114&r1=243113&r2=243114&view=diff>
> ==============================================================================
> --- llvm/trunk/tools/lli/OrcLazyJIT.h (original)
> +++ llvm/trunk/tools/lli/OrcLazyJIT.h Fri Jul 24 11:04:22 2015
> @@ -46,16 +46,17 @@ public:
>      CallbackManagerBuilder;
> 
>    static CallbackManagerBuilder createCallbackManagerBuilder(Triple T);
> +  const DataLayout &DL;
> 
> -  OrcLazyJIT(std::unique_ptr<TargetMachine> TM, LLVMContext &Context,
> -             CallbackManagerBuilder &BuildCallbackMgr)
> -    : TM(std::move(TM)),
> -      ObjectLayer(),
> -      CompileLayer(ObjectLayer, orc::SimpleCompiler(*this->TM)),
> -      IRDumpLayer(CompileLayer, createDebugDumper()),
> -      CCMgr(BuildCallbackMgr(IRDumpLayer, CCMgrMemMgr, Context)),
> -      CODLayer(IRDumpLayer, *CCMgr, false),
> -      CXXRuntimeOverrides([this](const std::string &S) { return mangle(S); }) {}
> +  OrcLazyJIT(std::unique_ptr<TargetMachine> TM, const DataLayout &DL,
> +             LLVMContext &Context, CallbackManagerBuilder &BuildCallbackMgr)
> +      : DL(DL), TM(std::move(TM)), ObjectLayer(),
> +        CompileLayer(ObjectLayer, orc::SimpleCompiler(*this->TM)),
> +        IRDumpLayer(CompileLayer, createDebugDumper()),
> +        CCMgr(BuildCallbackMgr(IRDumpLayer, CCMgrMemMgr, Context)),
> +        CODLayer(IRDumpLayer, *CCMgr, false),
> +        CXXRuntimeOverrides(
> +            [this](const std::string &S) { return mangle(S); }) {}
> 
>    ~OrcLazyJIT() {
>      // Run any destructors registered with __cxa_atexit.
> @@ -73,7 +74,7 @@ public:
>    ModuleHandleT addModule(std::unique_ptr<Module> M) {
>      // Attach a data-layout if one isn't already present.
>      if (M->getDataLayout().isDefault())
> -      M->setDataLayout(*TM->getDataLayout());
> +      M->setDataLayout(DL);
> 
>      // Record the static constructors and destructors. We have to do this before
>      // we hand over ownership of the module to the JIT.
> @@ -131,12 +132,11 @@ public:
>    }
> 
>  private:
> -
>    std::string mangle(const std::string &Name) {
>      std::string MangledName;
>      {
>        raw_string_ostream MangledNameStream(MangledName);
> -      Mangler::getNameWithPrefix(MangledNameStream, Name, *TM->getDataLayout());
> +      Mangler::getNameWithPrefix(MangledNameStream, Name, DL);
>      }
>      return MangledName;
>    }
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits <http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150724/353326ca/attachment.html>


More information about the llvm-commits mailing list