[llvm-commits] [llvm] r96916 - in /llvm/trunk: include/llvm/CompilerDriver/Common.td utils/TableGen/LLVMCConfigurationEmitter.cpp

Mikhail Glushenkov foldr at codedgers.com
Tue Feb 23 01:04:13 PST 2010


Author: foldr
Date: Tue Feb 23 03:04:13 2010
New Revision: 96916

URL: http://llvm.org/viewvc/llvm-project?rev=96916&view=rev
Log:
Add a way to enable '-opt=foo' forwarding.

Modified:
    llvm/trunk/include/llvm/CompilerDriver/Common.td
    llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp

Modified: llvm/trunk/include/llvm/CompilerDriver/Common.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CompilerDriver/Common.td?rev=96916&r1=96915&r2=96916&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CompilerDriver/Common.td (original)
+++ llvm/trunk/include/llvm/CompilerDriver/Common.td Tue Feb 23 03:04:13 2010
@@ -46,6 +46,7 @@
 def really_hidden;
 def required;
 def comma_separated;
+def forward_not_split;
 
 // The 'case' construct.
 def case;

Modified: llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp?rev=96916&r1=96915&r2=96916&view=diff
==============================================================================
--- llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp (original)
+++ llvm/trunk/utils/TableGen/LLVMCConfigurationEmitter.cpp Tue Feb 23 03:04:13 2010
@@ -229,7 +229,7 @@
   enum OptionDescriptionFlags { Required = 0x1, Hidden = 0x2,
                                 ReallyHidden = 0x4, Extern = 0x8,
                                 OneOrMore = 0x10, Optional = 0x20,
-                                CommaSeparated = 0x40 };
+                                CommaSeparated = 0x40, ForwardNotSplit = 0x80 };
 }
 
 /// OptionDescription - Represents data contained in a single
@@ -271,6 +271,9 @@
   bool isExtern() const;
   void setExtern();
 
+  bool isForwardNotSplit() const;
+  void setForwardNotSplit();
+
   bool isRequired() const;
   void setRequired();
 
@@ -327,6 +330,13 @@
   Flags |= OptionDescriptionFlags::CommaSeparated;
 }
 
+bool OptionDescription::isForwardNotSplit() const {
+  return Flags & OptionDescriptionFlags::ForwardNotSplit;
+}
+void OptionDescription::setForwardNotSplit() {
+  Flags |= OptionDescriptionFlags::ForwardNotSplit;
+}
+
 bool OptionDescription::isExtern() const {
   return Flags & OptionDescriptionFlags::Extern;
 }
@@ -586,6 +596,8 @@
       AddHandler("required", &CollectOptionProperties::onRequired);
       AddHandler("optional", &CollectOptionProperties::onOptional);
       AddHandler("comma_separated", &CollectOptionProperties::onCommaSeparated);
+      AddHandler("forward_not_split",
+                 &CollectOptionProperties::onForwardNotSplit);
 
       staticMembersInitialized_ = true;
     }
@@ -629,6 +641,13 @@
     optDesc_.setCommaSeparated();
   }
 
+  void onForwardNotSplit (const DagInit& d) {
+    CheckNumberOfArguments(d, 0);
+    if (!optDesc_.isParameter())
+      throw "'forward_not_split' is valid only for parameter options!";
+    optDesc_.setForwardNotSplit();
+  }
+
   void onRequired (const DagInit& d) {
     CheckNumberOfArguments(d, 0);
     if (optDesc_.isOneOrMore() || optDesc_.isOptional())
@@ -1792,8 +1811,16 @@
     O.indent(IndentLevel) << "vec.push_back(\"" << Name << "\");\n";
     break;
   case OptionType::Parameter:
-    O.indent(IndentLevel) << "vec.push_back(\"" << Name << "\");\n";
-    O.indent(IndentLevel) << "vec.push_back(" << D.GenVariableName() << ");\n";
+    O.indent(IndentLevel) << "vec.push_back(\"" << Name;
+
+    if (!D.isForwardNotSplit()) {
+      O << "\");\n";
+      O.indent(IndentLevel) << "vec.push_back("
+                            << D.GenVariableName() << ");\n";
+    }
+    else {
+      O << "=\" + " << D.GenVariableName() << ");\n";
+    }
     break;
   case OptionType::Prefix:
     O.indent(IndentLevel) << "vec.push_back(\"" << Name << "\" + "





More information about the llvm-commits mailing list