From 5520923eb5627b993cd068741c23ddff652ab1a3 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Fri, 29 Dec 2006 20:33:37 +0000 Subject: [PATCH] For PR950: Fix several bugs and update for new assembly syntax. Changes made include: 1. Fixing rules for icmp/fcmp instructions to not require a closing paren at the end. This was a cut-and-paste error from a previous commit. 2. Changing things like Out << " " to Out << ' ' 3. Adding the "define" keyword for function definitions 4. Adding support for packed structures llvm-svn: 32771 --- tools/llvm-upgrade/UpgradeLexer.l | 1 + tools/llvm-upgrade/UpgradeParser.y | 104 +++++++++++++++++------------ 2 files changed, 64 insertions(+), 41 deletions(-) diff --git a/tools/llvm-upgrade/UpgradeLexer.l b/tools/llvm-upgrade/UpgradeLexer.l index 2cf7c51dac6..aea7ec27d1b 100644 --- a/tools/llvm-upgrade/UpgradeLexer.l +++ b/tools/llvm-upgrade/UpgradeLexer.l @@ -105,6 +105,7 @@ end { RET_TOK( ENDTOK); } true { RET_TOK( TRUETOK); } false { RET_TOK( FALSETOK); } declare { RET_TOK( DECLARE); } +define { RET_TOK( DEFINE); } global { RET_TOK( GLOBAL); } constant { RET_TOK( CONSTANT); } internal { RET_TOK( INTERNAL); } diff --git a/tools/llvm-upgrade/UpgradeParser.y b/tools/llvm-upgrade/UpgradeParser.y index 3458c3a0cce..9f17b92e6d4 100644 --- a/tools/llvm-upgrade/UpgradeParser.y +++ b/tools/llvm-upgrade/UpgradeParser.y @@ -286,7 +286,7 @@ getCompareOp(const std::string& setcc, const TypeInfo& TI) { %token NULL_TOK UNDEF ZEROINITIALIZER TRUETOK FALSETOK %token TYPE VAR_ID LABELSTR STRINGCONSTANT %token IMPLEMENTATION BEGINTOK ENDTOK -%token DECLARE GLOBAL CONSTANT SECTION VOLATILE +%token DECLARE DEFINE GLOBAL CONSTANT SECTION VOLATILE %token TO DOTDOTDOT CONST INTERNAL LINKONCE WEAK %token DLLIMPORT DLLEXPORT EXTERN_WEAK APPENDING %token NOT EXTERNAL TARGET TRIPLE ENDIAN POINTERSIZE LITTLE BIG @@ -489,6 +489,16 @@ UpRTypes $$.newTy = new std::string("{}"); $$.oldTy = StructTy; } + | '<' '{' TypeListI '}' '>' { // Packed Structure type? + $3->insert(0, "<{ "); + *$3 += " }>"; + $$.newTy = $3; + $$.oldTy = StructTy; + } + | '<' '{' '}' '>' { // Empty packed structure type? + $$.newTy = new std::string("<{}>"); + $$.oldTy = StructTy; + } | UpRTypes '*' { // Pointer type? *$1.newTy += '*'; $$.elemTy = $1.oldTy; @@ -741,12 +751,12 @@ DefinitionList : DefinitionList Function { $$ = 0; } | DefinitionList FunctionProto { - *O << *$2 << "\n"; + *O << *$2 << '\n'; delete $2; $$ = 0; } | DefinitionList MODULE ASM_TOK AsmBlock { - *O << "module asm " << " " << *$4 << "\n"; + *O << "module asm " << ' ' << *$4 << '\n'; $$ = 0; } | DefinitionList IMPLEMENTATION { @@ -766,17 +776,17 @@ ConstPool : ConstPool OptAssign TYPE TypesV { NamedTypes[*$2].elemTy = $4.elemTy; *O << *$2 << " = "; } - *O << "type " << *$4.newTy << "\n"; + *O << "type " << *$4.newTy << '\n'; delete $2; delete $3; $4.destroy(); $$ = 0; } | ConstPool FunctionProto { // Function prototypes can be in const pool - *O << *$2 << "\n"; + *O << *$2 << '\n'; delete $2; $$ = 0; } | ConstPool MODULE ASM_TOK AsmBlock { // Asm blocks can be in the const pool - *O << *$2 << " " << *$3 << " " << *$4 << "\n"; + *O << *$2 << ' ' << *$3 << ' ' << *$4 << '\n'; delete $2; delete $3; delete $4; $$ = 0; } @@ -785,7 +795,7 @@ ConstPool : ConstPool OptAssign TYPE TypesV { *O << *$2 << " = "; Globals[*$2] = $5.type.clone(); } - *O << *$3 << " " << *$4 << " " << *$5.cnst << " " << *$6 << "\n"; + *O << *$3 << ' ' << *$4 << ' ' << *$5.cnst << ' ' << *$6 << '\n'; delete $2; delete $3; delete $4; $5.destroy(); delete $6; $$ = 0; } @@ -794,7 +804,7 @@ ConstPool : ConstPool OptAssign TYPE TypesV { *O << *$2 << " = "; Globals[*$2] = $5.clone(); } - *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n"; + *O << *$3 << ' ' << *$4 << ' ' << *$5.newTy << ' ' << *$6 << '\n'; delete $2; delete $3; delete $4; $5.destroy(); delete $6; $$ = 0; } @@ -803,7 +813,7 @@ ConstPool : ConstPool OptAssign TYPE TypesV { *O << *$2 << " = "; Globals[*$2] = $5.clone(); } - *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n"; + *O << *$3 << ' ' << *$4 << ' ' << *$5.newTy << ' ' << *$6 << '\n'; delete $2; delete $3; delete $4; $5.destroy(); delete $6; $$ = 0; } @@ -812,17 +822,17 @@ ConstPool : ConstPool OptAssign TYPE TypesV { *O << *$2 << " = "; Globals[*$2] = $5.clone(); } - *O << *$3 << " " << *$4 << " " << *$5.newTy << " " << *$6 << "\n"; + *O << *$3 << ' ' << *$4 << ' ' << *$5.newTy << ' ' << *$6 << '\n'; delete $2; delete $3; delete $4; $5.destroy(); delete $6; $$ = 0; } | ConstPool TARGET TargetDefinition { - *O << *$2 << " " << *$3 << "\n"; + *O << *$2 << ' ' << *$3 << '\n'; delete $2; delete $3; $$ = 0; } | ConstPool DEPLIBS '=' LibrariesDefinition { - *O << *$2 << " = " << *$4 << "\n"; + *O << *$2 << " = " << *$4 << '\n'; delete $2; delete $4; $$ = 0; } @@ -935,14 +945,26 @@ FunctionHeaderH : OptCallingConv TypesV Name '(' ArgList ')' BEGIN : BEGINTOK { $$ = new std::string("{"); delete $1; } | '{' { $$ = new std::string ("{"); } -FunctionHeader : OptLinkage FunctionHeaderH BEGIN { - if (!$1->empty()) { - *O << *$1 << " "; +FunctionHeader + : OptLinkage FunctionHeaderH BEGIN { + *O << "define "; + if (!$1->empty()) { + *O << *$1 << ' '; + } + *O << *$2 << ' ' << *$3 << '\n'; + delete $1; delete $2; delete $3; + $$ = 0; } - *O << *$2 << " " << *$3 << "\n"; - delete $1; delete $2; delete $3; - $$ = 0; -}; + | DEFINE OptLinkage FunctionHeaderH BEGIN { + *O << *$1 << ' '; + if (!$2->empty()) { + *O << *$2 << ' '; + } + *O << *$3 << ' ' << *$4 << '\n'; + delete $1; delete $2; delete $3; delete $4; + $$ = 0; + } + ; END : ENDTOK { $$ = new std::string("}"); delete $1; } | '}' { $$ = new std::string("}"); }; @@ -950,7 +972,7 @@ END : ENDTOK { $$ = new std::string("}"); delete $1; } Function : FunctionHeader BasicBlockList END { if ($2) *O << *$2; - *O << '\n' << *$3 << "\n"; + *O << '\n' << *$3 << '\n'; $$ = 0; }; @@ -1038,7 +1060,7 @@ BasicBlock : InstructionList BBTerminatorInst { }; InstructionList : InstructionList Inst { - *O << " " << *$2 << "\n"; + *O << " " << *$2 << '\n'; delete $2; $$ = 0; } @@ -1046,7 +1068,7 @@ InstructionList : InstructionList Inst { $$ = 0; } | LABELSTR { - *O << *$1 << "\n"; + *O << *$1 << '\n'; delete $1; $$ = 0; }; @@ -1054,38 +1076,38 @@ InstructionList : InstructionList Inst { Unwind : UNWIND | EXCEPT { $$ = $1; *$$ = "unwind"; } BBTerminatorInst : RET ResolvedVal { // Return with a result... - *O << " " << *$1 << " " << *$2.val << "\n"; + *O << " " << *$1 << ' ' << *$2.val << '\n'; delete $1; $2.destroy(); $$ = 0; } | RET VOID { // Return with no result... - *O << " " << *$1 << " " << *$2.newTy << "\n"; + *O << " " << *$1 << ' ' << *$2.newTy << '\n'; delete $1; $2.destroy(); $$ = 0; } | BR LABEL ValueRef { // Unconditional Branch... - *O << " " << *$1 << " " << *$2.newTy << " " << *$3.val << "\n"; + *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << '\n'; delete $1; $2.destroy(); $3.destroy(); $$ = 0; } // Conditional Branch... | BR BOOL ValueRef ',' LABEL ValueRef ',' LABEL ValueRef { - *O << " " << *$1 << " " << *$2.newTy << " " << *$3.val << ", " - << *$5.newTy << " " << *$6.val << ", " << *$8.newTy << " " - << *$9.val << "\n"; + *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << ", " + << *$5.newTy << ' ' << *$6.val << ", " << *$8.newTy << ' ' + << *$9.val << '\n'; delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); $8.destroy(); $9.destroy(); $$ = 0; } | SWITCH IntType ValueRef ',' LABEL ValueRef '[' JumpTable ']' { - *O << " " << *$1 << " " << *$2.newTy << " " << *$3.val << ", " - << *$5.newTy << " " << *$6.val << " [" << *$8 << " ]\n"; + *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << ", " + << *$5.newTy << ' ' << *$6.val << " [" << *$8 << " ]\n"; delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); delete $8; $$ = 0; } | SWITCH IntType ValueRef ',' LABEL ValueRef '[' ']' { - *O << " " << *$1 << " " << *$2.newTy << " " << *$3.val << ", " - << *$5.newTy << " " << *$6.val << "[]\n"; + *O << " " << *$1 << ' ' << *$2.newTy << ' ' << *$3.val << ", " + << *$5.newTy << ' ' << *$6.val << "[]\n"; delete $1; $2.destroy(); $3.destroy(); $5.destroy(); $6.destroy(); $$ = 0; } @@ -1094,7 +1116,7 @@ BBTerminatorInst : RET ResolvedVal { // Return with a result... *O << " "; if (!$1->empty()) *O << *$1 << " = "; - *O << *$2 << " " << *$3 << " " << *$4.newTy << " " << *$5.val << " ("; + *O << *$2 << ' ' << *$3 << ' ' << *$4.newTy << ' ' << *$5.val << " ("; for (unsigned i = 0; i < $7->size(); ++i) { ValueInfo& VI = (*$7)[i]; *O << *VI.val; @@ -1102,20 +1124,20 @@ BBTerminatorInst : RET ResolvedVal { // Return with a result... *O << ", "; VI.destroy(); } - *O << ") " << *$9 << " " << *$10.newTy << " " << *$11.val << " " - << *$12 << " " << *$13.newTy << " " << *$14.val << "\n"; + *O << ") " << *$9 << ' ' << *$10.newTy << ' ' << *$11.val << ' ' + << *$12 << ' ' << *$13.newTy << ' ' << *$14.val << '\n'; delete $1; delete $2; delete $3; $4.destroy(); $5.destroy(); delete $7; delete $9; $10.destroy(); $11.destroy(); delete $12; $13.destroy(); $14.destroy(); $$ = 0; } | Unwind { - *O << " " << *$1 << "\n"; + *O << " " << *$1 << '\n'; delete $1; $$ = 0; } | UNREACHABLE { - *O << " " << *$1 << "\n"; + *O << " " << *$1 << '\n'; delete $1; $$ = 0; }; @@ -1198,13 +1220,13 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { $2.destroy(); $3.destroy(); $5.destroy(); $$ = $1; } - | ICMP IPredicates Types ValueRef ',' ValueRef ')' { - *$1 += " " + *$2 + " " + *$4.val + "," + *$6.val + ")"; + | ICMP IPredicates Types ValueRef ',' ValueRef { + *$1 += " " + *$2 + " " + *$3.newTy + " " + *$4.val + "," + *$6.val; delete $2; $4.destroy(); $6.destroy(); $$ = $1; } - | FCMP FPredicates Types ValueRef ',' ValueRef ')' { - *$1 += " " + *$2 + " " + *$4.val + "," + *$6.val + ")"; + | FCMP FPredicates Types ValueRef ',' ValueRef { + *$1 += " " + *$2 + " " + *$3.newTy + " " + *$4.val + "," + *$6.val; delete $2; $4.destroy(); $6.destroy(); $$ = $1; }