Propagate CPU string out of SubtargetFeatures

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72335 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Anton Korobeynikov 2009-05-23 19:50:50 +00:00
parent a14be3b264
commit 41a024385f
14 changed files with 50 additions and 24 deletions

View File

@ -82,10 +82,13 @@ public:
/// Set the CPU string. Replaces previous setting. Setting to "" clears CPU.
void setCPU(const std::string &String);
/// Setting CPU string only if no string is set.
void setCPUIfNone(const std::string &String);
/// Returns current CPU string.
const std::string & getCPU() const;
/// Adding Features.
void AddFeature(const std::string &String, bool IsEnabled = true);

View File

@ -23,14 +23,13 @@ ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS, bool thumb)
, UseThumbBacktraces(false)
, IsR9Reserved(false)
, stackAlignment(4)
, CPUString("generic")
, TargetType(isELF) // Default to ELF unless otherwise specified.
, TargetABI(ARM_ABI_APCS) {
// Determine default and user specified characteristics
std::string CPU = "generic";
// Parse features string.
ParseSubtargetFeatures(FS, CPU);
CPUString = ParseSubtargetFeatures(FS, CPUString);
// Set the boolean corresponding to the current target triple, or the default
// if one cannot be determined, to true.

View File

@ -47,6 +47,9 @@ protected:
/// entry to the function and which must be maintained by every function.
unsigned stackAlignment;
/// CPUString - String name of used CPU.
std::string CPUString;
public:
enum {
isELF, isDarwin
@ -71,7 +74,8 @@ protected:
}
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
bool hasV4TOps() const { return ARMArchVersion >= V4T; }
bool hasV5TOps() const { return ARMArchVersion >= V5T; }
@ -79,7 +83,7 @@ protected:
bool hasV6Ops() const { return ARMArchVersion >= V6; }
bool hasVFP2() const { return HasVFP2; }
bool isTargetDarwin() const { return TargetType == isDarwin; }
bool isTargetELF() const { return TargetType == isELF; }
@ -91,6 +95,8 @@ protected:
bool useThumbBacktraces() const { return UseThumbBacktraces; }
bool isR9Reserved() const { return IsR9Reserved; }
const std::string & getCPUString() const { return CPUString; }
/// getStackAlignment - Returns the minimum alignment known to hold of the
/// stack frame on entry to the function and which must be maintained by every
/// function for this subtarget.

View File

@ -37,7 +37,8 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
bool hasCT() const { return HasCT; }
};

View File

@ -59,8 +59,9 @@ namespace llvm {
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
/// SetJITMode - This is called to inform the subtarget info that we are
/// producing code for the JIT.
void SetJITMode();

View File

@ -33,7 +33,8 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
};
} // End llvm namespace

View File

@ -109,7 +109,8 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
bool hasMips2Ops() const { return MipsArchVersion >= Mips2; }

View File

@ -37,7 +37,8 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
};
} // End llvm namespace

View File

@ -86,7 +86,9 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
/// SetJITMode - This is called to inform the subtarget info that we are
/// producing code for the JIT.

View File

@ -33,8 +33,9 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
};
} // end namespace llvm

View File

@ -186,7 +186,7 @@ void SubtargetFeatures::setString(const std::string &Initial) {
}
/// setCPU - Set the CPU string. Replaces previous setting. Setting to ""
/// setCPU - Set the CPU string. Replaces previous setting. Setting to ""
/// clears CPU.
void SubtargetFeatures::setCPU(const std::string &String) {
Features[0] = LowercaseString(String);
@ -199,9 +199,16 @@ void SubtargetFeatures::setCPUIfNone(const std::string &String) {
if (Features[0].empty()) setCPU(String);
}
/// getCPU - Returns current CPU.
///
const std::string & SubtargetFeatures::getCPU() const {
return Features[0];
}
/// SetImpliedBits - For each feature that is (transitively) implied by this
/// feature, set it.
///
///
static
void SetImpliedBits(uint32_t &Bits, const SubtargetFeatureKV *FeatureEntry,
const SubtargetFeatureKV *FeatureTable,

View File

@ -108,7 +108,8 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
/// AutoDetectSubtargetFeatures - Auto-detect CPU features using CPUID
/// instruction.

View File

@ -38,7 +38,8 @@ public:
/// ParseSubtargetFeatures - Parses features string setting specified
/// subtarget options. Definition of function is auto generated by tblgen.
void ParseSubtargetFeatures(const std::string &FS, const std::string &CPU);
std::string ParseSubtargetFeatures(const std::string &FS,
const std::string &CPU);
};
} // End llvm namespace

View File

@ -451,7 +451,7 @@ void SubtargetEmitter::ParseFeaturesFunction(std::ostream &OS) {
OS << "// ParseSubtargetFeatures - Parses features string setting specified\n"
<< "// subtarget options.\n"
<< "void llvm::";
<< "std::string llvm::";
OS << Target;
OS << "Subtarget::ParseSubtargetFeatures(const std::string &FS,\n"
<< " const std::string &CPU) {\n"
@ -481,11 +481,12 @@ void SubtargetEmitter::ParseFeaturesFunction(std::ostream &OS) {
<< "Features.getInfo(ProcItinKV, ProcItinKVSize);\n"
<< " InstrItins = InstrItineraryData(Stages, Itinerary);\n";
}
OS << "}\n";
OS << " return Features.getCPU();\n"
<< "}\n";
}
//
//
// SubtargetEmitter::run - Main subtarget enumeration emitter.
//
void SubtargetEmitter::run(std::ostream &OS) {