Add help support for -mcpu and -mattr.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23222 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey 2005-09-02 19:27:43 +00:00
parent 6621e3b963
commit 839615a510
5 changed files with 65 additions and 27 deletions

View File

@ -34,6 +34,7 @@ namespace llvm {
//
struct SubtargetFeatureKV {
const char *Key; // K-V key string
const char *Desc; // Help descriptor
uint32_t Value; // K-V integer value
// Compare routine for std binary search
@ -126,6 +127,10 @@ public:
/// Adding Features.
void AddFeature(const std::string &String, bool IsEnabled = true);
/// Display help for feature choices.
static void Help(const char *Heading,
const SubtargetFeatureKV *Table, size_t TableSize);
/// Parse feature string for quick usage.
static uint32_t Parse(const std::string &String,
const std::string &DefaultCPU,

View File

@ -26,15 +26,15 @@ MArch("march", cl::desc("Architecture to generate assembly for:"));
static cl::opt<std::string>
MCPU("mcpu",
cl::desc("Target a specific cpu type"),
cl::desc("Target a specific cpu type (-mcpu=help for list of choices)"),
cl::value_desc("cpu-name"),
cl::init(""));
static cl::list<std::string>
MAttrs("mattr",
cl::CommaSeparated,
cl::desc("Target specific attributes:"),
cl::value_desc("attributes"));
cl::desc("Target specific attributes (-mattr=help for list of choices)"),
cl::value_desc("attr1,+attr2, ..., -attrN"));
/// create - Create an return a new JIT compiler if there is one available
/// for the current target. Otherwise, return null.

View File

@ -40,25 +40,31 @@ enum PowerPCFeature {
/// Sorted (by key) array of values for CPU subtype.
static const SubtargetFeatureKV PowerPCSubTypeKV[] = {
{ "601" , 0 },
{ "602" , 0 },
{ "603" , 0 },
{ "603e" , 0 },
{ "603ev" , 0 },
{ "604" , 0 },
{ "604e" , 0 },
{ "620" , 0 },
{ "7400" , PowerPCFeatureAltivec },
{ "7450" , PowerPCFeatureAltivec },
{ "750" , 0 },
{ "970" , PowerPCFeature64Bit | PowerPCFeatureAltivec |
{ "601" , "Select the PowerPC 601 processor", 0 },
{ "602" , "Select the PowerPC 602 processor", 0 },
{ "603" , "Select the PowerPC 603 processor", 0 },
{ "603e" , "Select the PowerPC 603e processor", 0 },
{ "603ev" , "Select the PowerPC 603ev processor", 0 },
{ "604" , "Select the PowerPC 604 processor", 0 },
{ "604e" , "Select the PowerPC 604e processor", 0 },
{ "620" , "Select the PowerPC 620 processor", 0 },
{ "7400" , "Select the PowerPC 7400 (G4) processor",
PowerPCFeatureAltivec },
{ "7450" , "Select the PowerPC 7450 (G4+) processor",
PowerPCFeatureAltivec },
{ "750" , "Select the PowerPC 750 (G3) processor", 0 },
{ "970" , "Select the PowerPC 970 (G5 - GPUL) processor",
PowerPCFeature64Bit | PowerPCFeatureAltivec |
PowerPCFeatureFSqrt | PowerPCFeatureGPUL },
{ "g3" , 0 },
{ "g4" , PowerPCFeatureAltivec },
{ "g4+" , PowerPCFeatureAltivec },
{ "g5" , PowerPCFeature64Bit | PowerPCFeatureAltivec |
{ "g3" , "Select the PowerPC G3 (750) processor", 0 },
{ "g4" , "Select the PowerPC G4 (7400) processor",
PowerPCFeatureAltivec },
{ "g4+" , "Select the PowerPC G4+ (7450) processor",
PowerPCFeatureAltivec },
{ "g5" , "Select the PowerPC g5 (970 - GPUL) processor",
PowerPCFeature64Bit | PowerPCFeatureAltivec |
PowerPCFeatureFSqrt | PowerPCFeatureGPUL },
{ "generic", 0 }
{ "generic", "Select instructions for a generic PowerPC processor", 0 }
};
/// Length of PowerPCSubTypeKV.
static const unsigned PowerPCSubTypeKVSize = sizeof(PowerPCSubTypeKV)
@ -66,10 +72,10 @@ static const unsigned PowerPCSubTypeKVSize = sizeof(PowerPCSubTypeKV)
/// Sorted (by key) array of values for CPU features.
static SubtargetFeatureKV PowerPCFeatureKV[] = {
{ "64bit" , PowerPCFeature64Bit },
{ "altivec", PowerPCFeatureAltivec },
{ "fsqrt" , PowerPCFeatureFSqrt },
{ "gpul" , PowerPCFeatureGPUL }
{ "64bit" , "Should 64 bit instructions be used" , PowerPCFeature64Bit },
{ "altivec", "Should Altivec instructions be used" , PowerPCFeatureAltivec },
{ "fsqrt" , "Should the fsqrt instruction be used", PowerPCFeatureFSqrt },
{ "gpul" , "Should GPUL instructions be used" , PowerPCFeatureGPUL }
};
/// Length of PowerPCFeatureKV.
static const unsigned PowerPCFeatureKVSize = sizeof(PowerPCFeatureKV)

View File

@ -99,6 +99,29 @@ SubtargetFeatures::Find(const std::string &S,
return F;
}
/// Display help for feature choices.
void SubtargetFeatures::Help(const char *Heading,
const SubtargetFeatureKV *Table, size_t TableSize) {
// Determine the length of the longest key
size_t MaxLen = 0;
for (size_t i = 0; i < TableSize; i++)
MaxLen = std::max(MaxLen, std::strlen(Table[i].Key));
// Print heading
std::cerr << "Help for " << Heading << " choices\n\n";
// For each feature
for (size_t i = 0; i < TableSize; i++) {
// Compute required padding
size_t Pad = MaxLen - std::strlen(Table[i].Key) + 1;
// Print details
std::cerr << Table[i].Key << std::string(Pad, ' ') << " - "
<< Table[i].Desc << "\n";
}
// Wrap it up
std::cerr << "\n\n";
// Leave tool
exit(1);
}
/// Parse feature string for quick usage.
uint32_t SubtargetFeatures::Parse(const std::string &String,
const std::string &DefaultCPU,
@ -124,6 +147,8 @@ uint32_t SubtargetFeatures::Parse(const std::string &String,
Split(Features, String);
// Check if default is needed
if (Features[0].empty()) Features[0] = DefaultCPU;
// Check for help
if (Features[0] == "help") Help("CPU", CPUTable, CPUTableSize);
// Find CPU entry
const SubtargetFeatureKV *CPUEntry =
Find(Features[0], CPUTable, CPUTableSize);
@ -141,6 +166,8 @@ uint32_t SubtargetFeatures::Parse(const std::string &String,
for (size_t i = 1; i < Features.size(); i++) {
// Get next feature
const std::string &Feature = Features[i];
// Check for help
if (Feature == "+help") Help("feature", FeatureTable, FeatureTableSize);
// Find feature in table.
const SubtargetFeatureKV *FeatureEntry =
Find(StripFlag(Feature), FeatureTable, FeatureTableSize);

View File

@ -50,15 +50,15 @@ MArch("march", cl::desc("Architecture to generate code for:"));
static cl::opt<std::string>
MCPU("mcpu",
cl::desc("Target a specific cpu type"),
cl::desc("Target a specific cpu type (-mcpu=help for list of choices)"),
cl::value_desc("cpu-name"),
cl::init(""));
static cl::list<std::string>
MAttrs("mattr",
cl::CommaSeparated,
cl::desc("Target specific attributes:"),
cl::value_desc("attributes"));
cl::desc("Target specific attributes (-mattr=help for list of choices)"),
cl::value_desc("attr1,+attr2, ..., -attrN"));
cl::opt<TargetMachine::CodeGenFileType>
FileType("filetype", cl::init(TargetMachine::AssemblyFile),