aboutsummaryrefslogtreecommitdiffstats
path: root/lib/AsmParser
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-12-03 06:58:07 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-12-03 06:58:07 +0000
commit9f746f415e76617e8b102084143e2c08cedf6ba6 (patch)
tree9deea5314de401781d680453da25ea088efcaba3 /lib/AsmParser
parent87e8ec9a50a90c97112decad769c1db6b24ee70d (diff)
downloadexternal_llvm-9f746f415e76617e8b102084143e2c08cedf6ba6.zip
external_llvm-9f746f415e76617e8b102084143e2c08cedf6ba6.tar.gz
external_llvm-9f746f415e76617e8b102084143e2c08cedf6ba6.tar.bz2
Shorten the FCmp and ICmp mnemonics to 3 letters. Make the parser
disambiguate them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32151 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser')
-rw-r--r--lib/AsmParser/Lexer.l48
-rw-r--r--lib/AsmParser/llvmAsmParser.y27
2 files changed, 41 insertions, 34 deletions
diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l
index 5e60654..93b84be 100644
--- a/lib/AsmParser/Lexer.l
+++ b/lib/AsmParser/Lexer.l
@@ -44,10 +44,6 @@ void set_scan_string (const char * str) {
llvmAsmlval.type = Instruction::Enum; \
return sym
-#define RET_ENUM(type, Enum, sym) \
- llvmAsmlval.type = Enum; \
- return sym
-
// Construct a token value for an obsolete token
#define RET_TY(CTYPE, SYM) \
llvmAsmlval.PrimType = CTYPE;\
@@ -272,30 +268,26 @@ setle { RET_TOK(BinaryOpVal, SetLE, SETLE); }
setge { RET_TOK(BinaryOpVal, SetGE, SETGE); }
icmp { RET_TOK(OtherOpVal, ICmp, ICMP); }
fcmp { RET_TOK(OtherOpVal, FCmp, FCMP); }
-eq { RET_ENUM(IPredicate, ICmpInst::ICMP_EQ, EQ); }
-ne { RET_ENUM(IPredicate, ICmpInst::ICMP_NE, NE); }
-slt { RET_ENUM(IPredicate, ICmpInst::ICMP_SLT, SLT); }
-sgt { RET_ENUM(IPredicate, ICmpInst::ICMP_SGT, SGT); }
-sle { RET_ENUM(IPredicate, ICmpInst::ICMP_SLE, SLE); }
-sge { RET_ENUM(IPredicate, ICmpInst::ICMP_SGE, SGE); }
-ult { RET_ENUM(IPredicate, ICmpInst::ICMP_ULT, ULT); }
-ugt { RET_ENUM(IPredicate, ICmpInst::ICMP_UGT, UGT); }
-ule { RET_ENUM(IPredicate, ICmpInst::ICMP_ULE, ULE); }
-uge { RET_ENUM(IPredicate, ICmpInst::ICMP_UGE, UGE); }
-ordeq { RET_ENUM(FPredicate, FCmpInst::FCMP_OEQ, ORDEQ); }
-ordne { RET_ENUM(FPredicate, FCmpInst::FCMP_ONE, ORDNE); }
-ordlt { RET_ENUM(FPredicate, FCmpInst::FCMP_OLT, ORDLT); }
-ordgt { RET_ENUM(FPredicate, FCmpInst::FCMP_OGT, ORDGT); }
-ordle { RET_ENUM(FPredicate, FCmpInst::FCMP_OLE, ORDLE); }
-ordge { RET_ENUM(FPredicate, FCmpInst::FCMP_OGE, ORDGE); }
-ord { RET_ENUM(FPredicate, FCmpInst::FCMP_ORD, ORD); }
-uno { RET_ENUM(FPredicate, FCmpInst::FCMP_UNO, UNO); }
-unoeq { RET_ENUM(FPredicate, FCmpInst::FCMP_UEQ, UNOEQ); }
-unone { RET_ENUM(FPredicate, FCmpInst::FCMP_UNE, UNONE); }
-unolt { RET_ENUM(FPredicate, FCmpInst::FCMP_ULT, UNOLT); }
-unogt { RET_ENUM(FPredicate, FCmpInst::FCMP_UGT, UNOGT); }
-unole { RET_ENUM(FPredicate, FCmpInst::FCMP_ULE, UNOLE); }
-unoge { RET_ENUM(FPredicate, FCmpInst::FCMP_UGE, UNOGE); }
+eq { return EQ; }
+ne { return NE; }
+slt { return SLT; }
+sgt { return SGT; }
+sle { return SLE; }
+sge { return SGE; }
+ult { return ULT; }
+ugt { return UGT; }
+ule { return ULE; }
+uge { return UGE; }
+oeq { return OEQ; }
+one { return ONE; }
+olt { return OLT; }
+ogt { return OGT; }
+ole { return OLE; }
+oge { return OGE; }
+ord { return ORD; }
+uno { return UNO; }
+ueq { return UEQ; }
+une { return UNE; }
phi { RET_TOK(OtherOpVal, PHI, PHI_TOK); }
call { RET_TOK(OtherOpVal, Call, CALL); }
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y
index 8d0b7a2..45ded16 100644
--- a/lib/AsmParser/llvmAsmParser.y
+++ b/lib/AsmParser/llvmAsmParser.y
@@ -1076,11 +1076,10 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
%token <BinaryOpVal> ADD SUB MUL UDIV SDIV FDIV UREM SREM FREM AND OR XOR
%token <BinaryOpVal> SETLE SETGE SETLT SETGT SETEQ SETNE // Binary Comparators
%token <OtherOpVal> ICMP FCMP
-%token <IPredicate> EQ NE SLT SGT SLE SGE ULT UGT ULE UGE
%type <IPredicate> IPredicates
-%token <FPredicate> ORDEQ ORDNE ORDLT ORDGT ORDLE ORDGE ORD UNO UNOEQ UNONE
-%token <FPredicate> UNOLT UNOGT UNOLE UNOGE
%type <FPredicate> FPredicates
+%token EQ NE SLT SGT SLE SGE ULT UGT ULE UGE
+%token OEQ ONE OLT OGT OLE OGE ORD UNO UEQ UNE
// Memory Instructions
%token <MemOpVal> MALLOC ALLOCA FREE LOAD STORE GETELEMENTPTR
@@ -1128,9 +1127,25 @@ SetCondOps : SETLE | SETGE | SETLT | SETGT | SETEQ | SETNE;
CastOps : TRUNC | ZEXT | SEXT | FPTRUNC | FPEXT | BITCAST |
UITOFP | SITOFP | FPTOUI | FPTOSI | INTTOPTR | PTRTOINT;
ShiftOps : SHL | LSHR | ASHR;
-IPredicates : EQ | NE | SLT | SGT | SLE | SGE | ULT | UGT | ULE | UGE ;
-FPredicates : ORDEQ | ORDNE | ORDLT | ORDGT | ORDLE | ORDGE | ORD | UNO
- | UNOEQ | UNONE | UNOLT | UNOGT | UNOLE | UNOGE ;
+IPredicates
+ : EQ { $$ = ICmpInst::ICMP_EQ; } | NE { $$ = ICmpInst::ICMP_NE; }
+ | SLT { $$ = ICmpInst::ICMP_SLT; } | SGT { $$ = ICmpInst::ICMP_SGT; }
+ | SLE { $$ = ICmpInst::ICMP_SLE; } | SGE { $$ = ICmpInst::ICMP_SGE; }
+ | ULT { $$ = ICmpInst::ICMP_ULT; } | UGT { $$ = ICmpInst::ICMP_UGT; }
+ | ULE { $$ = ICmpInst::ICMP_ULE; } | UGE { $$ = ICmpInst::ICMP_UGE; }
+ ;
+
+FPredicates
+ : OEQ { $$ = FCmpInst::FCMP_OEQ; } | ONE { $$ = FCmpInst::FCMP_ONE; }
+ | OLT { $$ = FCmpInst::FCMP_OLT; } | OGT { $$ = FCmpInst::FCMP_OGT; }
+ | OLE { $$ = FCmpInst::FCMP_OLE; } | OGE { $$ = FCmpInst::FCMP_OGE; }
+ | ORD { $$ = FCmpInst::FCMP_ORD; } | UNO { $$ = FCmpInst::FCMP_UNO; }
+ | UEQ { $$ = FCmpInst::FCMP_UEQ; } | UNE { $$ = FCmpInst::FCMP_UNE; }
+ | ULT { $$ = FCmpInst::FCMP_ULT; } | UGT { $$ = FCmpInst::FCMP_UGT; }
+ | ULE { $$ = FCmpInst::FCMP_ULE; } | UGE { $$ = FCmpInst::FCMP_UGE; }
+ | TRUETOK { $$ = FCmpInst::FCMP_TRUE; }
+ | FALSETOK { $$ = FCmpInst::FCMP_FALSE; }
+ ;
// These are some types that allow classification if we only want a particular
// thing... for example, only a signed, unsigned, or integral type.