[llvm-commits] CVS: llvm/tools/llvm-upgrade/UpgradeParser.y

Reid Spencer reid at x10sys.com
Fri Jan 12 16:02:15 PST 2007



Changes in directory llvm/tools/llvm-upgrade:

UpgradeParser.y updated: 1.37 -> 1.38
---
Log message:

For PR1093: http://llvm.org/PR1093 :
Implement upgrading of the varargs intrinsics. These must now have i8*
arguments. This patch bitcasts arguments to i8* and fixes the prototypes.


---
Diffs of the changes:  (+34 -5)

 UpgradeParser.y |   39 ++++++++++++++++++++++++++++++++++-----
 1 files changed, 34 insertions(+), 5 deletions(-)


Index: llvm/tools/llvm-upgrade/UpgradeParser.y
diff -u llvm/tools/llvm-upgrade/UpgradeParser.y:1.37 llvm/tools/llvm-upgrade/UpgradeParser.y:1.38
--- llvm/tools/llvm-upgrade/UpgradeParser.y:1.37	Fri Jan 12 14:09:48 2007
+++ llvm/tools/llvm-upgrade/UpgradeParser.y	Fri Jan 12 18:02:00 2007
@@ -36,6 +36,10 @@
 // definitions and calls.
 static bool AddAttributes = false;
 
+// This is set when a DECLARE keyword is recognized so that subsequent parsing
+// of a function prototype can know if its a declaration or definition.
+static bool isDeclare = false;
+
 // This bool is used to communicate between the InstVal and Inst rules about
 // whether or not a cast should be deleted. When the flag is set, InstVal has
 // determined that the cast is a candidate. However, it can only be deleted if
@@ -1463,6 +1467,11 @@
 
 FunctionHeaderH 
   : OptCallingConv TypesV Name '(' ArgList ')' OptSection OptAlign {
+    if (*$3 == "%llvm.va_start" || *$3 == "%llvm.va_end") {
+      *$5 = "i8*";
+    } else if (*$3 == "%llvm.va_copy") {
+      *$5 = "i8*, i8*";
+    }
     if (!$1->empty()) {
       *$1 += " ";
     }
@@ -1513,13 +1522,14 @@
   ;
   
 FunctionProto 
-  : DECLARE FnDeclareLinkage FunctionHeaderH { 
-    if (!$2->empty())
-      *$1 += " " + *$2;
-    *$1 += " " + *$3;
-    delete $2;
+  : DECLARE { isDeclare = true; } FnDeclareLinkage FunctionHeaderH { 
+    if (!$3->empty())
+      *$1 += " " + *$3;
+    *$1 += " " + *$4;
     delete $3;
+    delete $4;
     $$ = $1;
+    isDeclare = false;
   };
 
 //===----------------------------------------------------------------------===//
@@ -1876,6 +1886,25 @@
       *$$.val += (*$6)[1].val->substr(pos+1);
       $$.type = TypeInfo::get("bool", BoolTy);
     } else {
+      static unsigned upgradeCount = 1;
+      if (*$4.val == "%llvm.va_start" || *$4.val == "%llvm.va_end") {
+        std::string name("%va_upgrade");
+        name += llvm::utostr(upgradeCount++);
+        $1->insert(0, name + " = bitcast " + *(*$6)[0].val + " to i8*\n    ");
+        *(*$6)[0].val = "i8* " + name;
+        (*$6)[0].type = TypeInfo::get("i8", UByteTy)->getPointerType();
+      } else if (*$4.val == "%llvm.va_copy") {
+        std::string name0("%va_upgrade");
+        name0 += llvm::utostr(upgradeCount++);
+        std::string name1("%va_upgrade");
+        name1 += llvm::utostr(upgradeCount++);
+        $1->insert(0, name0 + " = bitcast " + *(*$6)[0].val + " to i8*\n    " +
+                      name1 + " = bitcast " + *(*$6)[1].val + " to i8*\n    ");
+        *(*$6)[0].val = "i8* " + name0;
+        (*$6)[0].type = TypeInfo::get("i8", UByteTy)->getPointerType();
+        *(*$6)[1].val = "i8* " + name1;
+        (*$6)[0].type = TypeInfo::get("i8", UByteTy)->getPointerType();
+      }
       if (!$2->empty())
         *$1 += " " + *$2;
       if (!$1->empty())






More information about the llvm-commits mailing list