[llvm-commits] CVS: llvm/lib/AsmParser/Lexer.l ParserInternals.h llvmAsmParser.y
Chris Lattner
lattner at cs.uiuc.edu
Sat Oct 16 11:17:24 PDT 2004
Changes in directory llvm/lib/AsmParser:
Lexer.l updated: 1.54 -> 1.55
ParserInternals.h updated: 1.38 -> 1.39
llvmAsmParser.y updated: 1.204 -> 1.205
---
Log message:
Parse undef and unreachable
---
Diffs of the changes: (+24 -4)
Index: llvm/lib/AsmParser/Lexer.l
diff -u llvm/lib/AsmParser/Lexer.l:1.54 llvm/lib/AsmParser/Lexer.l:1.55
--- llvm/lib/AsmParser/Lexer.l:1.54 Tue Sep 14 00:43:23 2004
+++ llvm/lib/AsmParser/Lexer.l Sat Oct 16 13:17:13 2004
@@ -188,6 +188,7 @@
implementation { return IMPLEMENTATION; }
zeroinitializer { return ZEROINITIALIZER; }
\.\.\. { return DOTDOTDOT; }
+undef { return UNDEF; }
null { return NULL_TOK; }
to { return TO; }
except { RET_TOK(TermOpVal, Unwind, UNWIND); }
@@ -247,7 +248,7 @@
switch { RET_TOK(TermOpVal, Switch, SWITCH); }
invoke { RET_TOK(TermOpVal, Invoke, INVOKE); }
unwind { RET_TOK(TermOpVal, Unwind, UNWIND); }
-
+unreachable { RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
malloc { RET_TOK(MemOpVal, Malloc, MALLOC); }
alloca { RET_TOK(MemOpVal, Alloca, ALLOCA); }
Index: llvm/lib/AsmParser/ParserInternals.h
diff -u llvm/lib/AsmParser/ParserInternals.h:1.38 llvm/lib/AsmParser/ParserInternals.h:1.39
--- llvm/lib/AsmParser/ParserInternals.h:1.38 Wed Sep 1 17:55:35 2004
+++ llvm/lib/AsmParser/ParserInternals.h Sat Oct 16 13:17:13 2004
@@ -72,7 +72,7 @@
struct ValID {
enum {
NumberVal, NameVal, ConstSIntVal, ConstUIntVal, ConstFPVal, ConstNullVal,
- ConstantVal,
+ ConstUndefVal, ConstantVal,
} Type;
union {
@@ -108,6 +108,10 @@
ValID D; D.Type = ConstNullVal; return D;
}
+ static ValID createUndef() {
+ ValID D; D.Type = ConstUndefVal; return D;
+ }
+
static ValID create(Constant *Val) {
ValID D; D.Type = ConstantVal; D.ConstantValue = Val; return D;
}
@@ -130,6 +134,7 @@
case NameVal : return Name;
case ConstFPVal : return ftostr(ConstPoolFP);
case ConstNullVal : return "null";
+ case ConstUndefVal : return "undef";
case ConstUIntVal :
case ConstSIntVal : return std::string("%") + itostr(ConstPool64);
case ConstantVal:
@@ -152,6 +157,7 @@
case ConstUIntVal: return UConstPool64 < V.UConstPool64;
case ConstFPVal: return ConstPoolFP < V.ConstPoolFP;
case ConstNullVal: return false;
+ case ConstUndefVal: return false;
case ConstantVal: return ConstantValue < V.ConstantValue;
default: assert(0 && "Unknown value type!"); return false;
}
Index: llvm/lib/AsmParser/llvmAsmParser.y
diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.204 llvm/lib/AsmParser/llvmAsmParser.y:1.205
--- llvm/lib/AsmParser/llvmAsmParser.y:1.204 Fri Oct 8 21:18:58 2004
+++ llvm/lib/AsmParser/llvmAsmParser.y Sat Oct 16 13:17:13 2004
@@ -298,6 +298,9 @@
ThrowException("Cannot create a a non pointer null!");
return ConstantPointerNull::get(cast<PointerType>(Ty));
+ case ValID::ConstUndefVal: // Is it an undef value?
+ return UndefValue::get(Ty);
+
case ValID::ConstantVal: // Fully resolved constant?
if (D.ConstantValue->getType() != Ty)
ThrowException("Constant expression type different from required type!");
@@ -908,12 +911,12 @@
%token IMPLEMENTATION ZEROINITIALIZER TRUETOK FALSETOK BEGINTOK ENDTOK
%token DECLARE GLOBAL CONSTANT VOLATILE
-%token TO DOTDOTDOT NULL_TOK CONST INTERNAL LINKONCE WEAK APPENDING
+%token TO DOTDOTDOT NULL_TOK UNDEF CONST INTERNAL LINKONCE WEAK APPENDING
%token OPAQUE NOT EXTERNAL TARGET TRIPLE ENDIAN POINTERSIZE LITTLE BIG
%token DEPLIBS
// Basic Block Terminating Operators
-%token <TermOpVal> RET BR SWITCH INVOKE UNWIND
+%token <TermOpVal> RET BR SWITCH INVOKE UNWIND UNREACHABLE
// Binary Operators
%type <BinaryOpVal> ArithmeticOps LogicalOps SetCondOps // Binops Subcatagories
@@ -1221,6 +1224,10 @@
$$ = ConstantPointerNull::get(PTy);
delete $1;
}
+ | Types UNDEF {
+ $$ = UndefValue::get($1->get());
+ delete $1;
+ }
| Types SymbolicValueRef {
const PointerType *Ty = dyn_cast<PointerType>($1->get());
if (Ty == 0)
@@ -1687,6 +1694,9 @@
| NULL_TOK {
$$ = ValID::createNull();
}
+ | UNDEF {
+ $$ = ValID::createUndef();
+ }
| '<' ConstVector '>' { // Nonempty unsized packed vector
const Type *ETy = (*$2)[0]->getType();
int NumElements = $2->size();
@@ -1858,6 +1868,9 @@
}
| UNWIND {
$$ = new UnwindInst();
+ }
+ | UNREACHABLE {
+ $$ = new UnreachableInst();
};
More information about the llvm-commits
mailing list