X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FTarget%2FTargetMachine.h;h=b7760a61806f47278ef3c9fa5941153b95395e1f;hb=2b762697564ca1e12e0e974e93ceeb4c3420505c;hp=06a2b13836ed6548561733fab16b490dcb8cd33c;hpb=edfa571cbd115bf534d8aa92c8d9da1253f6ac76;p=oota-llvm.git diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index 06a2b13836e..b7760a61806 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -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 @@ -97,6 +102,12 @@ protected: // Can only create subclasses. const MCSubtargetInfo *STI; unsigned RequireStructuredCFG : 1; + unsigned O0WantsFastISel : 1; + + /// This API is here to support the C API, deprecated in 3.7 release. + /// This should never be used outside of legacy existing client. + const DataLayout &getDataLayout() const { return DL; } + friend struct C_API_PRIVATE_ACCESS; public: mutable TargetOptions Options; @@ -125,9 +136,22 @@ public: return *static_cast(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; } + + /// Test if a DataLayout if compatible with the CodeGen for this target. + /// + /// The LLVM Module owns a DataLayout that is used for the target independent + /// optimizations and code generation. This hook provides a target specific + /// check on the validity of this DataLayout. + bool isCompatibleDataLayout(const DataLayout &Candidate) const { + return DL == Candidate; + } + + /// 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 @@ -167,6 +191,8 @@ public: void setOptLevel(CodeGenOpt::Level Level) const; void setFastISel(bool Enable) { Options.EnableFastISel = Enable; } + bool getO0WantsFastISel() { return O0WantsFastISel; } + void setO0WantsFastISel(bool Enable) { O0WantsFastISel = Enable; } bool shouldPrintMachineCode() const { return Options.PrintMachineCode; }