forked from OSchip/llvm-project
Revert "Remove access to the DataLayout in the TargetMachine"
This reverts commit 0f720d984f419c747709462f7476dff962c0bc41. It breaks clang too badly, I need to prepare a proper patch for clang first. From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 243089
This commit is contained in:
parent
5311a0b363
commit
5d8e569926
|
@ -717,7 +717,7 @@ public:
|
|||
M(new Module(GenerateUniqueName("jit_module_"),
|
||||
Session.getLLVMContext())),
|
||||
Builder(Session.getLLVMContext()) {
|
||||
M->setDataLayout(Session.getTarget().createDataLayout());
|
||||
M->setDataLayout(*Session.getTarget().getDataLayout());
|
||||
}
|
||||
|
||||
SessionContext& getSession() { return Session; }
|
||||
|
@ -1179,7 +1179,7 @@ public:
|
|||
{
|
||||
raw_string_ostream MangledNameStream(MangledName);
|
||||
Mangler::getNameWithPrefix(MangledNameStream, Name,
|
||||
Session.getTarget().createDataLayout());
|
||||
*Session.getTarget().getDataLayout());
|
||||
}
|
||||
return MangledName;
|
||||
}
|
||||
|
|
|
@ -716,7 +716,7 @@ public:
|
|||
M(new Module(GenerateUniqueName("jit_module_"),
|
||||
Session.getLLVMContext())),
|
||||
Builder(Session.getLLVMContext()) {
|
||||
M->setDataLayout(Session.getTarget().createDataLayout());
|
||||
M->setDataLayout(*Session.getTarget().getDataLayout());
|
||||
}
|
||||
|
||||
SessionContext& getSession() { return Session; }
|
||||
|
@ -1160,7 +1160,7 @@ public:
|
|||
typedef CompileLayerT::ModuleSetHandleT ModuleHandleT;
|
||||
|
||||
KaleidoscopeJIT(SessionContext &Session)
|
||||
: DL(Session.getTarget().createDataLayout()),
|
||||
: DL(*Session.getTarget().getDataLayout()),
|
||||
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;
|
||||
};
|
||||
|
|
|
@ -716,7 +716,7 @@ public:
|
|||
M(new Module(GenerateUniqueName("jit_module_"),
|
||||
Session.getLLVMContext())),
|
||||
Builder(Session.getLLVMContext()) {
|
||||
M->setDataLayout(Session.getTarget().createDataLayout());
|
||||
M->setDataLayout(*Session.getTarget().getDataLayout());
|
||||
}
|
||||
|
||||
SessionContext& getSession() { return Session; }
|
||||
|
@ -1162,7 +1162,7 @@ public:
|
|||
typedef LazyEmitLayerT::ModuleSetHandleT ModuleHandleT;
|
||||
|
||||
KaleidoscopeJIT(SessionContext &Session)
|
||||
: DL(Session.getTarget().createDataLayout()),
|
||||
: DL(*Session.getTarget().getDataLayout()),
|
||||
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;
|
||||
|
|
|
@ -716,7 +716,7 @@ public:
|
|||
M(new Module(GenerateUniqueName("jit_module_"),
|
||||
Session.getLLVMContext())),
|
||||
Builder(Session.getLLVMContext()) {
|
||||
M->setDataLayout(Session.getTarget().createDataLayout());
|
||||
M->setDataLayout(*Session.getTarget().getDataLayout());
|
||||
}
|
||||
|
||||
SessionContext& getSession() { return Session; }
|
||||
|
@ -1170,7 +1170,7 @@ public:
|
|||
{
|
||||
raw_string_ostream MangledNameStream(MangledName);
|
||||
Mangler::getNameWithPrefix(MangledNameStream, Name,
|
||||
Session.getTarget().createDataLayout());
|
||||
*Session.getTarget().getDataLayout());
|
||||
}
|
||||
return MangledName;
|
||||
}
|
||||
|
|
|
@ -76,12 +76,7 @@ protected: // Can only create subclasses.
|
|||
/// The Target that this machine was created for.
|
||||
const Target &TheTarget;
|
||||
|
||||
/// 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.
|
||||
/// For ABI type size and alignment.
|
||||
const DataLayout DL;
|
||||
|
||||
/// Triple string, CPU name, and target feature strings the TargetMachine
|
||||
|
@ -130,13 +125,9 @@ public:
|
|||
return *static_cast<const STC*>(getSubtargetImpl(F));
|
||||
}
|
||||
|
||||
/// 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(); }
|
||||
/// This method returns a pointer to the DataLayout for the target. It should
|
||||
/// be unchanging for every subtarget.
|
||||
const DataLayout *getDataLayout() const { return &DL; }
|
||||
|
||||
/// \brief Reset the target options based on the function's attributes.
|
||||
// FIXME: Remove TargetOptions that affect per-function code generation
|
||||
|
|
|
@ -139,9 +139,9 @@ const DataLayout &AsmPrinter::getDataLayout() const {
|
|||
return MMI->getModule()->getDataLayout();
|
||||
}
|
||||
|
||||
// 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(); }
|
||||
unsigned AsmPrinter::getPointerSize() const {
|
||||
return TM.getDataLayout()->getPointerSize();
|
||||
}
|
||||
|
||||
const MCSubtargetInfo &AsmPrinter::getSubtargetInfo() const {
|
||||
assert(MF && "getSubtargetInfo requires a valid MachineFunction!");
|
||||
|
|
|
@ -68,7 +68,7 @@ MCJIT::createJIT(std::unique_ptr<Module> M,
|
|||
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->createDataLayout(), std::move(M)), TM(std::move(TM)),
|
||||
: ExecutionEngine(*TM->getDataLayout(), 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) {
|
||||
|
|
|
@ -140,7 +140,7 @@ public:
|
|||
std::shared_ptr<MCJITMemoryManager> MemMgr,
|
||||
std::shared_ptr<RuntimeDyld::SymbolResolver> ClientResolver,
|
||||
std::unique_ptr<TargetMachine> TM)
|
||||
: ExecutionEngine(TM->createDataLayout()), TM(std::move(TM)),
|
||||
: ExecutionEngine(*TM->getDataLayout()), TM(std::move(TM)),
|
||||
MemMgr(*this, std::move(MemMgr)), Resolver(*this),
|
||||
ClientResolver(std::move(ClientResolver)), NotifyObjectLoaded(*this),
|
||||
NotifyFinalized(*this),
|
||||
|
|
|
@ -521,7 +521,7 @@ bool LTOCodeGenerator::optimize(bool DisableInline,
|
|||
legacy::PassManager passes;
|
||||
|
||||
// Add an appropriate DataLayout instance for this module...
|
||||
mergedModule->setDataLayout(TargetMach->createDataLayout());
|
||||
mergedModule->setDataLayout(*TargetMach->getDataLayout());
|
||||
|
||||
passes.add(
|
||||
createTargetTransformInfoWrapperPass(TargetMach->getTargetIRAnalysis()));
|
||||
|
|
|
@ -232,7 +232,7 @@ LTOModule *LTOModule::makeLTOModule(MemoryBufferRef Buffer,
|
|||
|
||||
TargetMachine *target = march->createTargetMachine(TripleStr, CPU, FeatureStr,
|
||||
options);
|
||||
M->setDataLayout(target->createDataLayout());
|
||||
M->setDataLayout(*target->getDataLayout());
|
||||
|
||||
std::unique_ptr<object::IRObjectFile> IRObj(
|
||||
new object::IRObjectFile(Buffer, std::move(M)));
|
||||
|
|
|
@ -1370,7 +1370,7 @@ static SPCC::CondCodes FPCondCCodeToFCC(ISD::CondCode CC) {
|
|||
SparcTargetLowering::SparcTargetLowering(TargetMachine &TM,
|
||||
const SparcSubtarget &STI)
|
||||
: TargetLowering(TM), Subtarget(&STI) {
|
||||
MVT PtrVT = MVT::getIntegerVT(8 * TM.getPointerSize());
|
||||
auto &DL = *TM.getDataLayout();
|
||||
|
||||
// Set up the register classes.
|
||||
addRegisterClass(MVT::i32, &SP::IntRegsRegClass);
|
||||
|
@ -1396,10 +1396,10 @@ SparcTargetLowering::SparcTargetLowering(TargetMachine &TM,
|
|||
setTruncStoreAction(MVT::f128, MVT::f64, Expand);
|
||||
|
||||
// Custom legalize GlobalAddress nodes into LO/HI parts.
|
||||
setOperationAction(ISD::GlobalAddress, PtrVT, Custom);
|
||||
setOperationAction(ISD::GlobalTLSAddress, PtrVT, Custom);
|
||||
setOperationAction(ISD::ConstantPool, PtrVT, Custom);
|
||||
setOperationAction(ISD::BlockAddress, PtrVT, Custom);
|
||||
setOperationAction(ISD::GlobalAddress, getPointerTy(DL), Custom);
|
||||
setOperationAction(ISD::GlobalTLSAddress, getPointerTy(DL), Custom);
|
||||
setOperationAction(ISD::ConstantPool, getPointerTy(DL), Custom);
|
||||
setOperationAction(ISD::BlockAddress, getPointerTy(DL), Custom);
|
||||
|
||||
// Sparc doesn't have sext_inreg, replace them with shl/sra
|
||||
setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16, Expand);
|
||||
|
|
|
@ -84,7 +84,8 @@ static MachineOperand earlyUseOperand(MachineOperand Op) {
|
|||
SystemZTargetLowering::SystemZTargetLowering(const TargetMachine &TM,
|
||||
const SystemZSubtarget &STI)
|
||||
: TargetLowering(TM), Subtarget(STI) {
|
||||
MVT PtrVT = MVT::getIntegerVT(8 * TM.getPointerSize());
|
||||
auto &DL = *TM.getDataLayout();
|
||||
MVT PtrVT = getPointerTy(DL);
|
||||
|
||||
// Set up the register classes.
|
||||
if (Subtarget.hasHighWord())
|
||||
|
|
|
@ -32,25 +32,15 @@
|
|||
|
||||
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 P->Machine.get();
|
||||
return reinterpret_cast<TargetMachine*>(P);
|
||||
}
|
||||
inline Target *unwrap(LLVMTargetRef P) {
|
||||
return reinterpret_cast<Target*>(P);
|
||||
}
|
||||
inline LLVMTargetMachineRef wrap(const TargetMachine *P) {
|
||||
return new LLVMOpaqueTargetMachine{ std::unique_ptr<TargetMachine>(const_cast<TargetMachine*>(P)), P->createDataLayout() };
|
||||
return
|
||||
reinterpret_cast<LLVMTargetMachineRef>(const_cast<TargetMachine*>(P));
|
||||
}
|
||||
inline LLVMTargetRef wrap(const Target * P) {
|
||||
return reinterpret_cast<LLVMTargetRef>(const_cast<Target*>(P));
|
||||
|
@ -157,7 +147,7 @@ LLVMTargetMachineRef LLVMCreateTargetMachine(LLVMTargetRef T,
|
|||
|
||||
|
||||
void LLVMDisposeTargetMachine(LLVMTargetMachineRef T) {
|
||||
delete T;
|
||||
delete unwrap(T);
|
||||
}
|
||||
|
||||
LLVMTargetRef LLVMGetTargetMachineTarget(LLVMTargetMachineRef T) {
|
||||
|
@ -180,9 +170,8 @@ char* LLVMGetTargetMachineFeatureString(LLVMTargetMachineRef T) {
|
|||
return strdup(StringRep.c_str());
|
||||
}
|
||||
|
||||
/// @deprecated: see "struct LLVMOpaqueTargetMachine" description above
|
||||
LLVMTargetDataRef LLVMGetTargetMachineData(LLVMTargetMachineRef T) {
|
||||
return wrap(&T->DL);
|
||||
return wrap(unwrap(T)->getDataLayout());
|
||||
}
|
||||
|
||||
void LLVMSetTargetMachineAsmVerbosity(LLVMTargetMachineRef T,
|
||||
|
@ -201,7 +190,14 @@ static LLVMBool LLVMTargetMachineEmit(LLVMTargetMachineRef T, LLVMModuleRef M,
|
|||
|
||||
std::string error;
|
||||
|
||||
Mod->setDataLayout(TM->createDataLayout());
|
||||
const DataLayout *td = TM->getDataLayout();
|
||||
|
||||
if (!td) {
|
||||
error = "No DataLayout in TargetMachine";
|
||||
*ErrorMessage = strdup(error.c_str());
|
||||
return true;
|
||||
}
|
||||
Mod->setDataLayout(*td);
|
||||
|
||||
TargetMachine::CodeGenFileType ft;
|
||||
switch (codegen) {
|
||||
|
|
|
@ -76,7 +76,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
: TargetLowering(TM), Subtarget(&STI) {
|
||||
X86ScalarSSEf64 = Subtarget->hasSSE2();
|
||||
X86ScalarSSEf32 = Subtarget->hasSSE1();
|
||||
MVT PtrVT = MVT::getIntegerVT(8 * TM.getPointerSize());
|
||||
TD = TM.getDataLayout();
|
||||
|
||||
// Set up the TargetLowering object.
|
||||
static const MVT IntVTs[] = { MVT::i8, MVT::i16, MVT::i32, MVT::i64 };
|
||||
|
@ -505,7 +505,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
setOperationAction(ISD::STACKSAVE, MVT::Other, Expand);
|
||||
setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand);
|
||||
|
||||
setOperationAction(ISD::DYNAMIC_STACKALLOC, PtrVT, Custom);
|
||||
setOperationAction(ISD::DYNAMIC_STACKALLOC, getPointerTy(*TD), Custom);
|
||||
|
||||
// GC_TRANSITION_START and GC_TRANSITION_END need custom lowering.
|
||||
setOperationAction(ISD::GC_TRANSITION_START, MVT::Other, Custom);
|
||||
|
@ -16515,11 +16515,9 @@ SDValue X86TargetLowering::LowerINIT_TRAMPOLINE(SDValue Op,
|
|||
|
||||
for (FunctionType::param_iterator I = FTy->param_begin(),
|
||||
E = FTy->param_end(); I != E; ++I, ++Idx)
|
||||
if (Attrs.hasAttribute(Idx, Attribute::InReg)) {
|
||||
auto &DL = DAG.getDataLayout();
|
||||
if (Attrs.hasAttribute(Idx, Attribute::InReg))
|
||||
// FIXME: should only count parameters that are lowered to integers.
|
||||
InRegCount += (DL.getTypeSizeInBits(*I) + 31) / 32;
|
||||
}
|
||||
InRegCount += (TD->getTypeSizeInBits(*I) + 31) / 32;
|
||||
|
||||
if (InRegCount > 2) {
|
||||
report_fatal_error("Nest register in use - reduce number of inreg"
|
||||
|
|
|
@ -312,7 +312,8 @@ static int compileModule(char **argv, LLVMContext &Context) {
|
|||
PM.add(new TargetLibraryInfoWrapperPass(TLII));
|
||||
|
||||
// Add the target data from the target machine, if it exists, or the module.
|
||||
M->setDataLayout(Target->createDataLayout());
|
||||
if (const DataLayout *DL = Target->getDataLayout())
|
||||
M->setDataLayout(*DL);
|
||||
|
||||
// Override function attributes based on CPUStr, FeaturesStr, and command line
|
||||
// flags.
|
||||
|
|
|
@ -136,8 +136,7 @@ int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) {
|
|||
}
|
||||
|
||||
// Everything looks good. Build the JIT.
|
||||
auto &DL = M->getDataLayout();
|
||||
OrcLazyJIT J(std::move(TM), DL, Context, CallbackMgrBuilder);
|
||||
OrcLazyJIT J(std::move(TM), Context, CallbackMgrBuilder);
|
||||
|
||||
// Add the module, look up main and run it.
|
||||
auto MainHandle = J.addModule(std::move(M));
|
||||
|
|
|
@ -46,17 +46,16 @@ public:
|
|||
CallbackManagerBuilder;
|
||||
|
||||
static CallbackManagerBuilder createCallbackManagerBuilder(Triple T);
|
||||
const DataLayout &DL;
|
||||
|
||||
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(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() {
|
||||
// Run any destructors registered with __cxa_atexit.
|
||||
|
@ -74,7 +73,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(DL);
|
||||
M->setDataLayout(*TM->getDataLayout());
|
||||
|
||||
// Record the static constructors and destructors. We have to do this before
|
||||
// we hand over ownership of the module to the JIT.
|
||||
|
@ -132,11 +131,12 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
|
||||
std::string mangle(const std::string &Name) {
|
||||
std::string MangledName;
|
||||
{
|
||||
raw_string_ostream MangledNameStream(MangledName);
|
||||
Mangler::getNameWithPrefix(MangledNameStream, Name, DL);
|
||||
Mangler::getNameWithPrefix(MangledNameStream, Name, *TM->getDataLayout());
|
||||
}
|
||||
return MangledName;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue