Restore old behavior. Always auto-detect features unless cpu or features are specified.

llvm-svn: 134757
This commit is contained in:
Evan Cheng 2011-07-08 22:30:25 +00:00
parent 9719ca7c76
commit 03af99dd82
3 changed files with 7 additions and 20 deletions

View File

@ -225,7 +225,7 @@ void X86Subtarget::AutoDetectSubtargetFeatures() {
X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
const std::string &FS,
unsigned StackAlignOverride)
unsigned StackAlignOverride, bool is64Bit)
: X86GenSubtargetInfo(TT, CPU, FS)
, PICStyle(PICStyles::None)
, X86SSELevel(NoMMXSSE)
@ -246,20 +246,9 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
// FIXME: this is a known good value for Yonah. How about others?
, MaxInlineSizeThreshold(128)
, TargetTriple(TT)
, In64BitMode(false) {
// Insert the architecture feature derived from the target triple into the
// feature string. This is important for setting features that are implied
// based on the architecture version.
std::string ArchFS = X86_MC::ParseX86Triple(TT);
if (!FS.empty()) {
if (!ArchFS.empty())
ArchFS = ArchFS + "," + FS;
else
ArchFS = FS;
}
, In64BitMode(is64Bit) {
// Determine default and user specified characteristics
if (!ArchFS.empty()) {
if (!FS.empty() || !CPU.empty()) {
std::string CPUName = CPU;
if (CPUName.empty()) {
#if defined (__x86_64__) || defined(__i386__)
@ -270,7 +259,8 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
}
// If feature string is not empty, parse features string.
ParseSubtargetFeatures(CPUName, ArchFS);
ParseSubtargetFeatures(CPUName, FS);
// All X86-64 CPUs also have SSE2, however user might request no SSE via
// -mattr, so don't force SSELevel here.
if (HasAVX)
@ -279,9 +269,6 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
// Otherwise, use CPUID to auto-detect feature set.
AutoDetectSubtargetFeatures();
// If CPU is 64-bit capable, default to 64-bit mode if not specified.
In64BitMode = HasX86_64;
// Make sure SSE2 is enabled; it is available on all X86-64 CPUs.
if (In64BitMode && !HasAVX && X86SSELevel < SSE2)
X86SSELevel = SSE2;

View File

@ -122,7 +122,7 @@ public:
///
X86Subtarget(const std::string &TT, const std::string &CPU,
const std::string &FS,
unsigned StackAlignOverride);
unsigned StackAlignOverride, bool is64Bit);
/// getStackAlignment - Returns the minimum alignment known to hold of the
/// stack frame on entry to the function and which must be maintained by every

View File

@ -120,7 +120,7 @@ X86TargetMachine::X86TargetMachine(const Target &T, const std::string &TT,
const std::string &CPU,
const std::string &FS, bool is64Bit)
: LLVMTargetMachine(T, TT, CPU, FS),
Subtarget(TT, CPU, FS, StackAlignmentOverride),
Subtarget(TT, CPU, FS, StackAlignmentOverride, is64Bit),
FrameLowering(*this, Subtarget),
ELFWriterInfo(is64Bit, true) {
DefRelocModel = getRelocationModel();