mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Move the TLSModel information into the TargetMachine rather than hiding
in TargetLowering. There was already a FIXME about this location being odd. The interface is simplified as a consequence. This will also make it easier to change TLS models when compiling with PIE. llvm-svn: 154292
This commit is contained in:
parent
2f6ec0fcc0
commit
233e7232ae
@ -27,6 +27,16 @@ namespace llvm {
|
||||
enum Model { Default, JITDefault, Small, Kernel, Medium, Large };
|
||||
}
|
||||
|
||||
// TLS models.
|
||||
namespace TLSModel {
|
||||
enum Model {
|
||||
GeneralDynamic,
|
||||
LocalDynamic,
|
||||
InitialExec,
|
||||
LocalExec
|
||||
};
|
||||
}
|
||||
|
||||
// Code generation optimization level.
|
||||
namespace CodeGenOpt {
|
||||
enum Level {
|
||||
|
@ -64,17 +64,6 @@ namespace llvm {
|
||||
};
|
||||
}
|
||||
|
||||
// FIXME: should this be here?
|
||||
namespace TLSModel {
|
||||
enum Model {
|
||||
GeneralDynamic,
|
||||
LocalDynamic,
|
||||
InitialExec,
|
||||
LocalExec
|
||||
};
|
||||
}
|
||||
TLSModel::Model getTLSModel(const GlobalValue *GV, Reloc::Model reloc);
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// TargetLowering - This class defines information used to lower LLVM code to
|
||||
|
@ -24,6 +24,7 @@ namespace llvm {
|
||||
|
||||
class InstrItineraryData;
|
||||
class JITCodeEmitter;
|
||||
class GlobalValue;
|
||||
class MCAsmInfo;
|
||||
class MCCodeGenInfo;
|
||||
class MCContext;
|
||||
@ -195,6 +196,10 @@ public:
|
||||
/// medium, large, and target default.
|
||||
CodeModel::Model getCodeModel() const;
|
||||
|
||||
/// getTLSModel - Returns the TLS model which should be used for the given
|
||||
/// global variable.
|
||||
TLSModel::Model getTLSModel(const GlobalValue *GV) const;
|
||||
|
||||
/// getOptLevel - Returns the optimization level: None, Less,
|
||||
/// Default, or Aggressive.
|
||||
CodeGenOpt::Level getOptLevel() const;
|
||||
|
@ -39,28 +39,6 @@ static cl::opt<bool>
|
||||
AllowPromoteIntElem("promote-elements", cl::Hidden, cl::init(true),
|
||||
cl::desc("Allow promotion of integer vector element types"));
|
||||
|
||||
namespace llvm {
|
||||
TLSModel::Model getTLSModel(const GlobalValue *GV, Reloc::Model reloc) {
|
||||
bool isLocal = GV->hasLocalLinkage();
|
||||
bool isDeclaration = GV->isDeclaration();
|
||||
// FIXME: what should we do for protected and internal visibility?
|
||||
// For variables, is internal different from hidden?
|
||||
bool isHidden = GV->hasHiddenVisibility();
|
||||
|
||||
if (reloc == Reloc::PIC_) {
|
||||
if (isLocal || isHidden)
|
||||
return TLSModel::LocalDynamic;
|
||||
else
|
||||
return TLSModel::GeneralDynamic;
|
||||
} else {
|
||||
if (!isDeclaration || isHidden)
|
||||
return TLSModel::LocalExec;
|
||||
else
|
||||
return TLSModel::InitialExec;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// InitLibcallNames - Set default libcall names.
|
||||
///
|
||||
static void InitLibcallNames(const char **Names) {
|
||||
|
@ -11,6 +11,7 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/GlobalValue.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCCodeGenInfo.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
@ -74,6 +75,26 @@ CodeModel::Model TargetMachine::getCodeModel() const {
|
||||
return CodeGenInfo->getCodeModel();
|
||||
}
|
||||
|
||||
TLSModel::Model TargetMachine::getTLSModel(const GlobalValue *GV) const {
|
||||
bool isLocal = GV->hasLocalLinkage();
|
||||
bool isDeclaration = GV->isDeclaration();
|
||||
// FIXME: what should we do for protected and internal visibility?
|
||||
// For variables, is internal different from hidden?
|
||||
bool isHidden = GV->hasHiddenVisibility();
|
||||
|
||||
if (getRelocationModel() == Reloc::PIC_) {
|
||||
if (isLocal || isHidden)
|
||||
return TLSModel::LocalDynamic;
|
||||
else
|
||||
return TLSModel::GeneralDynamic;
|
||||
} else {
|
||||
if (!isDeclaration || isHidden)
|
||||
return TLSModel::LocalExec;
|
||||
else
|
||||
return TLSModel::InitialExec;
|
||||
}
|
||||
}
|
||||
|
||||
/// getOptLevel - Returns the optimization level: None, Less,
|
||||
/// Default, or Aggressive.
|
||||
CodeGenOpt::Level TargetMachine::getOptLevel() const {
|
||||
|
@ -7205,8 +7205,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
if (const GlobalAlias *GA = dyn_cast<GlobalAlias>(GV))
|
||||
GV = GA->resolveAliasedGlobal(false);
|
||||
|
||||
TLSModel::Model model
|
||||
= getTLSModel(GV, getTargetMachine().getRelocationModel());
|
||||
TLSModel::Model model = getTargetMachine().getTLSModel(GV);
|
||||
|
||||
switch (model) {
|
||||
case TLSModel::GeneralDynamic:
|
||||
|
Loading…
x
Reference in New Issue
Block a user