[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