diff options
| author | Reid Spencer <rspencer@reidspencer.com> | 2006-12-01 22:26:37 +0000 |
|---|---|---|
| committer | Reid Spencer <rspencer@reidspencer.com> | 2006-12-01 22:26:37 +0000 |
| commit | c3f57a2f8b5e6043a060578eef9d991cc6c9fa87 (patch) | |
| tree | 122519a079f3217e65c75d4dc9ee9ae6b6350c7b /llvm/tools/llvm-upgrade/UpgradeParser.y.cvs | |
| parent | 23d540538d190c84a8657081b4f6a6a386eff240 (diff) | |
| download | bcm5719-llvm-c3f57a2f8b5e6043a060578eef9d991cc6c9fa87.tar.gz bcm5719-llvm-c3f57a2f8b5e6043a060578eef9d991cc6c9fa87.zip | |
Upgrade shr to ashr and lshr
llvm-svn: 32103
Diffstat (limited to 'llvm/tools/llvm-upgrade/UpgradeParser.y.cvs')
| -rw-r--r-- | llvm/tools/llvm-upgrade/UpgradeParser.y.cvs | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/llvm/tools/llvm-upgrade/UpgradeParser.y.cvs b/llvm/tools/llvm-upgrade/UpgradeParser.y.cvs index 77cdb41322a..45749777c63 100644 --- a/llvm/tools/llvm-upgrade/UpgradeParser.y.cvs +++ b/llvm/tools/llvm-upgrade/UpgradeParser.y.cvs @@ -153,7 +153,7 @@ const char* getCastOpcode(TypeInfo& SrcTy, TypeInfo&DstTy) { %token <String> ADD SUB MUL UDIV SDIV FDIV UREM SREM FREM AND OR XOR %token <String> SETLE SETGE SETLT SETGT SETEQ SETNE // Binary Comparators %token <String> MALLOC ALLOCA FREE LOAD STORE GETELEMENTPTR -%token <String> PHI_TOK SELECT SHL LSHR ASHR VAARG +%token <String> PHI_TOK SELECT SHL SHR ASHR LSHR VAARG %token <String> EXTRACTELEMENT INSERTELEMENT SHUFFLEVECTOR %token <String> CAST @@ -193,7 +193,7 @@ EInt64Val : ESINT64VAL | EUINT64VAL; ArithmeticOps: ADD | SUB | MUL | UDIV | SDIV | FDIV | UREM | SREM | FREM; LogicalOps : AND | OR | XOR; SetCondOps : SETLE | SETGE | SETLT | SETGT | SETEQ | SETNE; -ShiftOps : SHL | LSHR | ASHR; +ShiftOps : SHL | SHR | ASHR | LSHR; // These are some types that allow classification if we only want a particular // thing... for example, only a signed, unsigned, or integral type. @@ -496,9 +496,12 @@ ConstExpr: CAST '(' ConstVal TO Types ')' { $$ = $1; } | ShiftOps '(' ConstVal ',' ConstVal ')' { - *$1 += "(" + *$3.cnst + "," + *$5.cnst + ")"; - $3.destroy(); $5.destroy(); - $$ = $1; + const char* shiftop = $1->c_str(); + if (*$1 == "shr") + shiftop = ($3.type.isUnsigned()) ? "lshr" : "ashr"; + $$ = new std::string(shiftop); + *$$ += "(" + *$3.cnst + "," + *$5.cnst + ")"; + delete $1; $3.destroy(); $5.destroy(); } | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' { *$1 += "(" + *$3.cnst + "," + *$5.cnst + ")"; @@ -966,9 +969,12 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { $$ = $1; } | ShiftOps ResolvedVal ',' ResolvedVal { - *$1 += " " + *$2.val + ", " + *$4.val; - $2.destroy(); $4.destroy(); - $$ = $1; + const char* shiftop = $1->c_str(); + if (*$1 == "shr") + shiftop = ($2.type.isUnsigned()) ? "lshr" : "ashr"; + $$ = new std::string(shiftop); + *$$ += " " + *$2.val + ", " + *$4.val; + delete $1; $2.destroy(); $4.destroy(); } | CAST ResolvedVal TO Types { const char *opcode = getCastOpcode($2.type, $4); |

