[llvm-commits] CVS: llvm/lib/Target/SubtargetFeature.cpp

Jim Laskey jlaskey at apple.com
Fri Sep 2 12:27:57 PDT 2005



Changes in directory llvm/lib/Target:

SubtargetFeature.cpp updated: 1.2 -> 1.3
---
Log message:

Add help support for -mcpu and -mattr.


---
Diffs of the changes:  (+27 -0)

 SubtargetFeature.cpp |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+)


Index: llvm/lib/Target/SubtargetFeature.cpp
diff -u llvm/lib/Target/SubtargetFeature.cpp:1.2 llvm/lib/Target/SubtargetFeature.cpp:1.3
--- llvm/lib/Target/SubtargetFeature.cpp:1.2	Thu Sep  1 21:51:42 2005
+++ llvm/lib/Target/SubtargetFeature.cpp	Fri Sep  2 14:27:43 2005
@@ -99,6 +99,29 @@
   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 @@
   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 @@
   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);






More information about the llvm-commits mailing list