[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