Add help support for -mcpu and -mattr.
authorJim Laskey <jlaskey@mac.com>
Fri, 2 Sep 2005 19:27:43 +0000 (19:27 +0000)
committerJim Laskey <jlaskey@mac.com>
Fri, 2 Sep 2005 19:27:43 +0000 (19:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23222 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/SubtargetFeature.h
lib/ExecutionEngine/JIT/TargetSelect.cpp
lib/Target/PowerPC/PPCSubtarget.cpp
lib/Target/SubtargetFeature.cpp
tools/llc/llc.cpp

index 4d504c1939cfa4bd285fdd88b6912b07e66285e2..fa815dbb76b177f147afbfa8b424ac6a1cfb78da 100644 (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,
index 5b1ee74cc17f604124e5919d1cf95fc1477d960f..508604797fd0f1a2774334b454a258fe63b819f9 100644 (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.
index 0efc1c152d84c95a740b32aaf6428c02a01fd77d..ca9d0778e04c48fbc424e6d23678d46e1b290714 100644 (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)
index 1583f4e43b661b8c28b4edf9422e3f7e5bc2e00c..bcb8f751aacb76ede51599af93c4c398646f5c0b 100644 (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);
index fbd2cf85fdc082194bced7d58e1cd860d42ffa8f..f2bccd0197319eeae537ba76bada748ddcd85532 100644 (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),