Home | History | Annotate | Download | only in AsmParser
      1 //===-- LLParser.cpp - Parser Class ---------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file defines the parser class for .ll files.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "LLParser.h"
     15 #include "llvm/AutoUpgrade.h"
     16 #include "llvm/CallingConv.h"
     17 #include "llvm/Constants.h"
     18 #include "llvm/DerivedTypes.h"
     19 #include "llvm/InlineAsm.h"
     20 #include "llvm/Instructions.h"
     21 #include "llvm/Module.h"
     22 #include "llvm/Operator.h"
     23 #include "llvm/ValueSymbolTable.h"
     24 #include "llvm/ADT/SmallPtrSet.h"
     25 #include "llvm/Support/ErrorHandling.h"
     26 #include "llvm/Support/raw_ostream.h"
     27 using namespace llvm;
     28 
     29 static std::string getTypeString(Type *T) {
     30   std::string Result;
     31   raw_string_ostream Tmp(Result);
     32   Tmp << *T;
     33   return Tmp.str();
     34 }
     35 
     36 /// Run: module ::= toplevelentity*
     37 bool LLParser::Run() {
     38   // Prime the lexer.
     39   Lex.Lex();
     40 
     41   return ParseTopLevelEntities() ||
     42          ValidateEndOfModule();
     43 }
     44 
     45 /// ValidateEndOfModule - Do final validity and sanity checks at the end of the
     46 /// module.
     47 bool LLParser::ValidateEndOfModule() {
     48   // Handle any instruction metadata forward references.
     49   if (!ForwardRefInstMetadata.empty()) {
     50     for (DenseMap<Instruction*, std::vector<MDRef> >::iterator
     51          I = ForwardRefInstMetadata.begin(), E = ForwardRefInstMetadata.end();
     52          I != E; ++I) {
     53       Instruction *Inst = I->first;
     54       const std::vector<MDRef> &MDList = I->second;
     55 
     56       for (unsigned i = 0, e = MDList.size(); i != e; ++i) {
     57         unsigned SlotNo = MDList[i].MDSlot;
     58 
     59         if (SlotNo >= NumberedMetadata.size() || NumberedMetadata[SlotNo] == 0)
     60           return Error(MDList[i].Loc, "use of undefined metadata '!" +
     61                        Twine(SlotNo) + "'");
     62         Inst->setMetadata(MDList[i].MDKind, NumberedMetadata[SlotNo]);
     63       }
     64     }
     65     ForwardRefInstMetadata.clear();
     66   }
     67 
     68 
     69   // If there are entries in ForwardRefBlockAddresses at this point, they are
     70   // references after the function was defined.  Resolve those now.
     71   while (!ForwardRefBlockAddresses.empty()) {
     72     // Okay, we are referencing an already-parsed function, resolve them now.
     73     Function *TheFn = 0;
     74     const ValID &Fn = ForwardRefBlockAddresses.begin()->first;
     75     if (Fn.Kind == ValID::t_GlobalName)
     76       TheFn = M->getFunction(Fn.StrVal);
     77     else if (Fn.UIntVal < NumberedVals.size())
     78       TheFn = dyn_cast<Function>(NumberedVals[Fn.UIntVal]);
     79 
     80     if (TheFn == 0)
     81       return Error(Fn.Loc, "unknown function referenced by blockaddress");
     82 
     83     // Resolve all these references.
     84     if (ResolveForwardRefBlockAddresses(TheFn,
     85                                       ForwardRefBlockAddresses.begin()->second,
     86                                         0))
     87       return true;
     88 
     89     ForwardRefBlockAddresses.erase(ForwardRefBlockAddresses.begin());
     90   }
     91 
     92   for (unsigned i = 0, e = NumberedTypes.size(); i != e; ++i)
     93     if (NumberedTypes[i].second.isValid())
     94       return Error(NumberedTypes[i].second,
     95                    "use of undefined type '%" + Twine(i) + "'");
     96 
     97   for (StringMap<std::pair<Type*, LocTy> >::iterator I =
     98        NamedTypes.begin(), E = NamedTypes.end(); I != E; ++I)
     99     if (I->second.second.isValid())
    100       return Error(I->second.second,
    101                    "use of undefined type named '" + I->getKey() + "'");
    102 
    103   if (!ForwardRefVals.empty())
    104     return Error(ForwardRefVals.begin()->second.second,
    105                  "use of undefined value '@" + ForwardRefVals.begin()->first +
    106                  "'");
    107 
    108   if (!ForwardRefValIDs.empty())
    109     return Error(ForwardRefValIDs.begin()->second.second,
    110                  "use of undefined value '@" +
    111                  Twine(ForwardRefValIDs.begin()->first) + "'");
    112 
    113   if (!ForwardRefMDNodes.empty())
    114     return Error(ForwardRefMDNodes.begin()->second.second,
    115                  "use of undefined metadata '!" +
    116                  Twine(ForwardRefMDNodes.begin()->first) + "'");
    117 
    118 
    119   // Look for intrinsic functions and CallInst that need to be upgraded
    120   for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; )
    121     UpgradeCallsToIntrinsic(FI++); // must be post-increment, as we remove
    122 
    123   return false;
    124 }
    125 
    126 bool LLParser::ResolveForwardRefBlockAddresses(Function *TheFn,
    127                              std::vector<std::pair<ValID, GlobalValue*> > &Refs,
    128                                                PerFunctionState *PFS) {
    129   // Loop over all the references, resolving them.
    130   for (unsigned i = 0, e = Refs.size(); i != e; ++i) {
    131     BasicBlock *Res;
    132     if (PFS) {
    133       if (Refs[i].first.Kind == ValID::t_LocalName)
    134         Res = PFS->GetBB(Refs[i].first.StrVal, Refs[i].first.Loc);
    135       else
    136         Res = PFS->GetBB(Refs[i].first.UIntVal, Refs[i].first.Loc);
    137     } else if (Refs[i].first.Kind == ValID::t_LocalID) {
    138       return Error(Refs[i].first.Loc,
    139        "cannot take address of numeric label after the function is defined");
    140     } else {
    141       Res = dyn_cast_or_null<BasicBlock>(
    142                      TheFn->getValueSymbolTable().lookup(Refs[i].first.StrVal));
    143     }
    144 
    145     if (Res == 0)
    146       return Error(Refs[i].first.Loc,
    147                    "referenced value is not a basic block");
    148 
    149     // Get the BlockAddress for this and update references to use it.
    150     BlockAddress *BA = BlockAddress::get(TheFn, Res);
    151     Refs[i].second->replaceAllUsesWith(BA);
    152     Refs[i].second->eraseFromParent();
    153   }
    154   return false;
    155 }
    156 
    157 
    158 //===----------------------------------------------------------------------===//
    159 // Top-Level Entities
    160 //===----------------------------------------------------------------------===//
    161 
    162 bool LLParser::ParseTopLevelEntities() {
    163   while (1) {
    164     switch (Lex.getKind()) {
    165     default:         return TokError("expected top-level entity");
    166     case lltok::Eof: return false;
    167     case lltok::kw_declare: if (ParseDeclare()) return true; break;
    168     case lltok::kw_define:  if (ParseDefine()) return true; break;
    169     case lltok::kw_module:  if (ParseModuleAsm()) return true; break;
    170     case lltok::kw_target:  if (ParseTargetDefinition()) return true; break;
    171     case lltok::kw_deplibs: if (ParseDepLibs()) return true; break;
    172     case lltok::LocalVarID: if (ParseUnnamedType()) return true; break;
    173     case lltok::LocalVar:   if (ParseNamedType()) return true; break;
    174     case lltok::GlobalID:   if (ParseUnnamedGlobal()) return true; break;
    175     case lltok::GlobalVar:  if (ParseNamedGlobal()) return true; break;
    176     case lltok::exclaim:    if (ParseStandaloneMetadata()) return true; break;
    177     case lltok::MetadataVar: if (ParseNamedMetadata()) return true; break;
    178 
    179     // The Global variable production with no name can have many different
    180     // optional leading prefixes, the production is:
    181     // GlobalVar ::= OptionalLinkage OptionalVisibility OptionalThreadLocal
    182     //               OptionalAddrSpace OptionalUnNammedAddr
    183     //               ('constant'|'global') ...
    184     case lltok::kw_private:             // OptionalLinkage
    185     case lltok::kw_linker_private:      // OptionalLinkage
    186     case lltok::kw_linker_private_weak: // OptionalLinkage
    187     case lltok::kw_linker_private_weak_def_auto: // FIXME: backwards compat.
    188     case lltok::kw_internal:            // OptionalLinkage
    189     case lltok::kw_weak:                // OptionalLinkage
    190     case lltok::kw_weak_odr:            // OptionalLinkage
    191     case lltok::kw_linkonce:            // OptionalLinkage
    192     case lltok::kw_linkonce_odr:        // OptionalLinkage
    193     case lltok::kw_linkonce_odr_auto_hide: // OptionalLinkage
    194     case lltok::kw_appending:           // OptionalLinkage
    195     case lltok::kw_dllexport:           // OptionalLinkage
    196     case lltok::kw_common:              // OptionalLinkage
    197     case lltok::kw_dllimport:           // OptionalLinkage
    198     case lltok::kw_extern_weak:         // OptionalLinkage
    199     case lltok::kw_external: {          // OptionalLinkage
    200       unsigned Linkage, Visibility;
    201       if (ParseOptionalLinkage(Linkage) ||
    202           ParseOptionalVisibility(Visibility) ||
    203           ParseGlobal("", SMLoc(), Linkage, true, Visibility))
    204         return true;
    205       break;
    206     }
    207     case lltok::kw_default:       // OptionalVisibility
    208     case lltok::kw_hidden:        // OptionalVisibility
    209     case lltok::kw_protected: {   // OptionalVisibility
    210       unsigned Visibility;
    211       if (ParseOptionalVisibility(Visibility) ||
    212           ParseGlobal("", SMLoc(), 0, false, Visibility))
    213         return true;
    214       break;
    215     }
    216 
    217     case lltok::kw_thread_local:  // OptionalThreadLocal
    218     case lltok::kw_addrspace:     // OptionalAddrSpace
    219     case lltok::kw_constant:      // GlobalType
    220     case lltok::kw_global:        // GlobalType
    221       if (ParseGlobal("", SMLoc(), 0, false, 0)) return true;
    222       break;
    223     }
    224   }
    225 }
    226 
    227 
    228 /// toplevelentity
    229 ///   ::= 'module' 'asm' STRINGCONSTANT
    230 bool LLParser::ParseModuleAsm() {
    231   assert(Lex.getKind() == lltok::kw_module);
    232   Lex.Lex();
    233 
    234   std::string AsmStr;
    235   if (ParseToken(lltok::kw_asm, "expected 'module asm'") ||
    236       ParseStringConstant(AsmStr)) return true;
    237 
    238   M->appendModuleInlineAsm(AsmStr);
    239   return false;
    240 }
    241 
    242 /// toplevelentity
    243 ///   ::= 'target' 'triple' '=' STRINGCONSTANT
    244 ///   ::= 'target' 'datalayout' '=' STRINGCONSTANT
    245 bool LLParser::ParseTargetDefinition() {
    246   assert(Lex.getKind() == lltok::kw_target);
    247   std::string Str;
    248   switch (Lex.Lex()) {
    249   default: return TokError("unknown target property");
    250   case lltok::kw_triple:
    251     Lex.Lex();
    252     if (ParseToken(lltok::equal, "expected '=' after target triple") ||
    253         ParseStringConstant(Str))
    254       return true;
    255     M->setTargetTriple(Str);
    256     return false;
    257   case lltok::kw_datalayout:
    258     Lex.Lex();
    259     if (ParseToken(lltok::equal, "expected '=' after target datalayout") ||
    260         ParseStringConstant(Str))
    261       return true;
    262     M->setDataLayout(Str);
    263     return false;
    264   }
    265 }
    266 
    267 /// toplevelentity
    268 ///   ::= 'deplibs' '=' '[' ']'
    269 ///   ::= 'deplibs' '=' '[' STRINGCONSTANT (',' STRINGCONSTANT)* ']'
    270 bool LLParser::ParseDepLibs() {
    271   assert(Lex.getKind() == lltok::kw_deplibs);
    272   Lex.Lex();
    273   if (ParseToken(lltok::equal, "expected '=' after deplibs") ||
    274       ParseToken(lltok::lsquare, "expected '=' after deplibs"))
    275     return true;
    276 
    277   if (EatIfPresent(lltok::rsquare))
    278     return false;
    279 
    280   std::string Str;
    281   if (ParseStringConstant(Str)) return true;
    282   M->addLibrary(Str);
    283 
    284   while (EatIfPresent(lltok::comma)) {
    285     if (ParseStringConstant(Str)) return true;
    286     M->addLibrary(Str);
    287   }
    288 
    289   return ParseToken(lltok::rsquare, "expected ']' at end of list");
    290 }
    291 
    292 /// ParseUnnamedType:
    293 ///   ::= LocalVarID '=' 'type' type
    294 bool LLParser::ParseUnnamedType() {
    295   LocTy TypeLoc = Lex.getLoc();
    296   unsigned TypeID = Lex.getUIntVal();
    297   Lex.Lex(); // eat LocalVarID;
    298 
    299   if (ParseToken(lltok::equal, "expected '=' after name") ||
    300       ParseToken(lltok::kw_type, "expected 'type' after '='"))
    301     return true;
    302 
    303   if (TypeID >= NumberedTypes.size())
    304     NumberedTypes.resize(TypeID+1);
    305 
    306   Type *Result = 0;
    307   if (ParseStructDefinition(TypeLoc, "",
    308                             NumberedTypes[TypeID], Result)) return true;
    309 
    310   if (!isa<StructType>(Result)) {
    311     std::pair<Type*, LocTy> &Entry = NumberedTypes[TypeID];
    312     if (Entry.first)
    313       return Error(TypeLoc, "non-struct types may not be recursive");
    314     Entry.first = Result;
    315     Entry.second = SMLoc();
    316   }
    317 
    318   return false;
    319 }
    320 
    321 
    322 /// toplevelentity
    323 ///   ::= LocalVar '=' 'type' type
    324 bool LLParser::ParseNamedType() {
    325   std::string Name = Lex.getStrVal();
    326   LocTy NameLoc = Lex.getLoc();
    327   Lex.Lex();  // eat LocalVar.
    328 
    329   if (ParseToken(lltok::equal, "expected '=' after name") ||
    330       ParseToken(lltok::kw_type, "expected 'type' after name"))
    331     return true;
    332 
    333   Type *Result = 0;
    334   if (ParseStructDefinition(NameLoc, Name,
    335                             NamedTypes[Name], Result)) return true;
    336 
    337   if (!isa<StructType>(Result)) {
    338     std::pair<Type*, LocTy> &Entry = NamedTypes[Name];
    339     if (Entry.first)
    340       return Error(NameLoc, "non-struct types may not be recursive");
    341     Entry.first = Result;
    342     Entry.second = SMLoc();
    343   }
    344 
    345   return false;
    346 }
    347 
    348 
    349 /// toplevelentity
    350 ///   ::= 'declare' FunctionHeader
    351 bool LLParser::ParseDeclare() {
    352   assert(Lex.getKind() == lltok::kw_declare);
    353   Lex.Lex();
    354 
    355   Function *F;
    356   return ParseFunctionHeader(F, false);
    357 }
    358 
    359 /// toplevelentity
    360 ///   ::= 'define' FunctionHeader '{' ...
    361 bool LLParser::ParseDefine() {
    362   assert(Lex.getKind() == lltok::kw_define);
    363   Lex.Lex();
    364 
    365   Function *F;
    366   return ParseFunctionHeader(F, true) ||
    367          ParseFunctionBody(*F);
    368 }
    369 
    370 /// ParseGlobalType
    371 ///   ::= 'constant'
    372 ///   ::= 'global'
    373 bool LLParser::ParseGlobalType(bool &IsConstant) {
    374   if (Lex.getKind() == lltok::kw_constant)
    375     IsConstant = true;
    376   else if (Lex.getKind() == lltok::kw_global)
    377     IsConstant = false;
    378   else {
    379     IsConstant = false;
    380     return TokError("expected 'global' or 'constant'");
    381   }
    382   Lex.Lex();
    383   return false;
    384 }
    385 
    386 /// ParseUnnamedGlobal:
    387 ///   OptionalVisibility ALIAS ...
    388 ///   OptionalLinkage OptionalVisibility ...   -> global variable
    389 ///   GlobalID '=' OptionalVisibility ALIAS ...
    390 ///   GlobalID '=' OptionalLinkage OptionalVisibility ...   -> global variable
    391 bool LLParser::ParseUnnamedGlobal() {
    392   unsigned VarID = NumberedVals.size();
    393   std::string Name;
    394   LocTy NameLoc = Lex.getLoc();
    395 
    396   // Handle the GlobalID form.
    397   if (Lex.getKind() == lltok::GlobalID) {
    398     if (Lex.getUIntVal() != VarID)
    399       return Error(Lex.getLoc(), "variable expected to be numbered '%" +
    400                    Twine(VarID) + "'");
    401     Lex.Lex(); // eat GlobalID;
    402 
    403     if (ParseToken(lltok::equal, "expected '=' after name"))
    404       return true;
    405   }
    406 
    407   bool HasLinkage;
    408   unsigned Linkage, Visibility;
    409   if (ParseOptionalLinkage(Linkage, HasLinkage) ||
    410       ParseOptionalVisibility(Visibility))
    411     return true;
    412 
    413   if (HasLinkage || Lex.getKind() != lltok::kw_alias)
    414     return ParseGlobal(Name, NameLoc, Linkage, HasLinkage, Visibility);
    415   return ParseAlias(Name, NameLoc, Visibility);
    416 }
    417 
    418 /// ParseNamedGlobal:
    419 ///   GlobalVar '=' OptionalVisibility ALIAS ...
    420 ///   GlobalVar '=' OptionalLinkage OptionalVisibility ...   -> global variable
    421 bool LLParser::ParseNamedGlobal() {
    422   assert(Lex.getKind() == lltok::GlobalVar);
    423   LocTy NameLoc = Lex.getLoc();
    424   std::string Name = Lex.getStrVal();
    425   Lex.Lex();
    426 
    427   bool HasLinkage;
    428   unsigned Linkage, Visibility;
    429   if (ParseToken(lltok::equal, "expected '=' in global variable") ||
    430       ParseOptionalLinkage(Linkage, HasLinkage) ||
    431       ParseOptionalVisibility(Visibility))
    432     return true;
    433 
    434   if (HasLinkage || Lex.getKind() != lltok::kw_alias)
    435     return ParseGlobal(Name, NameLoc, Linkage, HasLinkage, Visibility);
    436   return ParseAlias(Name, NameLoc, Visibility);
    437 }
    438 
    439 // MDString:
    440 //   ::= '!' STRINGCONSTANT
    441 bool LLParser::ParseMDString(MDString *&Result) {
    442   std::string Str;
    443   if (ParseStringConstant(Str)) return true;
    444   Result = MDString::get(Context, Str);
    445   return false;
    446 }
    447 
    448 // MDNode:
    449 //   ::= '!' MDNodeNumber
    450 //
    451 /// This version of ParseMDNodeID returns the slot number and null in the case
    452 /// of a forward reference.
    453 bool LLParser::ParseMDNodeID(MDNode *&Result, unsigned &SlotNo) {
    454   // !{ ..., !42, ... }
    455   if (ParseUInt32(SlotNo)) return true;
    456 
    457   // Check existing MDNode.
    458   if (SlotNo < NumberedMetadata.size() && NumberedMetadata[SlotNo] != 0)
    459     Result = NumberedMetadata[SlotNo];
    460   else
    461     Result = 0;
    462   return false;
    463 }
    464 
    465 bool LLParser::ParseMDNodeID(MDNode *&Result) {
    466   // !{ ..., !42, ... }
    467   unsigned MID = 0;
    468   if (ParseMDNodeID(Result, MID)) return true;
    469 
    470   // If not a forward reference, just return it now.
    471   if (Result) return false;
    472 
    473   // Otherwise, create MDNode forward reference.
    474   MDNode *FwdNode = MDNode::getTemporary(Context, ArrayRef<Value*>());
    475   ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
    476 
    477   if (NumberedMetadata.size() <= MID)
    478     NumberedMetadata.resize(MID+1);
    479   NumberedMetadata[MID] = FwdNode;
    480   Result = FwdNode;
    481   return false;
    482 }
    483 
    484 /// ParseNamedMetadata:
    485 ///   !foo = !{ !1, !2 }
    486 bool LLParser::ParseNamedMetadata() {
    487   assert(Lex.getKind() == lltok::MetadataVar);
    488   std::string Name = Lex.getStrVal();
    489   Lex.Lex();
    490 
    491   if (ParseToken(lltok::equal, "expected '=' here") ||
    492       ParseToken(lltok::exclaim, "Expected '!' here") ||
    493       ParseToken(lltok::lbrace, "Expected '{' here"))
    494     return true;
    495 
    496   NamedMDNode *NMD = M->getOrInsertNamedMetadata(Name);
    497   if (Lex.getKind() != lltok::rbrace)
    498     do {
    499       if (ParseToken(lltok::exclaim, "Expected '!' here"))
    500         return true;
    501 
    502       MDNode *N = 0;
    503       if (ParseMDNodeID(N)) return true;
    504       NMD->addOperand(N);
    505     } while (EatIfPresent(lltok::comma));
    506 
    507   if (ParseToken(lltok::rbrace, "expected end of metadata node"))
    508     return true;
    509 
    510   return false;
    511 }
    512 
    513 /// ParseStandaloneMetadata:
    514 ///   !42 = !{...}
    515 bool LLParser::ParseStandaloneMetadata() {
    516   assert(Lex.getKind() == lltok::exclaim);
    517   Lex.Lex();
    518   unsigned MetadataID = 0;
    519 
    520   LocTy TyLoc;
    521   Type *Ty = 0;
    522   SmallVector<Value *, 16> Elts;
    523   if (ParseUInt32(MetadataID) ||
    524       ParseToken(lltok::equal, "expected '=' here") ||
    525       ParseType(Ty, TyLoc) ||
    526       ParseToken(lltok::exclaim, "Expected '!' here") ||
    527       ParseToken(lltok::lbrace, "Expected '{' here") ||
    528       ParseMDNodeVector(Elts, NULL) ||
    529       ParseToken(lltok::rbrace, "expected end of metadata node"))
    530     return true;
    531 
    532   MDNode *Init = MDNode::get(Context, Elts);
    533 
    534   // See if this was forward referenced, if so, handle it.
    535   std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator
    536     FI = ForwardRefMDNodes.find(MetadataID);
    537   if (FI != ForwardRefMDNodes.end()) {
    538     MDNode *Temp = FI->second.first;
    539     Temp->replaceAllUsesWith(Init);
    540     MDNode::deleteTemporary(Temp);
    541     ForwardRefMDNodes.erase(FI);
    542 
    543     assert(NumberedMetadata[MetadataID] == Init && "Tracking VH didn't work");
    544   } else {
    545     if (MetadataID >= NumberedMetadata.size())
    546       NumberedMetadata.resize(MetadataID+1);
    547 
    548     if (NumberedMetadata[MetadataID] != 0)
    549       return TokError("Metadata id is already used");
    550     NumberedMetadata[MetadataID] = Init;
    551   }
    552 
    553   return false;
    554 }
    555 
    556 /// ParseAlias:
    557 ///   ::= GlobalVar '=' OptionalVisibility 'alias' OptionalLinkage Aliasee
    558 /// Aliasee
    559 ///   ::= TypeAndValue
    560 ///   ::= 'bitcast' '(' TypeAndValue 'to' Type ')'
    561 ///   ::= 'getelementptr' 'inbounds'? '(' ... ')'
    562 ///
    563 /// Everything through visibility has already been parsed.
    564 ///
    565 bool LLParser::ParseAlias(const std::string &Name, LocTy NameLoc,
    566                           unsigned Visibility) {
    567   assert(Lex.getKind() == lltok::kw_alias);
    568   Lex.Lex();
    569   unsigned Linkage;
    570   LocTy LinkageLoc = Lex.getLoc();
    571   if (ParseOptionalLinkage(Linkage))
    572     return true;
    573 
    574   if (Linkage != GlobalValue::ExternalLinkage &&
    575       Linkage != GlobalValue::WeakAnyLinkage &&
    576       Linkage != GlobalValue::WeakODRLinkage &&
    577       Linkage != GlobalValue::InternalLinkage &&
    578       Linkage != GlobalValue::PrivateLinkage &&
    579       Linkage != GlobalValue::LinkerPrivateLinkage &&
    580       Linkage != GlobalValue::LinkerPrivateWeakLinkage)
    581     return Error(LinkageLoc, "invalid linkage type for alias");
    582 
    583   Constant *Aliasee;
    584   LocTy AliaseeLoc = Lex.getLoc();
    585   if (Lex.getKind() != lltok::kw_bitcast &&
    586       Lex.getKind() != lltok::kw_getelementptr) {
    587     if (ParseGlobalTypeAndValue(Aliasee)) return true;
    588   } else {
    589     // The bitcast dest type is not present, it is implied by the dest type.
    590     ValID ID;
    591     if (ParseValID(ID)) return true;
    592     if (ID.Kind != ValID::t_Constant)
    593       return Error(AliaseeLoc, "invalid aliasee");
    594     Aliasee = ID.ConstantVal;
    595   }
    596 
    597   if (!Aliasee->getType()->isPointerTy())
    598     return Error(AliaseeLoc, "alias must have pointer type");
    599 
    600   // Okay, create the alias but do not insert it into the module yet.
    601   GlobalAlias* GA = new GlobalAlias(Aliasee->getType(),
    602                                     (GlobalValue::LinkageTypes)Linkage, Name,
    603                                     Aliasee);
    604   GA->setVisibility((GlobalValue::VisibilityTypes)Visibility);
    605 
    606   // See if this value already exists in the symbol table.  If so, it is either
    607   // a redefinition or a definition of a forward reference.
    608   if (GlobalValue *Val = M->getNamedValue(Name)) {
    609     // See if this was a redefinition.  If so, there is no entry in
    610     // ForwardRefVals.
    611     std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator
    612       I = ForwardRefVals.find(Name);
    613     if (I == ForwardRefVals.end())
    614       return Error(NameLoc, "redefinition of global named '@" + Name + "'");
    615 
    616     // Otherwise, this was a definition of forward ref.  Verify that types
    617     // agree.
    618     if (Val->getType() != GA->getType())
    619       return Error(NameLoc,
    620               "forward reference and definition of alias have different types");
    621 
    622     // If they agree, just RAUW the old value with the alias and remove the
    623     // forward ref info.
    624     Val->replaceAllUsesWith(GA);
    625     Val->eraseFromParent();
    626     ForwardRefVals.erase(I);
    627   }
    628 
    629   // Insert into the module, we know its name won't collide now.
    630   M->getAliasList().push_back(GA);
    631   assert(GA->getName() == Name && "Should not be a name conflict!");
    632 
    633   return false;
    634 }
    635 
    636 /// ParseGlobal
    637 ///   ::= GlobalVar '=' OptionalLinkage OptionalVisibility OptionalThreadLocal
    638 ///       OptionalAddrSpace OptionalUnNammedAddr GlobalType Type Const
    639 ///   ::= OptionalLinkage OptionalVisibility OptionalThreadLocal
    640 ///       OptionalAddrSpace OptionalUnNammedAddr GlobalType Type Const
    641 ///
    642 /// Everything through visibility has been parsed already.
    643 ///
    644 bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc,
    645                            unsigned Linkage, bool HasLinkage,
    646                            unsigned Visibility) {
    647   unsigned AddrSpace;
    648   bool IsConstant, UnnamedAddr;
    649   GlobalVariable::ThreadLocalMode TLM;
    650   LocTy UnnamedAddrLoc;
    651   LocTy TyLoc;
    652 
    653   Type *Ty = 0;
    654   if (ParseOptionalThreadLocal(TLM) ||
    655       ParseOptionalAddrSpace(AddrSpace) ||
    656       ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr,
    657                          &UnnamedAddrLoc) ||
    658       ParseGlobalType(IsConstant) ||
    659       ParseType(Ty, TyLoc))
    660     return true;
    661 
    662   // If the linkage is specified and is external, then no initializer is
    663   // present.
    664   Constant *Init = 0;
    665   if (!HasLinkage || (Linkage != GlobalValue::DLLImportLinkage &&
    666                       Linkage != GlobalValue::ExternalWeakLinkage &&
    667                       Linkage != GlobalValue::ExternalLinkage)) {
    668     if (ParseGlobalValue(Ty, Init))
    669       return true;
    670   }
    671 
    672   if (Ty->isFunctionTy() || Ty->isLabelTy())
    673     return Error(TyLoc, "invalid type for global variable");
    674 
    675   GlobalVariable *GV = 0;
    676 
    677   // See if the global was forward referenced, if so, use the global.
    678   if (!Name.empty()) {
    679     if (GlobalValue *GVal = M->getNamedValue(Name)) {
    680       if (!ForwardRefVals.erase(Name) || !isa<GlobalValue>(GVal))
    681         return Error(NameLoc, "redefinition of global '@" + Name + "'");
    682       GV = cast<GlobalVariable>(GVal);
    683     }
    684   } else {
    685     std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator
    686       I = ForwardRefValIDs.find(NumberedVals.size());
    687     if (I != ForwardRefValIDs.end()) {
    688       GV = cast<GlobalVariable>(I->second.first);
    689       ForwardRefValIDs.erase(I);
    690     }
    691   }
    692 
    693   if (GV == 0) {
    694     GV = new GlobalVariable(*M, Ty, false, GlobalValue::ExternalLinkage, 0,
    695                             Name, 0, GlobalVariable::NotThreadLocal,
    696                             AddrSpace);
    697   } else {
    698     if (GV->getType()->getElementType() != Ty)
    699       return Error(TyLoc,
    700             "forward reference and definition of global have different types");
    701 
    702     // Move the forward-reference to the correct spot in the module.
    703     M->getGlobalList().splice(M->global_end(), M->getGlobalList(), GV);
    704   }
    705 
    706   if (Name.empty())
    707     NumberedVals.push_back(GV);
    708 
    709   // Set the parsed properties on the global.
    710   if (Init)
    711     GV->setInitializer(Init);
    712   GV->setConstant(IsConstant);
    713   GV->setLinkage((GlobalValue::LinkageTypes)Linkage);
    714   GV->setVisibility((GlobalValue::VisibilityTypes)Visibility);
    715   GV->setThreadLocalMode(TLM);
    716   GV->setUnnamedAddr(UnnamedAddr);
    717 
    718   // Parse attributes on the global.
    719   while (Lex.getKind() == lltok::comma) {
    720     Lex.Lex();
    721 
    722     if (Lex.getKind() == lltok::kw_section) {
    723       Lex.Lex();
    724       GV->setSection(Lex.getStrVal());
    725       if (ParseToken(lltok::StringConstant, "expected global section string"))
    726         return true;
    727     } else if (Lex.getKind() == lltok::kw_align) {
    728       unsigned Alignment;
    729       if (ParseOptionalAlignment(Alignment)) return true;
    730       GV->setAlignment(Alignment);
    731     } else {
    732       TokError("unknown global variable property!");
    733     }
    734   }
    735 
    736   return false;
    737 }
    738 
    739 
    740 //===----------------------------------------------------------------------===//
    741 // GlobalValue Reference/Resolution Routines.
    742 //===----------------------------------------------------------------------===//
    743 
    744 /// GetGlobalVal - Get a value with the specified name or ID, creating a
    745 /// forward reference record if needed.  This can return null if the value
    746 /// exists but does not have the right type.
    747 GlobalValue *LLParser::GetGlobalVal(const std::string &Name, Type *Ty,
    748                                     LocTy Loc) {
    749   PointerType *PTy = dyn_cast<PointerType>(Ty);
    750   if (PTy == 0) {
    751     Error(Loc, "global variable reference must have pointer type");
    752     return 0;
    753   }
    754 
    755   // Look this name up in the normal function symbol table.
    756   GlobalValue *Val =
    757     cast_or_null<GlobalValue>(M->getValueSymbolTable().lookup(Name));
    758 
    759   // If this is a forward reference for the value, see if we already created a
    760   // forward ref record.
    761   if (Val == 0) {
    762     std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator
    763       I = ForwardRefVals.find(Name);
    764     if (I != ForwardRefVals.end())
    765       Val = I->second.first;
    766   }
    767 
    768   // If we have the value in the symbol table or fwd-ref table, return it.
    769   if (Val) {
    770     if (Val->getType() == Ty) return Val;
    771     Error(Loc, "'@" + Name + "' defined with type '" +
    772           getTypeString(Val->getType()) + "'");
    773     return 0;
    774   }
    775 
    776   // Otherwise, create a new forward reference for this value and remember it.
    777   GlobalValue *FwdVal;
    778   if (FunctionType *FT = dyn_cast<FunctionType>(PTy->getElementType()))
    779     FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, Name, M);
    780   else
    781     FwdVal = new GlobalVariable(*M, PTy->getElementType(), false,
    782                                 GlobalValue::ExternalWeakLinkage, 0, Name);
    783 
    784   ForwardRefVals[Name] = std::make_pair(FwdVal, Loc);
    785   return FwdVal;
    786 }
    787 
    788 GlobalValue *LLParser::GetGlobalVal(unsigned ID, Type *Ty, LocTy Loc) {
    789   PointerType *PTy = dyn_cast<PointerType>(Ty);
    790   if (PTy == 0) {
    791     Error(Loc, "global variable reference must have pointer type");
    792     return 0;
    793   }
    794 
    795   GlobalValue *Val = ID < NumberedVals.size() ? NumberedVals[ID] : 0;
    796 
    797   // If this is a forward reference for the value, see if we already created a
    798   // forward ref record.
    799   if (Val == 0) {
    800     std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator
    801       I = ForwardRefValIDs.find(ID);
    802     if (I != ForwardRefValIDs.end())
    803       Val = I->second.first;
    804   }
    805 
    806   // If we have the value in the symbol table or fwd-ref table, return it.
    807   if (Val) {
    808     if (Val->getType() == Ty) return Val;
    809     Error(Loc, "'@" + Twine(ID) + "' defined with type '" +
    810           getTypeString(Val->getType()) + "'");
    811     return 0;
    812   }
    813 
    814   // Otherwise, create a new forward reference for this value and remember it.
    815   GlobalValue *FwdVal;
    816   if (FunctionType *FT = dyn_cast<FunctionType>(PTy->getElementType()))
    817     FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, "", M);
    818   else
    819     FwdVal = new GlobalVariable(*M, PTy->getElementType(), false,
    820                                 GlobalValue::ExternalWeakLinkage, 0, "");
    821 
    822   ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc);
    823   return FwdVal;
    824 }
    825 
    826 
    827 //===----------------------------------------------------------------------===//
    828 // Helper Routines.
    829 //===----------------------------------------------------------------------===//
    830 
    831 /// ParseToken - If the current token has the specified kind, eat it and return
    832 /// success.  Otherwise, emit the specified error and return failure.
    833 bool LLParser::ParseToken(lltok::Kind T, const char *ErrMsg) {
    834   if (Lex.getKind() != T)
    835     return TokError(ErrMsg);
    836   Lex.Lex();
    837   return false;
    838 }
    839 
    840 /// ParseStringConstant
    841 ///   ::= StringConstant
    842 bool LLParser::ParseStringConstant(std::string &Result) {
    843   if (Lex.getKind() != lltok::StringConstant)
    844     return TokError("expected string constant");
    845   Result = Lex.getStrVal();
    846   Lex.Lex();
    847   return false;
    848 }
    849 
    850 /// ParseUInt32
    851 ///   ::= uint32
    852 bool LLParser::ParseUInt32(unsigned &Val) {
    853   if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned())
    854     return TokError("expected integer");
    855   uint64_t Val64 = Lex.getAPSIntVal().getLimitedValue(0xFFFFFFFFULL+1);
    856   if (Val64 != unsigned(Val64))
    857     return TokError("expected 32-bit integer (too large)");
    858   Val = Val64;
    859   Lex.Lex();
    860   return false;
    861 }
    862 
    863 /// ParseTLSModel
    864 ///   := 'localdynamic'
    865 ///   := 'initialexec'
    866 ///   := 'localexec'
    867 bool LLParser::ParseTLSModel(GlobalVariable::ThreadLocalMode &TLM) {
    868   switch (Lex.getKind()) {
    869     default:
    870       return TokError("expected localdynamic, initialexec or localexec");
    871     case lltok::kw_localdynamic:
    872       TLM = GlobalVariable::LocalDynamicTLSModel;
    873       break;
    874     case lltok::kw_initialexec:
    875       TLM = GlobalVariable::InitialExecTLSModel;
    876       break;
    877     case lltok::kw_localexec:
    878       TLM = GlobalVariable::LocalExecTLSModel;
    879       break;
    880   }
    881 
    882   Lex.Lex();
    883   return false;
    884 }
    885 
    886 /// ParseOptionalThreadLocal
    887 ///   := /*empty*/
    888 ///   := 'thread_local'
    889 ///   := 'thread_local' '(' tlsmodel ')'
    890 bool LLParser::ParseOptionalThreadLocal(GlobalVariable::ThreadLocalMode &TLM) {
    891   TLM = GlobalVariable::NotThreadLocal;
    892   if (!EatIfPresent(lltok::kw_thread_local))
    893     return false;
    894 
    895   TLM = GlobalVariable::GeneralDynamicTLSModel;
    896   if (Lex.getKind() == lltok::lparen) {
    897     Lex.Lex();
    898     return ParseTLSModel(TLM) ||
    899       ParseToken(lltok::rparen, "expected ')' after thread local model");
    900   }
    901   return false;
    902 }
    903 
    904 /// ParseOptionalAddrSpace
    905 ///   := /*empty*/
    906 ///   := 'addrspace' '(' uint32 ')'
    907 bool LLParser::ParseOptionalAddrSpace(unsigned &AddrSpace) {
    908   AddrSpace = 0;
    909   if (!EatIfPresent(lltok::kw_addrspace))
    910     return false;
    911   return ParseToken(lltok::lparen, "expected '(' in address space") ||
    912          ParseUInt32(AddrSpace) ||
    913          ParseToken(lltok::rparen, "expected ')' in address space");
    914 }
    915 
    916 /// ParseOptionalAttrs - Parse a potentially empty attribute list.  AttrKind
    917 /// indicates what kind of attribute list this is: 0: function arg, 1: result,
    918 /// 2: function attr.
    919 bool LLParser::ParseOptionalAttrs(Attributes &Attrs, unsigned AttrKind) {
    920   Attrs = Attribute::None;
    921   LocTy AttrLoc = Lex.getLoc();
    922 
    923   while (1) {
    924     switch (Lex.getKind()) {
    925     default:  // End of attributes.
    926       if (AttrKind != 2 && (Attrs & Attribute::FunctionOnly))
    927         return Error(AttrLoc, "invalid use of function-only attribute");
    928 
    929       // As a hack, we allow "align 2" on functions as a synonym for
    930       // "alignstack 2".
    931       if (AttrKind == 2 &&
    932           (Attrs & ~(Attribute::FunctionOnly | Attribute::Alignment)))
    933         return Error(AttrLoc, "invalid use of attribute on a function");
    934 
    935       if (AttrKind != 0 && (Attrs & Attribute::ParameterOnly))
    936         return Error(AttrLoc, "invalid use of parameter-only attribute");
    937 
    938       return false;
    939     case lltok::kw_zeroext:         Attrs |= Attribute::ZExt; break;
    940     case lltok::kw_signext:         Attrs |= Attribute::SExt; break;
    941     case lltok::kw_inreg:           Attrs |= Attribute::InReg; break;
    942     case lltok::kw_sret:            Attrs |= Attribute::StructRet; break;
    943     case lltok::kw_noalias:         Attrs |= Attribute::NoAlias; break;
    944     case lltok::kw_nocapture:       Attrs |= Attribute::NoCapture; break;
    945     case lltok::kw_byval:           Attrs |= Attribute::ByVal; break;
    946     case lltok::kw_nest:            Attrs |= Attribute::Nest; break;
    947 
    948     case lltok::kw_noreturn:        Attrs |= Attribute::NoReturn; break;
    949     case lltok::kw_nounwind:        Attrs |= Attribute::NoUnwind; break;
    950     case lltok::kw_uwtable:         Attrs |= Attribute::UWTable; break;
    951     case lltok::kw_returns_twice:   Attrs |= Attribute::ReturnsTwice; break;
    952     case lltok::kw_noinline:        Attrs |= Attribute::NoInline; break;
    953     case lltok::kw_readnone:        Attrs |= Attribute::ReadNone; break;
    954     case lltok::kw_readonly:        Attrs |= Attribute::ReadOnly; break;
    955     case lltok::kw_inlinehint:      Attrs |= Attribute::InlineHint; break;
    956     case lltok::kw_alwaysinline:    Attrs |= Attribute::AlwaysInline; break;
    957     case lltok::kw_optsize:         Attrs |= Attribute::OptimizeForSize; break;
    958     case lltok::kw_ssp:             Attrs |= Attribute::StackProtect; break;
    959     case lltok::kw_sspreq:          Attrs |= Attribute::StackProtectReq; break;
    960     case lltok::kw_noredzone:       Attrs |= Attribute::NoRedZone; break;
    961     case lltok::kw_noimplicitfloat: Attrs |= Attribute::NoImplicitFloat; break;
    962     case lltok::kw_naked:           Attrs |= Attribute::Naked; break;
    963     case lltok::kw_nonlazybind:     Attrs |= Attribute::NonLazyBind; break;
    964     case lltok::kw_address_safety:  Attrs |= Attribute::AddressSafety; break;
    965 
    966     case lltok::kw_alignstack: {
    967       unsigned Alignment;
    968       if (ParseOptionalStackAlignment(Alignment))
    969         return true;
    970       Attrs |= Attribute::constructStackAlignmentFromInt(Alignment);
    971       continue;
    972     }
    973 
    974     case lltok::kw_align: {
    975       unsigned Alignment;
    976       if (ParseOptionalAlignment(Alignment))
    977         return true;
    978       Attrs |= Attribute::constructAlignmentFromInt(Alignment);
    979       continue;
    980     }
    981 
    982     }
    983     Lex.Lex();
    984   }
    985 }
    986 
    987 /// ParseOptionalLinkage
    988 ///   ::= /*empty*/
    989 ///   ::= 'private'
    990 ///   ::= 'linker_private'
    991 ///   ::= 'linker_private_weak'
    992 ///   ::= 'internal'
    993 ///   ::= 'weak'
    994 ///   ::= 'weak_odr'
    995 ///   ::= 'linkonce'
    996 ///   ::= 'linkonce_odr'
    997 ///   ::= 'linkonce_odr_auto_hide'
    998 ///   ::= 'available_externally'
    999 ///   ::= 'appending'
   1000 ///   ::= 'dllexport'
   1001 ///   ::= 'common'
   1002 ///   ::= 'dllimport'
   1003 ///   ::= 'extern_weak'
   1004 ///   ::= 'external'
   1005 bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) {
   1006   HasLinkage = false;
   1007   switch (Lex.getKind()) {
   1008   default:                       Res=GlobalValue::ExternalLinkage; return false;
   1009   case lltok::kw_private:        Res = GlobalValue::PrivateLinkage;       break;
   1010   case lltok::kw_linker_private: Res = GlobalValue::LinkerPrivateLinkage; break;
   1011   case lltok::kw_linker_private_weak:
   1012     Res = GlobalValue::LinkerPrivateWeakLinkage;
   1013     break;
   1014   case lltok::kw_internal:       Res = GlobalValue::InternalLinkage;      break;
   1015   case lltok::kw_weak:           Res = GlobalValue::WeakAnyLinkage;       break;
   1016   case lltok::kw_weak_odr:       Res = GlobalValue::WeakODRLinkage;       break;
   1017   case lltok::kw_linkonce:       Res = GlobalValue::LinkOnceAnyLinkage;   break;
   1018   case lltok::kw_linkonce_odr:   Res = GlobalValue::LinkOnceODRLinkage;   break;
   1019   case lltok::kw_linkonce_odr_auto_hide:
   1020   case lltok::kw_linker_private_weak_def_auto: // FIXME: For backwards compat.
   1021     Res = GlobalValue::LinkOnceODRAutoHideLinkage;
   1022     break;
   1023   case lltok::kw_available_externally:
   1024     Res = GlobalValue::AvailableExternallyLinkage;
   1025     break;
   1026   case lltok::kw_appending:      Res = GlobalValue::AppendingLinkage;     break;
   1027   case lltok::kw_dllexport:      Res = GlobalValue::DLLExportLinkage;     break;
   1028   case lltok::kw_common:         Res = GlobalValue::CommonLinkage;        break;
   1029   case lltok::kw_dllimport:      Res = GlobalValue::DLLImportLinkage;     break;
   1030   case lltok::kw_extern_weak:    Res = GlobalValue::ExternalWeakLinkage;  break;
   1031   case lltok::kw_external:       Res = GlobalValue::ExternalLinkage;      break;
   1032   }
   1033   Lex.Lex();
   1034   HasLinkage = true;
   1035   return false;
   1036 }
   1037 
   1038 /// ParseOptionalVisibility
   1039 ///   ::= /*empty*/
   1040 ///   ::= 'default'
   1041 ///   ::= 'hidden'
   1042 ///   ::= 'protected'
   1043 ///
   1044 bool LLParser::ParseOptionalVisibility(unsigned &Res) {
   1045   switch (Lex.getKind()) {
   1046   default:                  Res = GlobalValue::DefaultVisibility; return false;
   1047   case lltok::kw_default:   Res = GlobalValue::DefaultVisibility; break;
   1048   case lltok::kw_hidden:    Res = GlobalValue::HiddenVisibility; break;
   1049   case lltok::kw_protected: Res = GlobalValue::ProtectedVisibility; break;
   1050   }
   1051   Lex.Lex();
   1052   return false;
   1053 }
   1054 
   1055 /// ParseOptionalCallingConv
   1056 ///   ::= /*empty*/
   1057 ///   ::= 'ccc'
   1058 ///   ::= 'fastcc'
   1059 ///   ::= 'coldcc'
   1060 ///   ::= 'x86_stdcallcc'
   1061 ///   ::= 'x86_fastcallcc'
   1062 ///   ::= 'x86_thiscallcc'
   1063 ///   ::= 'arm_apcscc'
   1064 ///   ::= 'arm_aapcscc'
   1065 ///   ::= 'arm_aapcs_vfpcc'
   1066 ///   ::= 'msp430_intrcc'
   1067 ///   ::= 'ptx_kernel'
   1068 ///   ::= 'ptx_device'
   1069 ///   ::= 'cc' UINT
   1070 ///
   1071 bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
   1072   switch (Lex.getKind()) {
   1073   default:                       CC = CallingConv::C; return false;
   1074   case lltok::kw_ccc:            CC = CallingConv::C; break;
   1075   case lltok::kw_fastcc:         CC = CallingConv::Fast; break;
   1076   case lltok::kw_coldcc:         CC = CallingConv::Cold; break;
   1077   case lltok::kw_x86_stdcallcc:  CC = CallingConv::X86_StdCall; break;
   1078   case lltok::kw_x86_fastcallcc: CC = CallingConv::X86_FastCall; break;
   1079   case lltok::kw_x86_thiscallcc: CC = CallingConv::X86_ThisCall; break;
   1080   case lltok::kw_arm_apcscc:     CC = CallingConv::ARM_APCS; break;
   1081   case lltok::kw_arm_aapcscc:    CC = CallingConv::ARM_AAPCS; break;
   1082   case lltok::kw_arm_aapcs_vfpcc:CC = CallingConv::ARM_AAPCS_VFP; break;
   1083   case lltok::kw_msp430_intrcc:  CC = CallingConv::MSP430_INTR; break;
   1084   case lltok::kw_ptx_kernel:     CC = CallingConv::PTX_Kernel; break;
   1085   case lltok::kw_ptx_device:     CC = CallingConv::PTX_Device; break;
   1086   case lltok::kw_cc: {
   1087       unsigned ArbitraryCC;
   1088       Lex.Lex();
   1089       if (ParseUInt32(ArbitraryCC))
   1090         return true;
   1091       CC = static_cast<CallingConv::ID>(ArbitraryCC);
   1092       return false;
   1093     }
   1094   }
   1095 
   1096   Lex.Lex();
   1097   return false;
   1098 }
   1099 
   1100 /// ParseInstructionMetadata
   1101 ///   ::= !dbg !42 (',' !dbg !57)*
   1102 bool LLParser::ParseInstructionMetadata(Instruction *Inst,
   1103                                         PerFunctionState *PFS) {
   1104   do {
   1105     if (Lex.getKind() != lltok::MetadataVar)
   1106       return TokError("expected metadata after comma");
   1107 
   1108     std::string Name = Lex.getStrVal();
   1109     unsigned MDK = M->getMDKindID(Name);
   1110     Lex.Lex();
   1111 
   1112     MDNode *Node;
   1113     SMLoc Loc = Lex.getLoc();
   1114 
   1115     if (ParseToken(lltok::exclaim, "expected '!' here"))
   1116       return true;
   1117 
   1118     // This code is similar to that of ParseMetadataValue, however it needs to
   1119     // have special-case code for a forward reference; see the comments on
   1120     // ForwardRefInstMetadata for details. Also, MDStrings are not supported
   1121     // at the top level here.
   1122     if (Lex.getKind() == lltok::lbrace) {
   1123       ValID ID;
   1124       if (ParseMetadataListValue(ID, PFS))
   1125         return true;
   1126       assert(ID.Kind == ValID::t_MDNode);
   1127       Inst->setMetadata(MDK, ID.MDNodeVal);
   1128     } else {
   1129       unsigned NodeID = 0;
   1130       if (ParseMDNodeID(Node, NodeID))
   1131         return true;
   1132       if (Node) {
   1133         // If we got the node, add it to the instruction.
   1134         Inst->setMetadata(MDK, Node);
   1135       } else {
   1136         MDRef R = { Loc, MDK, NodeID };
   1137         // Otherwise, remember that this should be resolved later.
   1138         ForwardRefInstMetadata[Inst].push_back(R);
   1139       }
   1140     }
   1141 
   1142     // If this is the end of the list, we're done.
   1143   } while (EatIfPresent(lltok::comma));
   1144   return false;
   1145 }
   1146 
   1147 /// ParseOptionalAlignment
   1148 ///   ::= /* empty */
   1149 ///   ::= 'align' 4
   1150 bool LLParser::ParseOptionalAlignment(unsigned &Alignment) {
   1151   Alignment = 0;
   1152   if (!EatIfPresent(lltok::kw_align))
   1153     return false;
   1154   LocTy AlignLoc = Lex.getLoc();
   1155   if (ParseUInt32(Alignment)) return true;
   1156   if (!isPowerOf2_32(Alignment))
   1157     return Error(AlignLoc, "alignment is not a power of two");
   1158   if (Alignment > Value::MaximumAlignment)
   1159     return Error(AlignLoc, "huge alignments are not supported yet");
   1160   return false;
   1161 }
   1162 
   1163 /// ParseOptionalCommaAlign
   1164 ///   ::=
   1165 ///   ::= ',' align 4
   1166 ///
   1167 /// This returns with AteExtraComma set to true if it ate an excess comma at the
   1168 /// end.
   1169 bool LLParser::ParseOptionalCommaAlign(unsigned &Alignment,
   1170                                        bool &AteExtraComma) {
   1171   AteExtraComma = false;
   1172   while (EatIfPresent(lltok::comma)) {
   1173     // Metadata at the end is an early exit.
   1174     if (Lex.getKind() == lltok::MetadataVar) {
   1175       AteExtraComma = true;
   1176       return false;
   1177     }
   1178 
   1179     if (Lex.getKind() != lltok::kw_align)
   1180       return Error(Lex.getLoc(), "expected metadata or 'align'");
   1181 
   1182     if (ParseOptionalAlignment(Alignment)) return true;
   1183   }
   1184 
   1185   return false;
   1186 }
   1187 
   1188 /// ParseScopeAndOrdering
   1189 ///   if isAtomic: ::= 'singlethread'? AtomicOrdering
   1190 ///   else: ::=
   1191 ///
   1192 /// This sets Scope and Ordering to the parsed values.
   1193 bool LLParser::ParseScopeAndOrdering(bool isAtomic, SynchronizationScope &Scope,
   1194                                      AtomicOrdering &Ordering) {
   1195   if (!isAtomic)
   1196     return false;
   1197 
   1198   Scope = CrossThread;
   1199   if (EatIfPresent(lltok::kw_singlethread))
   1200     Scope = SingleThread;
   1201   switch (Lex.getKind()) {
   1202   default: return TokError("Expected ordering on atomic instruction");
   1203   case lltok::kw_unordered: Ordering = Unordered; break;
   1204   case lltok::kw_monotonic: Ordering = Monotonic; break;
   1205   case lltok::kw_acquire: Ordering = Acquire; break;
   1206   case lltok::kw_release: Ordering = Release; break;
   1207   case lltok::kw_acq_rel: Ordering = AcquireRelease; break;
   1208   case lltok::kw_seq_cst: Ordering = SequentiallyConsistent; break;
   1209   }
   1210   Lex.Lex();
   1211   return false;
   1212 }
   1213 
   1214 /// ParseOptionalStackAlignment
   1215 ///   ::= /* empty */
   1216 ///   ::= 'alignstack' '(' 4 ')'
   1217 bool LLParser::ParseOptionalStackAlignment(unsigned &Alignment) {
   1218   Alignment = 0;
   1219   if (!EatIfPresent(lltok::kw_alignstack))
   1220     return false;
   1221   LocTy ParenLoc = Lex.getLoc();
   1222   if (!EatIfPresent(lltok::lparen))
   1223     return Error(ParenLoc, "expected '('");
   1224   LocTy AlignLoc = Lex.getLoc();
   1225   if (ParseUInt32(Alignment)) return true;
   1226   ParenLoc = Lex.getLoc();
   1227   if (!EatIfPresent(lltok::rparen))
   1228     return Error(ParenLoc, "expected ')'");
   1229   if (!isPowerOf2_32(Alignment))
   1230     return Error(AlignLoc, "stack alignment is not a power of two");
   1231   return false;
   1232 }
   1233 
   1234 /// ParseIndexList - This parses the index list for an insert/extractvalue
   1235 /// instruction.  This sets AteExtraComma in the case where we eat an extra
   1236 /// comma at the end of the line and find that it is followed by metadata.
   1237 /// Clients that don't allow metadata can call the version of this function that
   1238 /// only takes one argument.
   1239 ///
   1240 /// ParseIndexList
   1241 ///    ::=  (',' uint32)+
   1242 ///
   1243 bool LLParser::ParseIndexList(SmallVectorImpl<unsigned> &Indices,
   1244                               bool &AteExtraComma) {
   1245   AteExtraComma = false;
   1246 
   1247   if (Lex.getKind() != lltok::comma)
   1248     return TokError("expected ',' as start of index list");
   1249 
   1250   while (EatIfPresent(lltok::comma)) {
   1251     if (Lex.getKind() == lltok::MetadataVar) {
   1252       AteExtraComma = true;
   1253       return false;
   1254     }
   1255     unsigned Idx = 0;
   1256     if (ParseUInt32(Idx)) return true;
   1257     Indices.push_back(Idx);
   1258   }
   1259 
   1260   return false;
   1261 }
   1262 
   1263 //===----------------------------------------------------------------------===//
   1264 // Type Parsing.
   1265 //===----------------------------------------------------------------------===//
   1266 
   1267 /// ParseType - Parse a type.
   1268 bool LLParser::ParseType(Type *&Result, bool AllowVoid) {
   1269   SMLoc TypeLoc = Lex.getLoc();
   1270   switch (Lex.getKind()) {
   1271   default:
   1272     return TokError("expected type");
   1273   case lltok::Type:
   1274     // Type ::= 'float' | 'void' (etc)
   1275     Result = Lex.getTyVal();
   1276     Lex.Lex();
   1277     break;
   1278   case lltok::lbrace:
   1279     // Type ::= StructType
   1280     if (ParseAnonStructType(Result, false))
   1281       return true;
   1282     break;
   1283   case lltok::lsquare:
   1284     // Type ::= '[' ... ']'
   1285     Lex.Lex(); // eat the lsquare.
   1286     if (ParseArrayVectorType(Result, false))
   1287       return true;
   1288     break;
   1289   case lltok::less: // Either vector or packed struct.
   1290     // Type ::= '<' ... '>'
   1291     Lex.Lex();
   1292     if (Lex.getKind() == lltok::lbrace) {
   1293       if (ParseAnonStructType(Result, true) ||
   1294           ParseToken(lltok::greater, "expected '>' at end of packed struct"))
   1295         return true;
   1296     } else if (ParseArrayVectorType(Result, true))
   1297       return true;
   1298     break;
   1299   case lltok::LocalVar: {
   1300     // Type ::= %foo
   1301     std::pair<Type*, LocTy> &Entry = NamedTypes[Lex.getStrVal()];
   1302 
   1303     // If the type hasn't been defined yet, create a forward definition and
   1304     // remember where that forward def'n was seen (in case it never is defined).
   1305     if (Entry.first == 0) {
   1306       Entry.first = StructType::create(Context, Lex.getStrVal());
   1307       Entry.second = Lex.getLoc();
   1308     }
   1309     Result = Entry.first;
   1310     Lex.Lex();
   1311     break;
   1312   }
   1313 
   1314   case lltok::LocalVarID: {
   1315     // Type ::= %4
   1316     if (Lex.getUIntVal() >= NumberedTypes.size())
   1317       NumberedTypes.resize(Lex.getUIntVal()+1);
   1318     std::pair<Type*, LocTy> &Entry = NumberedTypes[Lex.getUIntVal()];
   1319 
   1320     // If the type hasn't been defined yet, create a forward definition and
   1321     // remember where that forward def'n was seen (in case it never is defined).
   1322     if (Entry.first == 0) {
   1323       Entry.first = StructType::create(Context);
   1324       Entry.second = Lex.getLoc();
   1325     }
   1326     Result = Entry.first;
   1327     Lex.Lex();
   1328     break;
   1329   }
   1330   }
   1331 
   1332   // Parse the type suffixes.
   1333   while (1) {
   1334     switch (Lex.getKind()) {
   1335     // End of type.
   1336     default:
   1337       if (!AllowVoid && Result->isVoidTy())
   1338         return Error(TypeLoc, "void type only allowed for function results");
   1339       return false;
   1340 
   1341     // Type ::= Type '*'
   1342     case lltok::star:
   1343       if (Result->isLabelTy())
   1344         return TokError("basic block pointers are invalid");
   1345       if (Result->isVoidTy())
   1346         return TokError("pointers to void are invalid - use i8* instead");
   1347       if (!PointerType::isValidElementType(Result))
   1348         return TokError("pointer to this type is invalid");
   1349       Result = PointerType::getUnqual(Result);
   1350       Lex.Lex();
   1351       break;
   1352 
   1353     // Type ::= Type 'addrspace' '(' uint32 ')' '*'
   1354     case lltok::kw_addrspace: {
   1355       if (Result->isLabelTy())
   1356         return TokError("basic block pointers are invalid");
   1357       if (Result->isVoidTy())
   1358         return TokError("pointers to void are invalid; use i8* instead");
   1359       if (!PointerType::isValidElementType(Result))
   1360         return TokError("pointer to this type is invalid");
   1361       unsigned AddrSpace;
   1362       if (ParseOptionalAddrSpace(AddrSpace) ||
   1363           ParseToken(lltok::star, "expected '*' in address space"))
   1364         return true;
   1365 
   1366       Result = PointerType::get(Result, AddrSpace);
   1367       break;
   1368     }
   1369 
   1370     /// Types '(' ArgTypeListI ')' OptFuncAttrs
   1371     case lltok::lparen:
   1372       if (ParseFunctionType(Result))
   1373         return true;
   1374       break;
   1375     }
   1376   }
   1377 }
   1378 
   1379 /// ParseParameterList
   1380 ///    ::= '(' ')'
   1381 ///    ::= '(' Arg (',' Arg)* ')'
   1382 ///  Arg
   1383 ///    ::= Type OptionalAttributes Value OptionalAttributes
   1384 bool LLParser::ParseParameterList(SmallVectorImpl<ParamInfo> &ArgList,
   1385                                   PerFunctionState &PFS) {
   1386   if (ParseToken(lltok::lparen, "expected '(' in call"))
   1387     return true;
   1388 
   1389   while (Lex.getKind() != lltok::rparen) {
   1390     // If this isn't the first argument, we need a comma.
   1391     if (!ArgList.empty() &&
   1392         ParseToken(lltok::comma, "expected ',' in argument list"))
   1393       return true;
   1394 
   1395     // Parse the argument.
   1396     LocTy ArgLoc;
   1397     Type *ArgTy = 0;
   1398     Attributes ArgAttrs1;
   1399     Attributes ArgAttrs2;
   1400     Value *V;
   1401     if (ParseType(ArgTy, ArgLoc))
   1402       return true;
   1403 
   1404     // Otherwise, handle normal operands.
   1405     if (ParseOptionalAttrs(ArgAttrs1, 0) || ParseValue(ArgTy, V, PFS))
   1406       return true;
   1407     ArgList.push_back(ParamInfo(ArgLoc, V, ArgAttrs1|ArgAttrs2));
   1408   }
   1409 
   1410   Lex.Lex();  // Lex the ')'.
   1411   return false;
   1412 }
   1413 
   1414 
   1415 
   1416 /// ParseArgumentList - Parse the argument list for a function type or function
   1417 /// prototype.
   1418 ///   ::= '(' ArgTypeListI ')'
   1419 /// ArgTypeListI
   1420 ///   ::= /*empty*/
   1421 ///   ::= '...'
   1422 ///   ::= ArgTypeList ',' '...'
   1423 ///   ::= ArgType (',' ArgType)*
   1424 ///
   1425 bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
   1426                                  bool &isVarArg){
   1427   isVarArg = false;
   1428   assert(Lex.getKind() == lltok::lparen);
   1429   Lex.Lex(); // eat the (.
   1430 
   1431   if (Lex.getKind() == lltok::rparen) {
   1432     // empty
   1433   } else if (Lex.getKind() == lltok::dotdotdot) {
   1434     isVarArg = true;
   1435     Lex.Lex();
   1436   } else {
   1437     LocTy TypeLoc = Lex.getLoc();
   1438     Type *ArgTy = 0;
   1439     Attributes Attrs;
   1440     std::string Name;
   1441 
   1442     if (ParseType(ArgTy) ||
   1443         ParseOptionalAttrs(Attrs, 0)) return true;
   1444 
   1445     if (ArgTy->isVoidTy())
   1446       return Error(TypeLoc, "argument can not have void type");
   1447 
   1448     if (Lex.getKind() == lltok::LocalVar) {
   1449       Name = Lex.getStrVal();
   1450       Lex.Lex();
   1451     }
   1452 
   1453     if (!FunctionType::isValidArgumentType(ArgTy))
   1454       return Error(TypeLoc, "invalid type for function argument");
   1455 
   1456     ArgList.push_back(ArgInfo(TypeLoc, ArgTy, Attrs, Name));
   1457 
   1458     while (EatIfPresent(lltok::comma)) {
   1459       // Handle ... at end of arg list.
   1460       if (EatIfPresent(lltok::dotdotdot)) {
   1461         isVarArg = true;
   1462         break;
   1463       }
   1464 
   1465       // Otherwise must be an argument type.
   1466       TypeLoc = Lex.getLoc();
   1467       if (ParseType(ArgTy) || ParseOptionalAttrs(Attrs, 0)) return true;
   1468 
   1469       if (ArgTy->isVoidTy())
   1470         return Error(TypeLoc, "argument can not have void type");
   1471 
   1472       if (Lex.getKind() == lltok::LocalVar) {
   1473         Name = Lex.getStrVal();
   1474         Lex.Lex();
   1475       } else {
   1476         Name = "";
   1477       }
   1478 
   1479       if (!ArgTy->isFirstClassType())
   1480         return Error(TypeLoc, "invalid type for function argument");
   1481 
   1482       ArgList.push_back(ArgInfo(TypeLoc, ArgTy, Attrs, Name));
   1483     }
   1484   }
   1485 
   1486   return ParseToken(lltok::rparen, "expected ')' at end of argument list");
   1487 }
   1488 
   1489 /// ParseFunctionType
   1490 ///  ::= Type ArgumentList OptionalAttrs
   1491 bool LLParser::ParseFunctionType(Type *&Result) {
   1492   assert(Lex.getKind() == lltok::lparen);
   1493 
   1494   if (!FunctionType::isValidReturnType(Result))
   1495     return TokError("invalid function return type");
   1496 
   1497   SmallVector<ArgInfo, 8> ArgList;
   1498   bool isVarArg;
   1499   if (ParseArgumentList(ArgList, isVarArg))
   1500     return true;
   1501 
   1502   // Reject names on the arguments lists.
   1503   for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
   1504     if (!ArgList[i].Name.empty())
   1505       return Error(ArgList[i].Loc, "argument name invalid in function type");
   1506     if (ArgList[i].Attrs)
   1507       return Error(ArgList[i].Loc,
   1508                    "argument attributes invalid in function type");
   1509   }
   1510 
   1511   SmallVector<Type*, 16> ArgListTy;
   1512   for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
   1513     ArgListTy.push_back(ArgList[i].Ty);
   1514 
   1515   Result = FunctionType::get(Result, ArgListTy, isVarArg);
   1516   return false;
   1517 }
   1518 
   1519 /// ParseAnonStructType - Parse an anonymous struct type, which is inlined into
   1520 /// other structs.
   1521 bool LLParser::ParseAnonStructType(Type *&Result, bool Packed) {
   1522   SmallVector<Type*, 8> Elts;
   1523   if (ParseStructBody(Elts)) return true;
   1524 
   1525   Result = StructType::get(Context, Elts, Packed);
   1526   return false;
   1527 }
   1528 
   1529 /// ParseStructDefinition - Parse a struct in a 'type' definition.
   1530 bool LLParser::ParseStructDefinition(SMLoc TypeLoc, StringRef Name,
   1531                                      std::pair<Type*, LocTy> &Entry,
   1532                                      Type *&ResultTy) {
   1533   // If the type was already defined, diagnose the redefinition.
   1534   if (Entry.first && !Entry.second.isValid())
   1535     return Error(TypeLoc, "redefinition of type");
   1536 
   1537   // If we have opaque, just return without filling in the definition for the
   1538   // struct.  This counts as a definition as far as the .ll file goes.
   1539   if (EatIfPresent(lltok::kw_opaque)) {
   1540     // This type is being defined, so clear the location to indicate this.
   1541     Entry.second = SMLoc();
   1542 
   1543     // If this type number has never been uttered, create it.
   1544     if (Entry.first == 0)
   1545       Entry.first = StructType::create(Context, Name);
   1546     ResultTy = Entry.first;
   1547     return false;
   1548   }
   1549 
   1550   // If the type starts with '<', then it is either a packed struct or a vector.
   1551   bool isPacked = EatIfPresent(lltok::less);
   1552 
   1553   // If we don't have a struct, then we have a random type alias, which we
   1554   // accept for compatibility with old files.  These types are not allowed to be
   1555   // forward referenced and not allowed to be recursive.
   1556   if (Lex.getKind() != lltok::lbrace) {
   1557     if (Entry.first)
   1558       return Error(TypeLoc, "forward references to non-struct type");
   1559 
   1560     ResultTy = 0;
   1561     if (isPacked)
   1562       return ParseArrayVectorType(ResultTy, true);
   1563     return ParseType(ResultTy);
   1564   }
   1565 
   1566   // This type is being defined, so clear the location to indicate this.
   1567   Entry.second = SMLoc();
   1568 
   1569   // If this type number has never been uttered, create it.
   1570   if (Entry.first == 0)
   1571     Entry.first = StructType::create(Context, Name);
   1572 
   1573   StructType *STy = cast<StructType>(Entry.first);
   1574 
   1575   SmallVector<Type*, 8> Body;
   1576   if (ParseStructBody(Body) ||
   1577       (isPacked && ParseToken(lltok::greater, "expected '>' in packed struct")))
   1578     return true;
   1579 
   1580   STy->setBody(Body, isPacked);
   1581   ResultTy = STy;
   1582   return false;
   1583 }
   1584 
   1585 
   1586 /// ParseStructType: Handles packed and unpacked types.  </> parsed elsewhere.
   1587 ///   StructType
   1588 ///     ::= '{' '}'
   1589 ///     ::= '{' Type (',' Type)* '}'
   1590 ///     ::= '<' '{' '}' '>'
   1591 ///     ::= '<' '{' Type (',' Type)* '}' '>'
   1592 bool LLParser::ParseStructBody(SmallVectorImpl<Type*> &Body) {
   1593   assert(Lex.getKind() == lltok::lbrace);
   1594   Lex.Lex(); // Consume the '{'
   1595 
   1596   // Handle the empty struct.
   1597   if (EatIfPresent(lltok::rbrace))
   1598     return false;
   1599 
   1600   LocTy EltTyLoc = Lex.getLoc();
   1601   Type *Ty = 0;
   1602   if (ParseType(Ty)) return true;
   1603   Body.push_back(Ty);
   1604 
   1605   if (!StructType::isValidElementType(Ty))
   1606     return Error(EltTyLoc, "invalid element type for struct");
   1607 
   1608   while (EatIfPresent(lltok::comma)) {
   1609     EltTyLoc = Lex.getLoc();
   1610     if (ParseType(Ty)) return true;
   1611 
   1612     if (!StructType::isValidElementType(Ty))
   1613       return Error(EltTyLoc, "invalid element type for struct");
   1614 
   1615     Body.push_back(Ty);
   1616   }
   1617 
   1618   return ParseToken(lltok::rbrace, "expected '}' at end of struct");
   1619 }
   1620 
   1621 /// ParseArrayVectorType - Parse an array or vector type, assuming the first
   1622 /// token has already been consumed.
   1623 ///   Type
   1624 ///     ::= '[' APSINTVAL 'x' Types ']'
   1625 ///     ::= '<' APSINTVAL 'x' Types '>'
   1626 bool LLParser::ParseArrayVectorType(Type *&Result, bool isVector) {
   1627   if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned() ||
   1628       Lex.getAPSIntVal().getBitWidth() > 64)
   1629     return TokError("expected number in address space");
   1630 
   1631   LocTy SizeLoc = Lex.getLoc();
   1632   uint64_t Size = Lex.getAPSIntVal().getZExtValue();
   1633   Lex.Lex();
   1634 
   1635   if (ParseToken(lltok::kw_x, "expected 'x' after element count"))
   1636       return true;
   1637 
   1638   LocTy TypeLoc = Lex.getLoc();
   1639   Type *EltTy = 0;
   1640   if (ParseType(EltTy)) return true;
   1641 
   1642   if (ParseToken(isVector ? lltok::greater : lltok::rsquare,
   1643                  "expected end of sequential type"))
   1644     return true;
   1645 
   1646   if (isVector) {
   1647     if (Size == 0)
   1648       return Error(SizeLoc, "zero element vector is illegal");
   1649     if ((unsigned)Size != Size)
   1650       return Error(SizeLoc, "size too large for vector");
   1651     if (!VectorType::isValidElementType(EltTy))
   1652       return Error(TypeLoc,
   1653        "vector element type must be fp, integer or a pointer to these types");
   1654     Result = VectorType::get(EltTy, unsigned(Size));
   1655   } else {
   1656     if (!ArrayType::isValidElementType(EltTy))
   1657       return Error(TypeLoc, "invalid array element type");
   1658     Result = ArrayType::get(EltTy, Size);
   1659   }
   1660   return false;
   1661 }
   1662 
   1663 //===----------------------------------------------------------------------===//
   1664 // Function Semantic Analysis.
   1665 //===----------------------------------------------------------------------===//
   1666 
   1667 LLParser::PerFunctionState::PerFunctionState(LLParser &p, Function &f,
   1668                                              int functionNumber)
   1669   : P(p), F(f), FunctionNumber(functionNumber) {
   1670 
   1671   // Insert unnamed arguments into the NumberedVals list.
   1672   for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end();
   1673        AI != E; ++AI)
   1674     if (!AI->hasName())
   1675       NumberedVals.push_back(AI);
   1676 }
   1677 
   1678 LLParser::PerFunctionState::~PerFunctionState() {
   1679   // If there were any forward referenced non-basicblock values, delete them.
   1680   for (std::map<std::string, std::pair<Value*, LocTy> >::iterator
   1681        I = ForwardRefVals.begin(), E = ForwardRefVals.end(); I != E; ++I)
   1682     if (!isa<BasicBlock>(I->second.first)) {
   1683       I->second.first->replaceAllUsesWith(
   1684                            UndefValue::get(I->second.first->getType()));
   1685       delete I->second.first;
   1686       I->second.first = 0;
   1687     }
   1688 
   1689   for (std::map<unsigned, std::pair<Value*, LocTy> >::iterator
   1690        I = ForwardRefValIDs.begin(), E = ForwardRefValIDs.end(); I != E; ++I)
   1691     if (!isa<BasicBlock>(I->second.first)) {
   1692       I->second.first->replaceAllUsesWith(
   1693                            UndefValue::get(I->second.first->getType()));
   1694       delete I->second.first;
   1695       I->second.first = 0;
   1696     }
   1697 }
   1698 
   1699 bool LLParser::PerFunctionState::FinishFunction() {
   1700   // Check to see if someone took the address of labels in this block.
   1701   if (!P.ForwardRefBlockAddresses.empty()) {
   1702     ValID FunctionID;
   1703     if (!F.getName().empty()) {
   1704       FunctionID.Kind = ValID::t_GlobalName;
   1705       FunctionID.StrVal = F.getName();
   1706     } else {
   1707       FunctionID.Kind = ValID::t_GlobalID;
   1708       FunctionID.UIntVal = FunctionNumber;
   1709     }
   1710 
   1711     std::map<ValID, std::vector<std::pair<ValID, GlobalValue*> > >::iterator
   1712       FRBAI = P.ForwardRefBlockAddresses.find(FunctionID);
   1713     if (FRBAI != P.ForwardRefBlockAddresses.end()) {
   1714       // Resolve all these references.
   1715       if (P.ResolveForwardRefBlockAddresses(&F, FRBAI->second, this))
   1716         return true;
   1717 
   1718       P.ForwardRefBlockAddresses.erase(FRBAI);
   1719     }
   1720   }
   1721 
   1722   if (!ForwardRefVals.empty())
   1723     return P.Error(ForwardRefVals.begin()->second.second,
   1724                    "use of undefined value '%" + ForwardRefVals.begin()->first +
   1725                    "'");
   1726   if (!ForwardRefValIDs.empty())
   1727     return P.Error(ForwardRefValIDs.begin()->second.second,
   1728                    "use of undefined value '%" +
   1729                    Twine(ForwardRefValIDs.begin()->first) + "'");
   1730   return false;
   1731 }
   1732 
   1733 
   1734 /// GetVal - Get a value with the specified name or ID, creating a
   1735 /// forward reference record if needed.  This can return null if the value
   1736 /// exists but does not have the right type.
   1737 Value *LLParser::PerFunctionState::GetVal(const std::string &Name,
   1738                                           Type *Ty, LocTy Loc) {
   1739   // Look this name up in the normal function symbol table.
   1740   Value *Val = F.getValueSymbolTable().lookup(Name);
   1741 
   1742   // If this is a forward reference for the value, see if we already created a
   1743   // forward ref record.
   1744   if (Val == 0) {
   1745     std::map<std::string, std::pair<Value*, LocTy> >::iterator
   1746       I = ForwardRefVals.find(Name);
   1747     if (I != ForwardRefVals.end())
   1748       Val = I->second.first;
   1749   }
   1750 
   1751   // If we have the value in the symbol table or fwd-ref table, return it.
   1752   if (Val) {
   1753     if (Val->getType() == Ty) return Val;
   1754     if (Ty->isLabelTy())
   1755       P.Error(Loc, "'%" + Name + "' is not a basic block");
   1756     else
   1757       P.Error(Loc, "'%" + Name + "' defined with type '" +
   1758               getTypeString(Val->getType()) + "'");
   1759     return 0;
   1760   }
   1761 
   1762   // Don't make placeholders with invalid type.
   1763   if (!Ty->isFirstClassType() && !Ty->isLabelTy()) {
   1764     P.Error(Loc, "invalid use of a non-first-class type");
   1765     return 0;
   1766   }
   1767 
   1768   // Otherwise, create a new forward reference for this value and remember it.
   1769   Value *FwdVal;
   1770   if (Ty->isLabelTy())
   1771     FwdVal = BasicBlock::Create(F.getContext(), Name, &F);
   1772   else
   1773     FwdVal = new Argument(Ty, Name);
   1774 
   1775   ForwardRefVals[Name] = std::make_pair(FwdVal, Loc);
   1776   return FwdVal;
   1777 }
   1778 
   1779 Value *LLParser::PerFunctionState::GetVal(unsigned ID, Type *Ty,
   1780                                           LocTy Loc) {
   1781   // Look this name up in the normal function symbol table.
   1782   Value *Val = ID < NumberedVals.size() ? NumberedVals[ID] : 0;
   1783 
   1784   // If this is a forward reference for the value, see if we already created a
   1785   // forward ref record.
   1786   if (Val == 0) {
   1787     std::map<unsigned, std::pair<Value*, LocTy> >::iterator
   1788       I = ForwardRefValIDs.find(ID);
   1789     if (I != ForwardRefValIDs.end())
   1790       Val = I->second.first;
   1791   }
   1792 
   1793   // If we have the value in the symbol table or fwd-ref table, return it.
   1794   if (Val) {
   1795     if (Val->getType() == Ty) return Val;
   1796     if (Ty->isLabelTy())
   1797       P.Error(Loc, "'%" + Twine(ID) + "' is not a basic block");
   1798     else
   1799       P.Error(Loc, "'%" + Twine(ID) + "' defined with type '" +
   1800               getTypeString(Val->getType()) + "'");
   1801     return 0;
   1802   }
   1803 
   1804   if (!Ty->isFirstClassType() && !Ty->isLabelTy()) {
   1805     P.Error(Loc, "invalid use of a non-first-class type");
   1806     return 0;
   1807   }
   1808 
   1809   // Otherwise, create a new forward reference for this value and remember it.
   1810   Value *FwdVal;
   1811   if (Ty->isLabelTy())
   1812     FwdVal = BasicBlock::Create(F.getContext(), "", &F);
   1813   else
   1814     FwdVal = new Argument(Ty);
   1815 
   1816   ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc);
   1817   return FwdVal;
   1818 }
   1819 
   1820 /// SetInstName - After an instruction is parsed and inserted into its
   1821 /// basic block, this installs its name.
   1822 bool LLParser::PerFunctionState::SetInstName(int NameID,
   1823                                              const std::string &NameStr,
   1824                                              LocTy NameLoc, Instruction *Inst) {
   1825   // If this instruction has void type, it cannot have a name or ID specified.
   1826   if (Inst->getType()->isVoidTy()) {
   1827     if (NameID != -1 || !NameStr.empty())
   1828       return P.Error(NameLoc, "instructions returning void cannot have a name");
   1829     return false;
   1830   }
   1831 
   1832   // If this was a numbered instruction, verify that the instruction is the
   1833   // expected value and resolve any forward references.
   1834   if (NameStr.empty()) {
   1835     // If neither a name nor an ID was specified, just use the next ID.
   1836     if (NameID == -1)
   1837       NameID = NumberedVals.size();
   1838 
   1839     if (unsigned(NameID) != NumberedVals.size())
   1840       return P.Error(NameLoc, "instruction expected to be numbered '%" +
   1841                      Twine(NumberedVals.size()) + "'");
   1842 
   1843     std::map<unsigned, std::pair<Value*, LocTy> >::iterator FI =
   1844       ForwardRefValIDs.find(NameID);
   1845     if (FI != ForwardRefValIDs.end()) {
   1846       if (FI->second.first->getType() != Inst->getType())
   1847         return P.Error(NameLoc, "instruction forward referenced with type '" +
   1848                        getTypeString(FI->second.first->getType()) + "'");
   1849       FI->second.first->replaceAllUsesWith(Inst);
   1850       delete FI->second.first;
   1851       ForwardRefValIDs.erase(FI);
   1852     }
   1853 
   1854     NumberedVals.push_back(Inst);
   1855     return false;
   1856   }
   1857 
   1858   // Otherwise, the instruction had a name.  Resolve forward refs and set it.
   1859   std::map<std::string, std::pair<Value*, LocTy> >::iterator
   1860     FI = ForwardRefVals.find(NameStr);
   1861   if (FI != ForwardRefVals.end()) {
   1862     if (FI->second.first->getType() != Inst->getType())
   1863       return P.Error(NameLoc, "instruction forward referenced with type '" +
   1864                      getTypeString(FI->second.first->getType()) + "'");
   1865     FI->second.first->replaceAllUsesWith(Inst);
   1866     delete FI->second.first;
   1867     ForwardRefVals.erase(FI);
   1868   }
   1869 
   1870   // Set the name on the instruction.
   1871   Inst->setName(NameStr);
   1872 
   1873   if (Inst->getName() != NameStr)
   1874     return P.Error(NameLoc, "multiple definition of local value named '" +
   1875                    NameStr + "'");
   1876   return false;
   1877 }
   1878 
   1879 /// GetBB - Get a basic block with the specified name or ID, creating a
   1880 /// forward reference record if needed.
   1881 BasicBlock *LLParser::PerFunctionState::GetBB(const std::string &Name,
   1882                                               LocTy Loc) {
   1883   return cast_or_null<BasicBlock>(GetVal(Name,
   1884                                         Type::getLabelTy(F.getContext()), Loc));
   1885 }
   1886 
   1887 BasicBlock *LLParser::PerFunctionState::GetBB(unsigned ID, LocTy Loc) {
   1888   return cast_or_null<BasicBlock>(GetVal(ID,
   1889                                         Type::getLabelTy(F.getContext()), Loc));
   1890 }
   1891 
   1892 /// DefineBB - Define the specified basic block, which is either named or
   1893 /// unnamed.  If there is an error, this returns null otherwise it returns
   1894 /// the block being defined.
   1895 BasicBlock *LLParser::PerFunctionState::DefineBB(const std::string &Name,
   1896                                                  LocTy Loc) {
   1897   BasicBlock *BB;
   1898   if (Name.empty())
   1899     BB = GetBB(NumberedVals.size(), Loc);
   1900   else
   1901     BB = GetBB(Name, Loc);
   1902   if (BB == 0) return 0; // Already diagnosed error.
   1903 
   1904   // Move the block to the end of the function.  Forward ref'd blocks are
   1905   // inserted wherever they happen to be referenced.
   1906   F.getBasicBlockList().splice(F.end(), F.getBasicBlockList(), BB);
   1907 
   1908   // Remove the block from forward ref sets.
   1909   if (Name.empty()) {
   1910     ForwardRefValIDs.erase(NumberedVals.size());
   1911     NumberedVals.push_back(BB);
   1912   } else {
   1913     // BB forward references are already in the function symbol table.
   1914     ForwardRefVals.erase(Name);
   1915   }
   1916 
   1917   return BB;
   1918 }
   1919 
   1920 //===----------------------------------------------------------------------===//
   1921 // Constants.
   1922 //===----------------------------------------------------------------------===//
   1923 
   1924 /// ParseValID - Parse an abstract value that doesn't necessarily have a
   1925 /// type implied.  For example, if we parse "4" we don't know what integer type
   1926 /// it has.  The value will later be combined with its type and checked for
   1927 /// sanity.  PFS is used to convert function-local operands of metadata (since
   1928 /// metadata operands are not just parsed here but also converted to values).
   1929 /// PFS can be null when we are not parsing metadata values inside a function.
   1930 bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
   1931   ID.Loc = Lex.getLoc();
   1932   switch (Lex.getKind()) {
   1933   default: return TokError("expected value token");
   1934   case lltok::GlobalID:  // @42
   1935     ID.UIntVal = Lex.getUIntVal();
   1936     ID.Kind = ValID::t_GlobalID;
   1937     break;
   1938   case lltok::GlobalVar:  // @foo
   1939     ID.StrVal = Lex.getStrVal();
   1940     ID.Kind = ValID::t_GlobalName;
   1941     break;
   1942   case lltok::LocalVarID:  // %42
   1943     ID.UIntVal = Lex.getUIntVal();
   1944     ID.Kind = ValID::t_LocalID;
   1945     break;
   1946   case lltok::LocalVar:  // %foo
   1947     ID.StrVal = Lex.getStrVal();
   1948     ID.Kind = ValID::t_LocalName;
   1949     break;
   1950   case lltok::exclaim:   // !42, !{...}, or !"foo"
   1951     return ParseMetadataValue(ID, PFS);
   1952   case lltok::APSInt:
   1953     ID.APSIntVal = Lex.getAPSIntVal();
   1954     ID.Kind = ValID::t_APSInt;
   1955     break;
   1956   case lltok::APFloat:
   1957     ID.APFloatVal = Lex.getAPFloatVal();
   1958     ID.Kind = ValID::t_APFloat;
   1959     break;
   1960   case lltok::kw_true:
   1961     ID.ConstantVal = ConstantInt::getTrue(Context);
   1962     ID.Kind = ValID::t_Constant;
   1963     break;
   1964   case lltok::kw_false:
   1965     ID.ConstantVal = ConstantInt::getFalse(Context);
   1966     ID.Kind = ValID::t_Constant;
   1967     break;
   1968   case lltok::kw_null: ID.Kind = ValID::t_Null; break;
   1969   case lltok::kw_undef: ID.Kind = ValID::t_Undef; break;
   1970   case lltok::kw_zeroinitializer: ID.Kind = ValID::t_Zero; break;
   1971 
   1972   case lltok::lbrace: {
   1973     // ValID ::= '{' ConstVector '}'
   1974     Lex.Lex();
   1975     SmallVector<Constant*, 16> Elts;
   1976     if (ParseGlobalValueVector(Elts) ||
   1977         ParseToken(lltok::rbrace, "expected end of struct constant"))
   1978       return true;
   1979 
   1980     ID.ConstantStructElts = new Constant*[Elts.size()];
   1981     ID.UIntVal = Elts.size();
   1982     memcpy(ID.ConstantStructElts, Elts.data(), Elts.size()*sizeof(Elts[0]));
   1983     ID.Kind = ValID::t_ConstantStruct;
   1984     return false;
   1985   }
   1986   case lltok::less: {
   1987     // ValID ::= '<' ConstVector '>'         --> Vector.
   1988     // ValID ::= '<' '{' ConstVector '}' '>' --> Packed Struct.
   1989     Lex.Lex();
   1990     bool isPackedStruct = EatIfPresent(lltok::lbrace);
   1991 
   1992     SmallVector<Constant*, 16> Elts;
   1993     LocTy FirstEltLoc = Lex.getLoc();
   1994     if (ParseGlobalValueVector(Elts) ||
   1995         (isPackedStruct &&
   1996          ParseToken(lltok::rbrace, "expected end of packed struct")) ||
   1997         ParseToken(lltok::greater, "expected end of constant"))
   1998       return true;
   1999 
   2000     if (isPackedStruct) {
   2001       ID.ConstantStructElts = new Constant*[Elts.size()];
   2002       memcpy(ID.ConstantStructElts, Elts.data(), Elts.size()*sizeof(Elts[0]));
   2003       ID.UIntVal = Elts.size();
   2004       ID.Kind = ValID::t_PackedConstantStruct;
   2005       return false;
   2006     }
   2007 
   2008     if (Elts.empty())
   2009       return Error(ID.Loc, "constant vector must not be empty");
   2010 
   2011     if (!Elts[0]->getType()->isIntegerTy() &&
   2012         !Elts[0]->getType()->isFloatingPointTy() &&
   2013         !Elts[0]->getType()->isPointerTy())
   2014       return Error(FirstEltLoc,
   2015             "vector elements must have integer, pointer or floating point type");
   2016 
   2017     // Verify that all the vector elements have the same type.
   2018     for (unsigned i = 1, e = Elts.size(); i != e; ++i)
   2019       if (Elts[i]->getType() != Elts[0]->getType())
   2020         return Error(FirstEltLoc,
   2021                      "vector element #" + Twine(i) +
   2022                     " is not of type '" + getTypeString(Elts[0]->getType()));
   2023 
   2024     ID.ConstantVal = ConstantVector::get(Elts);
   2025     ID.Kind = ValID::t_Constant;
   2026     return false;
   2027   }
   2028   case lltok::lsquare: {   // Array Constant
   2029     Lex.Lex();
   2030     SmallVector<Constant*, 16> Elts;
   2031     LocTy FirstEltLoc = Lex.getLoc();
   2032     if (ParseGlobalValueVector(Elts) ||
   2033         ParseToken(lltok::rsquare, "expected end of array constant"))
   2034       return true;
   2035 
   2036     // Handle empty element.
   2037     if (Elts.empty()) {
   2038       // Use undef instead of an array because it's inconvenient to determine
   2039       // the element type at this point, there being no elements to examine.
   2040       ID.Kind = ValID::t_EmptyArray;
   2041       return false;
   2042     }
   2043 
   2044     if (!Elts[0]->getType()->isFirstClassType())
   2045       return Error(FirstEltLoc, "invalid array element type: " +
   2046                    getTypeString(Elts[0]->getType()));
   2047 
   2048     ArrayType *ATy = ArrayType::get(Elts[0]->getType(), Elts.size());
   2049 
   2050     // Verify all elements are correct type!
   2051     for (unsigned i = 0, e = Elts.size(); i != e; ++i) {
   2052       if (Elts[i]->getType() != Elts[0]->getType())
   2053         return Error(FirstEltLoc,
   2054                      "array element #" + Twine(i) +
   2055                      " is not of type '" + getTypeString(Elts[0]->getType()));
   2056     }
   2057 
   2058     ID.ConstantVal = ConstantArray::get(ATy, Elts);
   2059     ID.Kind = ValID::t_Constant;
   2060     return false;
   2061   }
   2062   case lltok::kw_c:  // c "foo"
   2063     Lex.Lex();
   2064     ID.ConstantVal = ConstantDataArray::getString(Context, Lex.getStrVal(),
   2065                                                   false);
   2066     if (ParseToken(lltok::StringConstant, "expected string")) return true;
   2067     ID.Kind = ValID::t_Constant;
   2068     return false;
   2069 
   2070   case lltok::kw_asm: {
   2071     // ValID ::= 'asm' SideEffect? AlignStack? STRINGCONSTANT ',' STRINGCONSTANT
   2072     bool HasSideEffect, AlignStack, AsmDialect;
   2073     Lex.Lex();
   2074     if (ParseOptionalToken(lltok::kw_sideeffect, HasSideEffect) ||
   2075         ParseOptionalToken(lltok::kw_alignstack, AlignStack) ||
   2076         ParseOptionalToken(lltok::kw_inteldialect, AsmDialect) ||
   2077         ParseStringConstant(ID.StrVal) ||
   2078         ParseToken(lltok::comma, "expected comma in inline asm expression") ||
   2079         ParseToken(lltok::StringConstant, "expected constraint string"))
   2080       return true;
   2081     ID.StrVal2 = Lex.getStrVal();
   2082     ID.UIntVal = unsigned(HasSideEffect) | (unsigned(AlignStack)<<1) |
   2083       (unsigned(AsmDialect)<<2);
   2084     ID.Kind = ValID::t_InlineAsm;
   2085     return false;
   2086   }
   2087 
   2088   case lltok::kw_blockaddress: {
   2089     // ValID ::= 'blockaddress' '(' @foo ',' %bar ')'
   2090     Lex.Lex();
   2091 
   2092     ValID Fn, Label;
   2093     LocTy FnLoc, LabelLoc;
   2094 
   2095     if (ParseToken(lltok::lparen, "expected '(' in block address expression") ||
   2096         ParseValID(Fn) ||
   2097         ParseToken(lltok::comma, "expected comma in block address expression")||
   2098         ParseValID(Label) ||
   2099         ParseToken(lltok::rparen, "expected ')' in block address expression"))
   2100       return true;
   2101 
   2102     if (Fn.Kind != ValID::t_GlobalID && Fn.Kind != ValID::t_GlobalName)
   2103       return Error(Fn.Loc, "expected function name in blockaddress");
   2104     if (Label.Kind != ValID::t_LocalID && Label.Kind != ValID::t_LocalName)
   2105       return Error(Label.Loc, "expected basic block name in blockaddress");
   2106 
   2107     // Make a global variable as a placeholder for this reference.
   2108     GlobalVariable *FwdRef = new GlobalVariable(*M, Type::getInt8Ty(Context),
   2109                                            false, GlobalValue::InternalLinkage,
   2110                                                 0, "");
   2111     ForwardRefBlockAddresses[Fn].push_back(std::make_pair(Label, FwdRef));
   2112     ID.ConstantVal = FwdRef;
   2113     ID.Kind = ValID::t_Constant;
   2114     return false;
   2115   }
   2116 
   2117   case lltok::kw_trunc:
   2118   case lltok::kw_zext:
   2119   case lltok::kw_sext:
   2120   case lltok::kw_fptrunc:
   2121   case lltok::kw_fpext:
   2122   case lltok::kw_bitcast:
   2123   case lltok::kw_uitofp:
   2124   case lltok::kw_sitofp:
   2125   case lltok::kw_fptoui:
   2126   case lltok::kw_fptosi:
   2127   case lltok::kw_inttoptr:
   2128   case lltok::kw_ptrtoint: {
   2129     unsigned Opc = Lex.getUIntVal();
   2130     Type *DestTy = 0;
   2131     Constant *SrcVal;
   2132     Lex.Lex();
   2133     if (ParseToken(lltok::lparen, "expected '(' after constantexpr cast") ||
   2134         ParseGlobalTypeAndValue(SrcVal) ||
   2135         ParseToken(lltok::kw_to, "expected 'to' in constantexpr cast") ||
   2136         ParseType(DestTy) ||
   2137         ParseToken(lltok::rparen, "expected ')' at end of constantexpr cast"))
   2138       return true;
   2139     if (!CastInst::castIsValid((Instruction::CastOps)Opc, SrcVal, DestTy))
   2140       return Error(ID.Loc, "invalid cast opcode for cast from '" +
   2141                    getTypeString(SrcVal->getType()) + "' to '" +
   2142                    getTypeString(DestTy) + "'");
   2143     ID.ConstantVal = ConstantExpr::getCast((Instruction::CastOps)Opc,
   2144                                                  SrcVal, DestTy);
   2145     ID.Kind = ValID::t_Constant;
   2146     return false;
   2147   }
   2148   case lltok::kw_extractvalue: {
   2149     Lex.Lex();
   2150     Constant *Val;
   2151     SmallVector<unsigned, 4> Indices;
   2152     if (ParseToken(lltok::lparen, "expected '(' in extractvalue constantexpr")||
   2153         ParseGlobalTypeAndValue(Val) ||
   2154         ParseIndexList(Indices) ||
   2155         ParseToken(lltok::rparen, "expected ')' in extractvalue constantexpr"))
   2156       return true;
   2157 
   2158     if (!Val->getType()->isAggregateType())
   2159       return Error(ID.Loc, "extractvalue operand must be aggregate type");
   2160     if (!ExtractValueInst::getIndexedType(Val->getType(), Indices))
   2161       return Error(ID.Loc, "invalid indices for extractvalue");
   2162     ID.ConstantVal = ConstantExpr::getExtractValue(Val, Indices);
   2163     ID.Kind = ValID::t_Constant;
   2164     return false;
   2165   }
   2166   case lltok::kw_insertvalue: {
   2167     Lex.Lex();
   2168     Constant *Val0, *Val1;
   2169     SmallVector<unsigned, 4> Indices;
   2170     if (ParseToken(lltok::lparen, "expected '(' in insertvalue constantexpr")||
   2171         ParseGlobalTypeAndValue(Val0) ||
   2172         ParseToken(lltok::comma, "expected comma in insertvalue constantexpr")||
   2173         ParseGlobalTypeAndValue(Val1) ||
   2174         ParseIndexList(Indices) ||
   2175         ParseToken(lltok::rparen, "expected ')' in insertvalue constantexpr"))
   2176       return true;
   2177     if (!Val0->getType()->isAggregateType())
   2178       return Error(ID.Loc, "insertvalue operand must be aggregate type");
   2179     if (!ExtractValueInst::getIndexedType(Val0->getType(), Indices))
   2180       return Error(ID.Loc, "invalid indices for insertvalue");
   2181     ID.ConstantVal = ConstantExpr::getInsertValue(Val0, Val1, Indices);
   2182     ID.Kind = ValID::t_Constant;
   2183     return false;
   2184   }
   2185   case lltok::kw_icmp:
   2186   case lltok::kw_fcmp: {
   2187     unsigned PredVal, Opc = Lex.getUIntVal();
   2188     Constant *Val0, *Val1;
   2189     Lex.Lex();
   2190     if (ParseCmpPredicate(PredVal, Opc) ||
   2191         ParseToken(lltok::lparen, "expected '(' in compare constantexpr") ||
   2192         ParseGlobalTypeAndValue(Val0) ||
   2193         ParseToken(lltok::comma, "expected comma in compare constantexpr") ||
   2194         ParseGlobalTypeAndValue(Val1) ||
   2195         ParseToken(lltok::rparen, "expected ')' in compare constantexpr"))
   2196       return true;
   2197 
   2198     if (Val0->getType() != Val1->getType())
   2199       return Error(ID.Loc, "compare operands must have the same type");
   2200 
   2201     CmpInst::Predicate Pred = (CmpInst::Predicate)PredVal;
   2202 
   2203     if (Opc == Instruction::FCmp) {
   2204       if (!Val0->getType()->isFPOrFPVectorTy())
   2205         return Error(ID.Loc, "fcmp requires floating point operands");
   2206       ID.ConstantVal = ConstantExpr::getFCmp(Pred, Val0, Val1);
   2207     } else {
   2208       assert(Opc == Instruction::ICmp && "Unexpected opcode for CmpInst!");
   2209       if (!Val0->getType()->isIntOrIntVectorTy() &&
   2210           !Val0->getType()->getScalarType()->isPointerTy())
   2211         return Error(ID.Loc, "icmp requires pointer or integer operands");
   2212       ID.ConstantVal = ConstantExpr::getICmp(Pred, Val0, Val1);
   2213     }
   2214     ID.Kind = ValID::t_Constant;
   2215     return false;
   2216   }
   2217 
   2218   // Binary Operators.
   2219   case lltok::kw_add:
   2220   case lltok::kw_fadd:
   2221   case lltok::kw_sub:
   2222   case lltok::kw_fsub:
   2223   case lltok::kw_mul:
   2224   case lltok::kw_fmul:
   2225   case lltok::kw_udiv:
   2226   case lltok::kw_sdiv:
   2227   case lltok::kw_fdiv:
   2228   case lltok::kw_urem:
   2229   case lltok::kw_srem:
   2230   case lltok::kw_frem:
   2231   case lltok::kw_shl:
   2232   case lltok::kw_lshr:
   2233   case lltok::kw_ashr: {
   2234     bool NUW = false;
   2235     bool NSW = false;
   2236     bool Exact = false;
   2237     unsigned Opc = Lex.getUIntVal();
   2238     Constant *Val0, *Val1;
   2239     Lex.Lex();
   2240     LocTy ModifierLoc = Lex.getLoc();
   2241     if (Opc == Instruction::Add || Opc == Instruction::Sub ||
   2242         Opc == Instruction::Mul || Opc == Instruction::Shl) {
   2243       if (EatIfPresent(lltok::kw_nuw))
   2244         NUW = true;
   2245       if (EatIfPresent(lltok::kw_nsw)) {
   2246         NSW = true;
   2247         if (EatIfPresent(lltok::kw_nuw))
   2248           NUW = true;
   2249       }
   2250     } else if (Opc == Instruction::SDiv || Opc == Instruction::UDiv ||
   2251                Opc == Instruction::LShr || Opc == Instruction::AShr) {
   2252       if (EatIfPresent(lltok::kw_exact))
   2253         Exact = true;
   2254     }
   2255     if (ParseToken(lltok::lparen, "expected '(' in binary constantexpr") ||
   2256         ParseGlobalTypeAndValue(Val0) ||
   2257         ParseToken(lltok::comma, "expected comma in binary constantexpr") ||
   2258         ParseGlobalTypeAndValue(Val1) ||
   2259         ParseToken(lltok::rparen, "expected ')' in binary constantexpr"))
   2260       return true;
   2261     if (Val0->getType() != Val1->getType())
   2262       return Error(ID.Loc, "operands of constexpr must have same type");
   2263     if (!Val0->getType()->isIntOrIntVectorTy()) {
   2264       if (NUW)
   2265         return Error(ModifierLoc, "nuw only applies to integer operations");
   2266       if (NSW)
   2267         return Error(ModifierLoc, "nsw only applies to integer operations");
   2268     }
   2269     // Check that the type is valid for the operator.
   2270     switch (Opc) {
   2271     case Instruction::Add:
   2272     case Instruction::Sub:
   2273     case Instruction::Mul:
   2274     case Instruction::UDiv:
   2275     case Instruction::SDiv:
   2276     case Instruction::URem:
   2277     case Instruction::SRem:
   2278     case Instruction::Shl:
   2279     case Instruction::AShr:
   2280     case Instruction::LShr:
   2281       if (!Val0->getType()->isIntOrIntVectorTy())
   2282         return Error(ID.Loc, "constexpr requires integer operands");
   2283       break;
   2284     case Instruction::FAdd:
   2285     case Instruction::FSub:
   2286     case Instruction::FMul:
   2287     case Instruction::FDiv:
   2288     case Instruction::FRem:
   2289       if (!Val0->getType()->isFPOrFPVectorTy())
   2290         return Error(ID.Loc, "constexpr requires fp operands");
   2291       break;
   2292     default: llvm_unreachable("Unknown binary operator!");
   2293     }
   2294     unsigned Flags = 0;
   2295     if (NUW)   Flags |= OverflowingBinaryOperator::NoUnsignedWrap;
   2296     if (NSW)   Flags |= OverflowingBinaryOperator::NoSignedWrap;
   2297     if (Exact) Flags |= PossiblyExactOperator::IsExact;
   2298     Constant *C = ConstantExpr::get(Opc, Val0, Val1, Flags);
   2299     ID.ConstantVal = C;
   2300     ID.Kind = ValID::t_Constant;
   2301     return false;
   2302   }
   2303 
   2304   // Logical Operations
   2305   case lltok::kw_and:
   2306   case lltok::kw_or:
   2307   case lltok::kw_xor: {
   2308     unsigned Opc = Lex.getUIntVal();
   2309     Constant *Val0, *Val1;
   2310     Lex.Lex();
   2311     if (ParseToken(lltok::lparen, "expected '(' in logical constantexpr") ||
   2312         ParseGlobalTypeAndValue(Val0) ||
   2313         ParseToken(lltok::comma, "expected comma in logical constantexpr") ||
   2314         ParseGlobalTypeAndValue(Val1) ||
   2315         ParseToken(lltok::rparen, "expected ')' in logical constantexpr"))
   2316       return true;
   2317     if (Val0->getType() != Val1->getType())
   2318       return Error(ID.Loc, "operands of constexpr must have same type");
   2319     if (!Val0->getType()->isIntOrIntVectorTy())
   2320       return Error(ID.Loc,
   2321                    "constexpr requires integer or integer vector operands");
   2322     ID.ConstantVal = ConstantExpr::get(Opc, Val0, Val1);
   2323     ID.Kind = ValID::t_Constant;
   2324     return false;
   2325   }
   2326 
   2327   case lltok::kw_getelementptr:
   2328   case lltok::kw_shufflevector:
   2329   case lltok::kw_insertelement:
   2330   case lltok::kw_extractelement:
   2331   case lltok::kw_select: {
   2332     unsigned Opc = Lex.getUIntVal();
   2333     SmallVector<Constant*, 16> Elts;
   2334     bool InBounds = false;
   2335     Lex.Lex();
   2336     if (Opc == Instruction::GetElementPtr)
   2337       InBounds = EatIfPresent(lltok::kw_inbounds);
   2338     if (ParseToken(lltok::lparen, "expected '(' in constantexpr") ||
   2339         ParseGlobalValueVector(Elts) ||
   2340         ParseToken(lltok::rparen, "expected ')' in constantexpr"))
   2341       return true;
   2342 
   2343     if (Opc == Instruction::GetElementPtr) {
   2344       if (Elts.size() == 0 ||
   2345           !Elts[0]->getType()->getScalarType()->isPointerTy())
   2346         return Error(ID.Loc, "getelementptr requires pointer operand");
   2347 
   2348       ArrayRef<Constant *> Indices(Elts.begin() + 1, Elts.end());
   2349       if (!GetElementPtrInst::getIndexedType(Elts[0]->getType(), Indices))
   2350         return Error(ID.Loc, "invalid indices for getelementptr");
   2351       ID.ConstantVal = ConstantExpr::getGetElementPtr(Elts[0], Indices,
   2352                                                       InBounds);
   2353     } else if (Opc == Instruction::Select) {
   2354       if (Elts.size() != 3)
   2355         return Error(ID.Loc, "expected three operands to select");
   2356       if (const char *Reason = SelectInst::areInvalidOperands(Elts[0], Elts[1],
   2357                                                               Elts[2]))
   2358         return Error(ID.Loc, Reason);
   2359       ID.ConstantVal = ConstantExpr::getSelect(Elts[0], Elts[1], Elts[2]);
   2360     } else if (Opc == Instruction::ShuffleVector) {
   2361       if (Elts.size() != 3)
   2362         return Error(ID.Loc, "expected three operands to shufflevector");
   2363       if (!ShuffleVectorInst::isValidOperands(Elts[0], Elts[1], Elts[2]))
   2364         return Error(ID.Loc, "invalid operands to shufflevector");
   2365       ID.ConstantVal =
   2366                  ConstantExpr::getShuffleVector(Elts[0], Elts[1],Elts[2]);
   2367     } else if (Opc == Instruction::ExtractElement) {
   2368       if (Elts.size() != 2)
   2369         return Error(ID.Loc, "expected two operands to extractelement");
   2370       if (!ExtractElementInst::isValidOperands(Elts[0], Elts[1]))
   2371         return Error(ID.Loc, "invalid extractelement operands");
   2372       ID.ConstantVal = ConstantExpr::getExtractElement(Elts[0], Elts[1]);
   2373     } else {
   2374       assert(Opc == Instruction::InsertElement && "Unknown opcode");
   2375       if (Elts.size() != 3)
   2376       return Error(ID.Loc, "expected three operands to insertelement");
   2377       if (!InsertElementInst::isValidOperands(Elts[0], Elts[1], Elts[2]))
   2378         return Error(ID.Loc, "invalid insertelement operands");
   2379       ID.ConstantVal =
   2380                  ConstantExpr::getInsertElement(Elts[0], Elts[1],Elts[2]);
   2381     }
   2382 
   2383     ID.Kind = ValID::t_Constant;
   2384     return false;
   2385   }
   2386   }
   2387 
   2388   Lex.Lex();
   2389   return false;
   2390 }
   2391 
   2392 /// ParseGlobalValue - Parse a global value with the specified type.
   2393 bool LLParser::ParseGlobalValue(Type *Ty, Constant *&C) {
   2394   C = 0;
   2395   ValID ID;
   2396   Value *V = NULL;
   2397   bool Parsed = ParseValID(ID) ||
   2398                 ConvertValIDToValue(Ty, ID, V, NULL);
   2399   if (V && !(C = dyn_cast<Constant>(V)))
   2400     return Error(ID.Loc, "global values must be constants");
   2401   return Parsed;
   2402 }
   2403 
   2404 bool LLParser::ParseGlobalTypeAndValue(Constant *&V) {
   2405   Type *Ty = 0;
   2406   return ParseType(Ty) ||
   2407          ParseGlobalValue(Ty, V);
   2408 }
   2409 
   2410 /// ParseGlobalValueVector
   2411 ///   ::= /*empty*/
   2412 ///   ::= TypeAndValue (',' TypeAndValue)*
   2413 bool LLParser::ParseGlobalValueVector(SmallVectorImpl<Constant*> &Elts) {
   2414   // Empty list.
   2415   if (Lex.getKind() == lltok::rbrace ||
   2416       Lex.getKind() == lltok::rsquare ||
   2417       Lex.getKind() == lltok::greater ||
   2418       Lex.getKind() == lltok::rparen)
   2419     return false;
   2420 
   2421   Constant *C;
   2422   if (ParseGlobalTypeAndValue(C)) return true;
   2423   Elts.push_back(C);
   2424 
   2425   while (EatIfPresent(lltok::comma)) {
   2426     if (ParseGlobalTypeAndValue(C)) return true;
   2427     Elts.push_back(C);
   2428   }
   2429 
   2430   return false;
   2431 }
   2432 
   2433 bool LLParser::ParseMetadataListValue(ValID &ID, PerFunctionState *PFS) {
   2434   assert(Lex.getKind() == lltok::lbrace);
   2435   Lex.Lex();
   2436 
   2437   SmallVector<Value*, 16> Elts;
   2438   if (ParseMDNodeVector(Elts, PFS) ||
   2439       ParseToken(lltok::rbrace, "expected end of metadata node"))
   2440     return true;
   2441 
   2442   ID.MDNodeVal = MDNode::get(Context, Elts);
   2443   ID.Kind = ValID::t_MDNode;
   2444   return false;
   2445 }
   2446 
   2447 /// ParseMetadataValue
   2448 ///  ::= !42
   2449 ///  ::= !{...}
   2450 ///  ::= !"string"
   2451 bool LLParser::ParseMetadataValue(ValID &ID, PerFunctionState *PFS) {
   2452   assert(Lex.getKind() == lltok::exclaim);
   2453   Lex.Lex();
   2454 
   2455   // MDNode:
   2456   // !{ ... }
   2457   if (Lex.getKind() == lltok::lbrace)
   2458     return ParseMetadataListValue(ID, PFS);
   2459 
   2460   // Standalone metadata reference
   2461   // !42
   2462   if (Lex.getKind() == lltok::APSInt) {
   2463     if (ParseMDNodeID(ID.MDNodeVal)) return true;
   2464     ID.Kind = ValID::t_MDNode;
   2465     return false;
   2466   }
   2467 
   2468   // MDString:
   2469   //   ::= '!' STRINGCONSTANT
   2470   if (ParseMDString(ID.MDStringVal)) return true;
   2471   ID.Kind = ValID::t_MDString;
   2472   return false;
   2473 }
   2474 
   2475 
   2476 //===----------------------------------------------------------------------===//
   2477 // Function Parsing.
   2478 //===----------------------------------------------------------------------===//
   2479 
   2480 bool LLParser::ConvertValIDToValue(Type *Ty, ValID &ID, Value *&V,
   2481                                    PerFunctionState *PFS) {
   2482   if (Ty->isFunctionTy())
   2483     return Error(ID.Loc, "functions are not values, refer to them as pointers");
   2484 
   2485   switch (ID.Kind) {
   2486   case ValID::t_LocalID:
   2487     if (!PFS) return Error(ID.Loc, "invalid use of function-local name");
   2488     V = PFS->GetVal(ID.UIntVal, Ty, ID.Loc);
   2489     return (V == 0);
   2490   case ValID::t_LocalName:
   2491     if (!PFS) return Error(ID.Loc, "invalid use of function-local name");
   2492     V = PFS->GetVal(ID.StrVal, Ty, ID.Loc);
   2493     return (V == 0);
   2494   case ValID::t_InlineAsm: {
   2495     PointerType *PTy = dyn_cast<PointerType>(Ty);
   2496     FunctionType *FTy =
   2497       PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
   2498     if (!FTy || !InlineAsm::Verify(FTy, ID.StrVal2))
   2499       return Error(ID.Loc, "invalid type for inline asm constraint string");
   2500     V = InlineAsm::get(FTy, ID.StrVal, ID.StrVal2, ID.UIntVal&1,
   2501                        (ID.UIntVal>>1)&1, (InlineAsm::AsmDialect(ID.UIntVal>>2)));
   2502     return false;
   2503   }
   2504   case ValID::t_MDNode:
   2505     if (!Ty->isMetadataTy())
   2506       return Error(ID.Loc, "metadata value must have metadata type");
   2507     V = ID.MDNodeVal;
   2508     return false;
   2509   case ValID::t_MDString:
   2510     if (!Ty->isMetadataTy())
   2511       return Error(ID.Loc, "metadata value must have metadata type");
   2512     V = ID.MDStringVal;
   2513     return false;
   2514   case ValID::t_GlobalName:
   2515     V = GetGlobalVal(ID.StrVal, Ty, ID.Loc);
   2516     return V == 0;
   2517   case ValID::t_GlobalID:
   2518     V = GetGlobalVal(ID.UIntVal, Ty, ID.Loc);
   2519     return V == 0;
   2520   case ValID::t_APSInt:
   2521     if (!Ty->isIntegerTy())
   2522       return Error(ID.Loc, "integer constant must have integer type");
   2523     ID.APSIntVal = ID.APSIntVal.extOrTrunc(Ty->getPrimitiveSizeInBits());
   2524     V = ConstantInt::get(Context, ID.APSIntVal);
   2525     return false;
   2526   case ValID::t_APFloat:
   2527     if (!Ty->isFloatingPointTy() ||
   2528         !ConstantFP::isValueValidForType(Ty, ID.APFloatVal))
   2529       return Error(ID.Loc, "floating point constant invalid for type");
   2530 
   2531     // The lexer has no type info, so builds all half, float, and double FP
   2532     // constants as double.  Fix this here.  Long double does not need this.
   2533     if (&ID.APFloatVal.getSemantics() == &APFloat::IEEEdouble) {
   2534       bool Ignored;
   2535       if (Ty->isHalfTy())
   2536         ID.APFloatVal.convert(APFloat::IEEEhalf, APFloat::rmNearestTiesToEven,
   2537                               &Ignored);
   2538       else if (Ty->isFloatTy())
   2539         ID.APFloatVal.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven,
   2540                               &Ignored);
   2541     }
   2542     V = ConstantFP::get(Context, ID.APFloatVal);
   2543 
   2544     if (V->getType() != Ty)
   2545       return Error(ID.Loc, "floating point constant does not have type '" +
   2546                    getTypeString(Ty) + "'");
   2547 
   2548     return false;
   2549   case ValID::t_Null:
   2550     if (!Ty->isPointerTy())
   2551       return Error(ID.Loc, "null must be a pointer type");
   2552     V = ConstantPointerNull::get(cast<PointerType>(Ty));
   2553     return false;
   2554   case ValID::t_Undef:
   2555     // FIXME: LabelTy should not be a first-class type.
   2556     if (!Ty->isFirstClassType() || Ty->isLabelTy())
   2557       return Error(ID.Loc, "invalid type for undef constant");
   2558     V = UndefValue::get(Ty);
   2559     return false;
   2560   case ValID::t_EmptyArray:
   2561     if (!Ty->isArrayTy() || cast<ArrayType>(Ty)->getNumElements() != 0)
   2562       return Error(ID.Loc, "invalid empty array initializer");
   2563     V = UndefValue::get(Ty);
   2564     return false;
   2565   case ValID::t_Zero:
   2566     // FIXME: LabelTy should not be a first-class type.
   2567     if (!Ty->isFirstClassType() || Ty->isLabelTy())
   2568       return Error(ID.Loc, "invalid type for null constant");
   2569     V = Constant::getNullValue(Ty);
   2570     return false;
   2571   case ValID::t_Constant:
   2572     if (ID.ConstantVal->getType() != Ty)
   2573       return Error(ID.Loc, "constant expression type mismatch");
   2574 
   2575     V = ID.ConstantVal;
   2576     return false;
   2577   case ValID::t_ConstantStruct:
   2578   case ValID::t_PackedConstantStruct:
   2579     if (StructType *ST = dyn_cast<StructType>(Ty)) {
   2580       if (ST->getNumElements() != ID.UIntVal)
   2581         return Error(ID.Loc,
   2582                      "initializer with struct type has wrong # elements");
   2583       if (ST->isPacked() != (ID.Kind == ValID::t_PackedConstantStruct))
   2584         return Error(ID.Loc, "packed'ness of initializer and type don't match");
   2585 
   2586       // Verify that the elements are compatible with the structtype.
   2587       for (unsigned i = 0, e = ID.UIntVal; i != e; ++i)
   2588         if (ID.ConstantStructElts[i]->getType() != ST->getElementType(i))
   2589           return Error(ID.Loc, "element " + Twine(i) +
   2590                     " of struct initializer doesn't match struct element type");
   2591 
   2592       V = ConstantStruct::get(ST, makeArrayRef(ID.ConstantStructElts,
   2593                                                ID.UIntVal));
   2594     } else
   2595       return Error(ID.Loc, "constant expression type mismatch");
   2596     return false;
   2597   }
   2598   llvm_unreachable("Invalid ValID");
   2599 }
   2600 
   2601 bool LLParser::ParseValue(Type *Ty, Value *&V, PerFunctionState *PFS) {
   2602   V = 0;
   2603   ValID ID;
   2604   return ParseValID(ID, PFS) ||
   2605          ConvertValIDToValue(Ty, ID, V, PFS);
   2606 }
   2607 
   2608 bool LLParser::ParseTypeAndValue(Value *&V, PerFunctionState *PFS) {
   2609   Type *Ty = 0;
   2610   return ParseType(Ty) ||
   2611          ParseValue(Ty, V, PFS);
   2612 }
   2613 
   2614 bool LLParser::ParseTypeAndBasicBlock(BasicBlock *&BB, LocTy &Loc,
   2615                                       PerFunctionState &PFS) {
   2616   Value *V;
   2617   Loc = Lex.getLoc();
   2618   if (ParseTypeAndValue(V, PFS)) return true;
   2619   if (!isa<BasicBlock>(V))
   2620     return Error(Loc, "expected a basic block");
   2621   BB = cast<BasicBlock>(V);
   2622   return false;
   2623 }
   2624 
   2625 
   2626 /// FunctionHeader
   2627 ///   ::= OptionalLinkage OptionalVisibility OptionalCallingConv OptRetAttrs
   2628 ///       OptUnnamedAddr Type GlobalName '(' ArgList ')' OptFuncAttrs OptSection
   2629 ///       OptionalAlign OptGC
   2630 bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
   2631   // Parse the linkage.
   2632   LocTy LinkageLoc = Lex.getLoc();
   2633   unsigned Linkage;
   2634 
   2635   unsigned Visibility;
   2636   Attributes RetAttrs;
   2637   CallingConv::ID CC;
   2638   Type *RetType = 0;
   2639   LocTy RetTypeLoc = Lex.getLoc();
   2640   if (ParseOptionalLinkage(Linkage) ||
   2641       ParseOptionalVisibility(Visibility) ||
   2642       ParseOptionalCallingConv(CC) ||
   2643       ParseOptionalAttrs(RetAttrs, 1) ||
   2644       ParseType(RetType, RetTypeLoc, true /*void allowed*/))
   2645     return true;
   2646 
   2647   // Verify that the linkage is ok.
   2648   switch ((GlobalValue::LinkageTypes)Linkage) {
   2649   case GlobalValue::ExternalLinkage:
   2650     break; // always ok.
   2651   case GlobalValue::DLLImportLinkage:
   2652   case GlobalValue::ExternalWeakLinkage:
   2653     if (isDefine)
   2654       return Error(LinkageLoc, "invalid linkage for function definition");
   2655     break;
   2656   case GlobalValue::PrivateLinkage:
   2657   case GlobalValue::LinkerPrivateLinkage:
   2658   case GlobalValue::LinkerPrivateWeakLinkage:
   2659   case GlobalValue::InternalLinkage:
   2660   case GlobalValue::AvailableExternallyLinkage:
   2661   case GlobalValue::LinkOnceAnyLinkage:
   2662   case GlobalValue::LinkOnceODRLinkage:
   2663   case GlobalValue::LinkOnceODRAutoHideLinkage:
   2664   case GlobalValue::WeakAnyLinkage:
   2665   case GlobalValue::WeakODRLinkage:
   2666   case GlobalValue::DLLExportLinkage:
   2667     if (!isDefine)
   2668       return Error(LinkageLoc, "invalid linkage for function declaration");
   2669     break;
   2670   case GlobalValue::AppendingLinkage:
   2671   case GlobalValue::CommonLinkage:
   2672     return Error(LinkageLoc, "invalid function linkage type");
   2673   }
   2674 
   2675   if (!FunctionType::isValidReturnType(RetType))
   2676     return Error(RetTypeLoc, "invalid function return type");
   2677 
   2678   LocTy NameLoc = Lex.getLoc();
   2679 
   2680   std::string FunctionName;
   2681   if (Lex.getKind() == lltok::GlobalVar) {
   2682     FunctionName = Lex.getStrVal();
   2683   } else if (Lex.getKind() == lltok::GlobalID) {     // @42 is ok.
   2684     unsigned NameID = Lex.getUIntVal();
   2685 
   2686     if (NameID != NumberedVals.size())
   2687       return TokError("function expected to be numbered '%" +
   2688                       Twine(NumberedVals.size()) + "'");
   2689   } else {
   2690     return TokError("expected function name");
   2691   }
   2692 
   2693   Lex.Lex();
   2694 
   2695   if (Lex.getKind() != lltok::lparen)
   2696     return TokError("expected '(' in function argument list");
   2697 
   2698   SmallVector<ArgInfo, 8> ArgList;
   2699   bool isVarArg;
   2700   Attributes FuncAttrs;
   2701   std::string Section;
   2702   unsigned Alignment;
   2703   std::string GC;
   2704   bool UnnamedAddr;
   2705   LocTy UnnamedAddrLoc;
   2706 
   2707   if (ParseArgumentList(ArgList, isVarArg) ||
   2708       ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr,
   2709                          &UnnamedAddrLoc) ||
   2710       ParseOptionalAttrs(FuncAttrs, 2) ||
   2711       (EatIfPresent(lltok::kw_section) &&
   2712        ParseStringConstant(Section)) ||
   2713       ParseOptionalAlignment(Alignment) ||
   2714       (EatIfPresent(lltok::kw_gc) &&
   2715        ParseStringConstant(GC)))
   2716     return true;
   2717 
   2718   // If the alignment was parsed as an attribute, move to the alignment field.
   2719   if (FuncAttrs & Attribute::Alignment) {
   2720     Alignment = Attribute::getAlignmentFromAttrs(FuncAttrs);
   2721     FuncAttrs &= ~Attribute::Alignment;
   2722   }
   2723 
   2724   // Okay, if we got here, the function is syntactically valid.  Convert types
   2725   // and do semantic checks.
   2726   std::vector<Type*> ParamTypeList;
   2727   SmallVector<AttributeWithIndex, 8> Attrs;
   2728 
   2729   if (RetAttrs != Attribute::None)
   2730     Attrs.push_back(AttributeWithIndex::get(0, RetAttrs));
   2731 
   2732   for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
   2733     ParamTypeList.push_back(ArgList[i].Ty);
   2734     if (ArgList[i].Attrs != Attribute::None)
   2735       Attrs.push_back(AttributeWithIndex::get(i+1, ArgList[i].Attrs));
   2736   }
   2737 
   2738   if (FuncAttrs != Attribute::None)
   2739     Attrs.push_back(AttributeWithIndex::get(~0, FuncAttrs));
   2740 
   2741   AttrListPtr PAL = AttrListPtr::get(Attrs);
   2742 
   2743   if (PAL.paramHasAttr(1, Attribute::StructRet) && !RetType->isVoidTy())
   2744     return Error(RetTypeLoc, "functions with 'sret' argument must return void");
   2745 
   2746   FunctionType *FT =
   2747     FunctionType::get(RetType, ParamTypeList, isVarArg);
   2748   PointerType *PFT = PointerType::getUnqual(FT);
   2749 
   2750   Fn = 0;
   2751   if (!FunctionName.empty()) {
   2752     // If this was a definition of a forward reference, remove the definition
   2753     // from the forward reference table and fill in the forward ref.
   2754     std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator FRVI =
   2755       ForwardRefVals.find(FunctionName);
   2756     if (FRVI != ForwardRefVals.end()) {
   2757       Fn = M->getFunction(FunctionName);
   2758       if (Fn->getType() != PFT)
   2759         return Error(FRVI->second.second, "invalid forward reference to "
   2760                      "function '" + FunctionName + "' with wrong type!");
   2761 
   2762       ForwardRefVals.erase(FRVI);
   2763     } else if ((Fn = M->getFunction(FunctionName))) {
   2764       // Reject redefinitions.
   2765       return Error(NameLoc, "invalid redefinition of function '" +
   2766                    FunctionName + "'");
   2767     } else if (M->getNamedValue(FunctionName)) {
   2768       return Error(NameLoc, "redefinition of function '@" + FunctionName + "'");
   2769     }
   2770 
   2771   } else {
   2772     // If this is a definition of a forward referenced function, make sure the
   2773     // types agree.
   2774     std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator I
   2775       = ForwardRefValIDs.find(NumberedVals.size());
   2776     if (I != ForwardRefValIDs.end()) {
   2777       Fn = cast<Function>(I->second.first);
   2778       if (Fn->getType() != PFT)
   2779         return Error(NameLoc, "type of definition and forward reference of '@" +
   2780                      Twine(NumberedVals.size()) + "' disagree");
   2781       ForwardRefValIDs.erase(I);
   2782     }
   2783   }
   2784 
   2785   if (Fn == 0)
   2786     Fn = Function::Create(FT, GlobalValue::ExternalLinkage, FunctionName, M);
   2787   else // Move the forward-reference to the correct spot in the module.
   2788     M->getFunctionList().splice(M->end(), M->getFunctionList(), Fn);
   2789 
   2790   if (FunctionName.empty())
   2791     NumberedVals.push_back(Fn);
   2792 
   2793   Fn->setLinkage((GlobalValue::LinkageTypes)Linkage);
   2794   Fn->setVisibility((GlobalValue::VisibilityTypes)Visibility);
   2795   Fn->setCallingConv(CC);
   2796   Fn->setAttributes(PAL);
   2797   Fn->setUnnamedAddr(UnnamedAddr);
   2798   Fn->setAlignment(Alignment);
   2799   Fn->setSection(Section);
   2800   if (!GC.empty()) Fn->setGC(GC.c_str());
   2801 
   2802   // Add all of the arguments we parsed to the function.
   2803   Function::arg_iterator ArgIt = Fn->arg_begin();
   2804   for (unsigned i = 0, e = ArgList.size(); i != e; ++i, ++ArgIt) {
   2805     // If the argument has a name, insert it into the argument symbol table.
   2806     if (ArgList[i].Name.empty()) continue;
   2807 
   2808     // Set the name, if it conflicted, it will be auto-renamed.
   2809     ArgIt->setName(ArgList[i].Name);
   2810 
   2811     if (ArgIt->getName() != ArgList[i].Name)
   2812       return Error(ArgList[i].Loc, "redefinition of argument '%" +
   2813                    ArgList[i].Name + "'");
   2814   }
   2815 
   2816   return false;
   2817 }
   2818 
   2819 
   2820 /// ParseFunctionBody
   2821 ///   ::= '{' BasicBlock+ '}'
   2822 ///
   2823 bool LLParser::ParseFunctionBody(Function &Fn) {
   2824   if (Lex.getKind() != lltok::lbrace)
   2825     return TokError("expected '{' in function body");
   2826   Lex.Lex();  // eat the {.
   2827 
   2828   int FunctionNumber = -1;
   2829   if (!Fn.hasName()) FunctionNumber = NumberedVals.size()-1;
   2830 
   2831   PerFunctionState PFS(*this, Fn, FunctionNumber);
   2832 
   2833   // We need at least one basic block.
   2834   if (Lex.getKind() == lltok::rbrace)
   2835     return TokError("function body requires at least one basic block");
   2836 
   2837   while (Lex.getKind() != lltok::rbrace)
   2838     if (ParseBasicBlock(PFS)) return true;
   2839 
   2840   // Eat the }.
   2841   Lex.Lex();
   2842 
   2843   // Verify function is ok.
   2844   return PFS.FinishFunction();
   2845 }
   2846 
   2847 /// ParseBasicBlock
   2848 ///   ::= LabelStr? Instruction*
   2849 bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
   2850   // If this basic block starts out with a name, remember it.
   2851   std::string Name;
   2852   LocTy NameLoc = Lex.getLoc();
   2853   if (Lex.getKind() == lltok::LabelStr) {
   2854     Name = Lex.getStrVal();
   2855     Lex.Lex();
   2856   }
   2857 
   2858   BasicBlock *BB = PFS.DefineBB(Name, NameLoc);
   2859   if (BB == 0) return true;
   2860 
   2861   std::string NameStr;
   2862 
   2863   // Parse the instructions in this block until we get a terminator.
   2864   Instruction *Inst;
   2865   SmallVector<std::pair<unsigned, MDNode *>, 4> MetadataOnInst;
   2866   do {
   2867     // This instruction may have three possibilities for a name: a) none
   2868     // specified, b) name specified "%foo =", c) number specified: "%4 =".
   2869     LocTy NameLoc = Lex.getLoc();
   2870     int NameID = -1;
   2871     NameStr = "";
   2872 
   2873     if (Lex.getKind() == lltok::LocalVarID) {
   2874       NameID = Lex.getUIntVal();
   2875       Lex.Lex();
   2876       if (ParseToken(lltok::equal, "expected '=' after instruction id"))
   2877         return true;
   2878     } else if (Lex.getKind() == lltok::LocalVar) {
   2879       NameStr = Lex.getStrVal();
   2880       Lex.Lex();
   2881       if (ParseToken(lltok::equal, "expected '=' after instruction name"))
   2882         return true;
   2883     }
   2884 
   2885     switch (ParseInstruction(Inst, BB, PFS)) {
   2886     default: llvm_unreachable("Unknown ParseInstruction result!");
   2887     case InstError: return true;
   2888     case InstNormal:
   2889       BB->getInstList().push_back(Inst);
   2890 
   2891       // With a normal result, we check to see if the instruction is followed by
   2892       // a comma and metadata.
   2893       if (EatIfPresent(lltok::comma))
   2894         if (ParseInstructionMetadata(Inst, &PFS))
   2895           return true;
   2896       break;
   2897     case InstExtraComma:
   2898       BB->getInstList().push_back(Inst);
   2899 
   2900       // If the instruction parser ate an extra comma at the end of it, it
   2901       // *must* be followed by metadata.
   2902       if (ParseInstructionMetadata(Inst, &PFS))
   2903         return true;
   2904       break;
   2905     }
   2906 
   2907     // Set the name on the instruction.
   2908     if (PFS.SetInstName(NameID, NameStr, NameLoc, Inst)) return true;
   2909   } while (!isa<TerminatorInst>(Inst));
   2910 
   2911   return false;
   2912 }
   2913 
   2914 //===----------------------------------------------------------------------===//
   2915 // Instruction Parsing.
   2916 //===----------------------------------------------------------------------===//
   2917 
   2918 /// ParseInstruction - Parse one of the many different instructions.
   2919 ///
   2920 int LLParser::ParseInstruction(Instruction *&Inst, BasicBlock *BB,
   2921                                PerFunctionState &PFS) {
   2922   lltok::Kind Token = Lex.getKind();
   2923   if (Token == lltok::Eof)
   2924     return TokError("found end of file when expecting more instructions");
   2925   LocTy Loc = Lex.getLoc();
   2926   unsigned KeywordVal = Lex.getUIntVal();
   2927   Lex.Lex();  // Eat the keyword.
   2928 
   2929   switch (Token) {
   2930   default:                    return Error(Loc, "expected instruction opcode");
   2931   // Terminator Instructions.
   2932   case lltok::kw_unreachable: Inst = new UnreachableInst(Context); return false;
   2933   case lltok::kw_ret:         return ParseRet(Inst, BB, PFS);
   2934   case lltok::kw_br:          return ParseBr(Inst, PFS);
   2935   case lltok::kw_switch:      return ParseSwitch(Inst, PFS);
   2936   case lltok::kw_indirectbr:  return ParseIndirectBr(Inst, PFS);
   2937   case lltok::kw_invoke:      return ParseInvoke(Inst, PFS);
   2938   case lltok::kw_resume:      return ParseResume(Inst, PFS);
   2939   // Binary Operators.
   2940   case lltok::kw_add:
   2941   case lltok::kw_sub:
   2942   case lltok::kw_mul:
   2943   case lltok::kw_shl: {
   2944     bool NUW = EatIfPresent(lltok::kw_nuw);
   2945     bool NSW = EatIfPresent(lltok::kw_nsw);
   2946     if (!NUW) NUW = EatIfPresent(lltok::kw_nuw);
   2947 
   2948     if (ParseArithmetic(Inst, PFS, KeywordVal, 1)) return true;
   2949 
   2950     if (NUW) cast<BinaryOperator>(Inst)->setHasNoUnsignedWrap(true);
   2951     if (NSW) cast<BinaryOperator>(Inst)->setHasNoSignedWrap(true);
   2952     return false;
   2953   }
   2954   case lltok::kw_fadd:
   2955   case lltok::kw_fsub:
   2956   case lltok::kw_fmul:    return ParseArithmetic(Inst, PFS, KeywordVal, 2);
   2957 
   2958   case lltok::kw_sdiv:
   2959   case lltok::kw_udiv:
   2960   case lltok::kw_lshr:
   2961   case lltok::kw_ashr: {
   2962     bool Exact = EatIfPresent(lltok::kw_exact);
   2963 
   2964     if (ParseArithmetic(Inst, PFS, KeywordVal, 1)) return true;
   2965     if (Exact) cast<BinaryOperator>(Inst)->setIsExact(true);
   2966     return false;
   2967   }
   2968 
   2969   case lltok::kw_urem:
   2970   case lltok::kw_srem:   return ParseArithmetic(Inst, PFS, KeywordVal, 1);
   2971   case lltok::kw_fdiv:
   2972   case lltok::kw_frem:   return ParseArithmetic(Inst, PFS, KeywordVal, 2);
   2973   case lltok::kw_and:
   2974   case lltok::kw_or:
   2975   case lltok::kw_xor:    return ParseLogical(Inst, PFS, KeywordVal);
   2976   case lltok::kw_icmp:
   2977   case lltok::kw_fcmp:   return ParseCompare(Inst, PFS, KeywordVal);
   2978   // Casts.
   2979   case lltok::kw_trunc:
   2980   case lltok::kw_zext:
   2981   case lltok::kw_sext:
   2982   case lltok::kw_fptrunc:
   2983   case lltok::kw_fpext:
   2984   case lltok::kw_bitcast:
   2985   case lltok::kw_uitofp:
   2986   case lltok::kw_sitofp:
   2987   case lltok::kw_fptoui:
   2988   case lltok::kw_fptosi:
   2989   case lltok::kw_inttoptr:
   2990   case lltok::kw_ptrtoint:       return ParseCast(Inst, PFS, KeywordVal);
   2991   // Other.
   2992   case lltok::kw_select:         return ParseSelect(Inst, PFS);
   2993   case lltok::kw_va_arg:         return ParseVA_Arg(Inst, PFS);
   2994   case lltok::kw_extractelement: return ParseExtractElement(Inst, PFS);
   2995   case lltok::kw_insertelement:  return ParseInsertElement(Inst, PFS);
   2996   case lltok::kw_shufflevector:  return ParseShuffleVector(Inst, PFS);
   2997   case lltok::kw_phi:            return ParsePHI(Inst, PFS);
   2998   case lltok::kw_landingpad:     return ParseLandingPad(Inst, PFS);
   2999   case lltok::kw_call:           return ParseCall(Inst, PFS, false);
   3000   case lltok::kw_tail:           return ParseCall(Inst, PFS, true);
   3001   // Memory.
   3002   case lltok::kw_alloca:         return ParseAlloc(Inst, PFS);
   3003   case lltok::kw_load:           return ParseLoad(Inst, PFS);
   3004   case lltok::kw_store:          return ParseStore(Inst, PFS);
   3005   case lltok::kw_cmpxchg:        return ParseCmpXchg(Inst, PFS);
   3006   case lltok::kw_atomicrmw:      return ParseAtomicRMW(Inst, PFS);
   3007   case lltok::kw_fence:          return ParseFence(Inst, PFS);
   3008   case lltok::kw_getelementptr: return ParseGetElementPtr(Inst, PFS);
   3009   case lltok::kw_extractvalue:  return ParseExtractValue(Inst, PFS);
   3010   case lltok::kw_insertvalue:   return ParseInsertValue(Inst, PFS);
   3011   }
   3012 }
   3013 
   3014 /// ParseCmpPredicate - Parse an integer or fp predicate, based on Kind.
   3015 bool LLParser::ParseCmpPredicate(unsigned &P, unsigned Opc) {
   3016   if (Opc == Instruction::FCmp) {
   3017     switch (Lex.getKind()) {
   3018     default: TokError("expected fcmp predicate (e.g. 'oeq')");
   3019     case lltok::kw_oeq: P = CmpInst::FCMP_OEQ; break;
   3020     case lltok::kw_one: P = CmpInst::FCMP_ONE; break;
   3021     case lltok::kw_olt: P = CmpInst::FCMP_OLT; break;
   3022     case lltok::kw_ogt: P = CmpInst::FCMP_OGT; break;
   3023     case lltok::kw_ole: P = CmpInst::FCMP_OLE; break;
   3024     case lltok::kw_oge: P = CmpInst::FCMP_OGE; break;
   3025     case lltok::kw_ord: P = CmpInst::FCMP_ORD; break;
   3026     case lltok::kw_uno: P = CmpInst::FCMP_UNO; break;
   3027     case lltok::kw_ueq: P = CmpInst::FCMP_UEQ; break;
   3028     case lltok::kw_une: P = CmpInst::FCMP_UNE; break;
   3029     case lltok::kw_ult: P = CmpInst::FCMP_ULT; break;
   3030     case lltok::kw_ugt: P = CmpInst::FCMP_UGT; break;
   3031     case lltok::kw_ule: P = CmpInst::FCMP_ULE; break;
   3032     case lltok::kw_uge: P = CmpInst::FCMP_UGE; break;
   3033     case lltok::kw_true: P = CmpInst::FCMP_TRUE; break;
   3034     case lltok::kw_false: P = CmpInst::FCMP_FALSE; break;
   3035     }
   3036   } else {
   3037     switch (Lex.getKind()) {
   3038     default: TokError("expected icmp predicate (e.g. 'eq')");
   3039     case lltok::kw_eq:  P = CmpInst::ICMP_EQ; break;
   3040     case lltok::kw_ne:  P = CmpInst::ICMP_NE; break;
   3041     case lltok::kw_slt: P = CmpInst::ICMP_SLT; break;
   3042     case lltok::kw_sgt: P = CmpInst::ICMP_SGT; break;
   3043     case lltok::kw_sle: P = CmpInst::ICMP_SLE; break;
   3044     case lltok::kw_sge: P = CmpInst::ICMP_SGE; break;
   3045     case lltok::kw_ult: P = CmpInst::ICMP_ULT; break;
   3046     case lltok::kw_ugt: P = CmpInst::ICMP_UGT; break;
   3047     case lltok::kw_ule: P = CmpInst::ICMP_ULE; break;
   3048     case lltok::kw_uge: P = CmpInst::ICMP_UGE; break;
   3049     }
   3050   }
   3051   Lex.Lex();
   3052   return false;
   3053 }
   3054 
   3055 //===----------------------------------------------------------------------===//
   3056 // Terminator Instructions.
   3057 //===----------------------------------------------------------------------===//
   3058 
   3059 /// ParseRet - Parse a return instruction.
   3060 ///   ::= 'ret' void (',' !dbg, !1)*
   3061 ///   ::= 'ret' TypeAndValue (',' !dbg, !1)*
   3062 bool LLParser::ParseRet(Instruction *&Inst, BasicBlock *BB,
   3063                         PerFunctionState &PFS) {
   3064   SMLoc TypeLoc = Lex.getLoc();
   3065   Type *Ty = 0;
   3066   if (ParseType(Ty, true /*void allowed*/)) return true;
   3067 
   3068   Type *ResType = PFS.getFunction().getReturnType();
   3069 
   3070   if (Ty->isVoidTy()) {
   3071     if (!ResType->isVoidTy())
   3072       return Error(TypeLoc, "value doesn't match function result type '" +
   3073                    getTypeString(ResType) + "'");
   3074 
   3075     Inst = ReturnInst::Create(Context);
   3076     return false;
   3077   }
   3078 
   3079   Value *RV;
   3080   if (ParseValue(Ty, RV, PFS)) return true;
   3081 
   3082   if (ResType != RV->getType())
   3083     return Error(TypeLoc, "value doesn't match function result type '" +
   3084                  getTypeString(ResType) + "'");
   3085 
   3086   Inst = ReturnInst::Create(Context, RV);
   3087   return false;
   3088 }
   3089 
   3090 
   3091 /// ParseBr
   3092 ///   ::= 'br' TypeAndValue
   3093 ///   ::= 'br' TypeAndValue ',' TypeAndValue ',' TypeAndValue
   3094 bool LLParser::ParseBr(Instruction *&Inst, PerFunctionState &PFS) {
   3095   LocTy Loc, Loc2;
   3096   Value *Op0;
   3097   BasicBlock *Op1, *Op2;
   3098   if (ParseTypeAndValue(Op0, Loc, PFS)) return true;
   3099 
   3100   if (BasicBlock *BB = dyn_cast<BasicBlock>(Op0)) {
   3101     Inst = BranchInst::Create(BB);
   3102     return false;
   3103   }
   3104 
   3105   if (Op0->getType() != Type::getInt1Ty(Context))
   3106     return Error(Loc, "branch condition must have 'i1' type");
   3107 
   3108   if (ParseToken(lltok::comma, "expected ',' after branch condition") ||
   3109       ParseTypeAndBasicBlock(Op1, Loc, PFS) ||
   3110       ParseToken(lltok::comma, "expected ',' after true destination") ||
   3111       ParseTypeAndBasicBlock(Op2, Loc2, PFS))
   3112     return true;
   3113 
   3114   Inst = BranchInst::Create(Op1, Op2, Op0);
   3115   return false;
   3116 }
   3117 
   3118 /// ParseSwitch
   3119 ///  Instruction
   3120 ///    ::= 'switch' TypeAndValue ',' TypeAndValue '[' JumpTable ']'
   3121 ///  JumpTable
   3122 ///    ::= (TypeAndValue ',' TypeAndValue)*
   3123 bool LLParser::ParseSwitch(Instruction *&Inst, PerFunctionState &PFS) {
   3124   LocTy CondLoc, BBLoc;
   3125   Value *Cond;
   3126   BasicBlock *DefaultBB;
   3127   if (ParseTypeAndValue(Cond, CondLoc, PFS) ||
   3128       ParseToken(lltok::comma, "expected ',' after switch condition") ||
   3129       ParseTypeAndBasicBlock(DefaultBB, BBLoc, PFS) ||
   3130       ParseToken(lltok::lsquare, "expected '[' with switch table"))
   3131     return true;
   3132 
   3133   if (!Cond->getType()->isIntegerTy())
   3134     return Error(CondLoc, "switch condition must have integer type");
   3135 
   3136   // Parse the jump table pairs.
   3137   SmallPtrSet<Value*, 32> SeenCases;
   3138   SmallVector<std::pair<ConstantInt*, BasicBlock*>, 32> Table;
   3139   while (Lex.getKind() != lltok::rsquare) {
   3140     Value *Constant;
   3141     BasicBlock *DestBB;
   3142 
   3143     if (ParseTypeAndValue(Constant, CondLoc, PFS) ||
   3144         ParseToken(lltok::comma, "expected ',' after case value") ||
   3145         ParseTypeAndBasicBlock(DestBB, PFS))
   3146       return true;
   3147 
   3148     if (!SeenCases.insert(Constant))
   3149       return Error(CondLoc, "duplicate case value in switch");
   3150     if (!isa<ConstantInt>(Constant))
   3151       return Error(CondLoc, "case value is not a constant integer");
   3152 
   3153     Table.push_back(std::make_pair(cast<ConstantInt>(Constant), DestBB));
   3154   }
   3155 
   3156   Lex.Lex();  // Eat the ']'.
   3157 
   3158   SwitchInst *SI = SwitchInst::Create(Cond, DefaultBB, Table.size());
   3159   for (unsigned i = 0, e = Table.size(); i != e; ++i)
   3160     SI->addCase(Table[i].first, Table[i].second);
   3161   Inst = SI;
   3162   return false;
   3163 }
   3164 
   3165 /// ParseIndirectBr
   3166 ///  Instruction
   3167 ///    ::= 'indirectbr' TypeAndValue ',' '[' LabelList ']'
   3168 bool LLParser::ParseIndirectBr(Instruction *&Inst, PerFunctionState &PFS) {
   3169   LocTy AddrLoc;
   3170   Value *Address;
   3171   if (ParseTypeAndValue(Address, AddrLoc, PFS) ||
   3172       ParseToken(lltok::comma, "expected ',' after indirectbr address") ||
   3173       ParseToken(lltok::lsquare, "expected '[' with indirectbr"))
   3174     return true;
   3175 
   3176   if (!Address->getType()->isPointerTy())
   3177     return Error(AddrLoc, "indirectbr address must have pointer type");
   3178 
   3179   // Parse the destination list.
   3180   SmallVector<BasicBlock*, 16> DestList;
   3181 
   3182   if (Lex.getKind() != lltok::rsquare) {
   3183     BasicBlock *DestBB;
   3184     if (ParseTypeAndBasicBlock(DestBB, PFS))
   3185       return true;
   3186     DestList.push_back(DestBB);
   3187 
   3188     while (EatIfPresent(lltok::comma)) {
   3189       if (ParseTypeAndBasicBlock(DestBB, PFS))
   3190         return true;
   3191       DestList.push_back(DestBB);
   3192     }
   3193   }
   3194 
   3195   if (ParseToken(lltok::rsquare, "expected ']' at end of block list"))
   3196     return true;
   3197 
   3198   IndirectBrInst *IBI = IndirectBrInst::Create(Address, DestList.size());
   3199   for (unsigned i = 0, e = DestList.size(); i != e; ++i)
   3200     IBI->addDestination(DestList[i]);
   3201   Inst = IBI;
   3202   return false;
   3203 }
   3204 
   3205 
   3206 /// ParseInvoke
   3207 ///   ::= 'invoke' OptionalCallingConv OptionalAttrs Type Value ParamList
   3208 ///       OptionalAttrs 'to' TypeAndValue 'unwind' TypeAndValue
   3209 bool LLParser::ParseInvoke(Instruction *&Inst, PerFunctionState &PFS) {
   3210   LocTy CallLoc = Lex.getLoc();
   3211   Attributes RetAttrs, FnAttrs;
   3212   CallingConv::ID CC;
   3213   Type *RetType = 0;
   3214   LocTy RetTypeLoc;
   3215   ValID CalleeID;
   3216   SmallVector<ParamInfo, 16> ArgList;
   3217 
   3218   BasicBlock *NormalBB, *UnwindBB;
   3219   if (ParseOptionalCallingConv(CC) ||
   3220       ParseOptionalAttrs(RetAttrs, 1) ||
   3221       ParseType(RetType, RetTypeLoc, true /*void allowed*/) ||
   3222       ParseValID(CalleeID) ||
   3223       ParseParameterList(ArgList, PFS) ||
   3224       ParseOptionalAttrs(FnAttrs, 2) ||
   3225       ParseToken(lltok::kw_to, "expected 'to' in invoke") ||
   3226       ParseTypeAndBasicBlock(NormalBB, PFS) ||
   3227       ParseToken(lltok::kw_unwind, "expected 'unwind' in invoke") ||
   3228       ParseTypeAndBasicBlock(UnwindBB, PFS))
   3229     return true;
   3230 
   3231   // If RetType is a non-function pointer type, then this is the short syntax
   3232   // for the call, which means that RetType is just the return type.  Infer the
   3233   // rest of the function argument types from the arguments that are present.
   3234   PointerType *PFTy = 0;
   3235   FunctionType *Ty = 0;
   3236   if (!(PFTy = dyn_cast<PointerType>(RetType)) ||
   3237       !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
   3238     // Pull out the types of all of the arguments...
   3239     std::vector<Type*> ParamTypes;
   3240     for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
   3241       ParamTypes.push_back(ArgList[i].V->getType());
   3242 
   3243     if (!FunctionType::isValidReturnType(RetType))
   3244       return Error(RetTypeLoc, "Invalid result type for LLVM function");
   3245 
   3246     Ty = FunctionType::get(RetType, ParamTypes, false);
   3247     PFTy = PointerType::getUnqual(Ty);
   3248   }
   3249 
   3250   // Look up the callee.
   3251   Value *Callee;
   3252   if (ConvertValIDToValue(PFTy, CalleeID, Callee, &PFS)) return true;
   3253 
   3254   // Set up the Attributes for the function.
   3255   SmallVector<AttributeWithIndex, 8> Attrs;
   3256   if (RetAttrs != Attribute::None)
   3257     Attrs.push_back(AttributeWithIndex::get(0, RetAttrs));
   3258 
   3259   SmallVector<Value*, 8> Args;
   3260 
   3261   // Loop through FunctionType's arguments and ensure they are specified
   3262   // correctly.  Also, gather any parameter attributes.
   3263   FunctionType::param_iterator I = Ty->param_begin();
   3264   FunctionType::param_iterator E = Ty->param_end();
   3265   for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
   3266     Type *ExpectedTy = 0;
   3267     if (I != E) {
   3268       ExpectedTy = *I++;
   3269     } else if (!Ty->isVarArg()) {
   3270       return Error(ArgList[i].Loc, "too many arguments specified");
   3271     }
   3272 
   3273     if (ExpectedTy && ExpectedTy != ArgList[i].V->getType())
   3274       return Error(ArgList[i].Loc, "argument is not of expected type '" +
   3275                    getTypeString(ExpectedTy) + "'");
   3276     Args.push_back(ArgList[i].V);
   3277     if (ArgList[i].Attrs != Attribute::None)
   3278       Attrs.push_back(AttributeWithIndex::get(i+1, ArgList[i].Attrs));
   3279   }
   3280 
   3281   if (I != E)
   3282     return Error(CallLoc, "not enough parameters specified for call");
   3283 
   3284   if (FnAttrs != Attribute::None)
   3285     Attrs.push_back(AttributeWithIndex::get(~0, FnAttrs));
   3286 
   3287   // Finish off the Attributes and check them
   3288   AttrListPtr PAL = AttrListPtr::get(Attrs);
   3289 
   3290   InvokeInst *II = InvokeInst::Create(Callee, NormalBB, UnwindBB, Args);
   3291   II->setCallingConv(CC);
   3292   II->setAttributes(PAL);
   3293   Inst = II;
   3294   return false;
   3295 }
   3296 
   3297 /// ParseResume
   3298 ///   ::= 'resume' TypeAndValue
   3299 bool LLParser::ParseResume(Instruction *&Inst, PerFunctionState &PFS) {
   3300   Value *Exn; LocTy ExnLoc;
   3301   if (ParseTypeAndValue(Exn, ExnLoc, PFS))
   3302     return true;
   3303 
   3304   ResumeInst *RI = ResumeInst::Create(Exn);
   3305   Inst = RI;
   3306   return false;
   3307 }
   3308 
   3309 //===----------------------------------------------------------------------===//
   3310 // Binary Operators.
   3311 //===----------------------------------------------------------------------===//
   3312 
   3313 /// ParseArithmetic
   3314 ///  ::= ArithmeticOps TypeAndValue ',' Value
   3315 ///
   3316 /// If OperandType is 0, then any FP or integer operand is allowed.  If it is 1,
   3317 /// then any integer operand is allowed, if it is 2, any fp operand is allowed.
   3318 bool LLParser::ParseArithmetic(Instruction *&Inst, PerFunctionState &PFS,
   3319                                unsigned Opc, unsigned OperandType) {
   3320   LocTy Loc; Value *LHS, *RHS;
   3321   if (ParseTypeAndValue(LHS, Loc, PFS) ||
   3322       ParseToken(lltok::comma, "expected ',' in arithmetic operation") ||
   3323       ParseValue(LHS->getType(), RHS, PFS))
   3324     return true;
   3325 
   3326   bool Valid;
   3327   switch (OperandType) {
   3328   default: llvm_unreachable("Unknown operand type!");
   3329   case 0: // int or FP.
   3330     Valid = LHS->getType()->isIntOrIntVectorTy() ||
   3331             LHS->getType()->isFPOrFPVectorTy();
   3332     break;
   3333   case 1: Valid = LHS->getType()->isIntOrIntVectorTy(); break;
   3334   case 2: Valid = LHS->getType()->isFPOrFPVectorTy(); break;
   3335   }
   3336 
   3337   if (!Valid)
   3338     return Error(Loc, "invalid operand type for instruction");
   3339 
   3340   Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS);
   3341   return false;
   3342 }
   3343 
   3344 /// ParseLogical
   3345 ///  ::= ArithmeticOps TypeAndValue ',' Value {
   3346 bool LLParser::ParseLogical(Instruction *&Inst, PerFunctionState &PFS,
   3347                             unsigned Opc) {
   3348   LocTy Loc; Value *LHS, *RHS;
   3349   if (ParseTypeAndValue(LHS, Loc, PFS) ||
   3350       ParseToken(lltok::comma, "expected ',' in logical operation") ||
   3351       ParseValue(LHS->getType(), RHS, PFS))
   3352     return true;
   3353 
   3354   if (!LHS->getType()->isIntOrIntVectorTy())
   3355     return Error(Loc,"instruction requires integer or integer vector operands");
   3356 
   3357   Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS);
   3358   return false;
   3359 }
   3360 
   3361 
   3362 /// ParseCompare
   3363 ///  ::= 'icmp' IPredicates TypeAndValue ',' Value
   3364 ///  ::= 'fcmp' FPredicates TypeAndValue ',' Value
   3365 bool LLParser::ParseCompare(Instruction *&Inst, PerFunctionState &PFS,
   3366                             unsigned Opc) {
   3367   // Parse the integer/fp comparison predicate.
   3368   LocTy Loc;
   3369   unsigned Pred;
   3370   Value *LHS, *RHS;
   3371   if (ParseCmpPredicate(Pred, Opc) ||
   3372       ParseTypeAndValue(LHS, Loc, PFS) ||
   3373       ParseToken(lltok::comma, "expected ',' after compare value") ||
   3374       ParseValue(LHS->getType(), RHS, PFS))
   3375     return true;
   3376 
   3377   if (Opc == Instruction::FCmp) {
   3378     if (!LHS->getType()->isFPOrFPVectorTy())
   3379       return Error(Loc, "fcmp requires floating point operands");
   3380     Inst = new FCmpInst(CmpInst::Predicate(Pred), LHS, RHS);
   3381   } else {
   3382     assert(Opc == Instruction::ICmp && "Unknown opcode for CmpInst!");
   3383     if (!LHS->getType()->isIntOrIntVectorTy() &&
   3384         !LHS->getType()->getScalarType()->isPointerTy())
   3385       return Error(Loc, "icmp requires integer operands");
   3386     Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS);
   3387   }
   3388   return false;
   3389 }
   3390 
   3391 //===----------------------------------------------------------------------===//
   3392 // Other Instructions.
   3393 //===----------------------------------------------------------------------===//
   3394 
   3395 
   3396 /// ParseCast
   3397 ///   ::= CastOpc TypeAndValue 'to' Type
   3398 bool LLParser::ParseCast(Instruction *&Inst, PerFunctionState &PFS,
   3399                          unsigned Opc) {
   3400   LocTy Loc;
   3401   Value *Op;
   3402   Type *DestTy = 0;
   3403   if (ParseTypeAndValue(Op, Loc, PFS) ||
   3404       ParseToken(lltok::kw_to, "expected 'to' after cast value") ||
   3405       ParseType(DestTy))
   3406     return true;
   3407 
   3408   if (!CastInst::castIsValid((Instruction::CastOps)Opc, Op, DestTy)) {
   3409     CastInst::castIsValid((Instruction::CastOps)Opc, Op, DestTy);
   3410     return Error(Loc, "invalid cast opcode for cast from '" +
   3411                  getTypeString(Op->getType()) + "' to '" +
   3412                  getTypeString(DestTy) + "'");
   3413   }
   3414   Inst = CastInst::Create((Instruction::CastOps)Opc, Op, DestTy);
   3415   return false;
   3416 }
   3417 
   3418 /// ParseSelect
   3419 ///   ::= 'select' TypeAndValue ',' TypeAndValue ',' TypeAndValue
   3420 bool LLParser::ParseSelect(Instruction *&Inst, PerFunctionState &PFS) {
   3421   LocTy Loc;
   3422   Value *Op0, *Op1, *Op2;
   3423   if (ParseTypeAndValue(Op0, Loc, PFS) ||
   3424       ParseToken(lltok::comma, "expected ',' after select condition") ||
   3425       ParseTypeAndValue(Op1, PFS) ||
   3426       ParseToken(lltok::comma, "expected ',' after select value") ||
   3427       ParseTypeAndValue(Op2, PFS))
   3428     return true;
   3429 
   3430   if (const char *Reason = SelectInst::areInvalidOperands(Op0, Op1, Op2))
   3431     return Error(Loc, Reason);
   3432 
   3433   Inst = SelectInst::Create(Op0, Op1, Op2);
   3434   return false;
   3435 }
   3436 
   3437 /// ParseVA_Arg
   3438 ///   ::= 'va_arg' TypeAndValue ',' Type
   3439 bool LLParser::ParseVA_Arg(Instruction *&Inst, PerFunctionState &PFS) {
   3440   Value *Op;
   3441   Type *EltTy = 0;
   3442   LocTy TypeLoc;
   3443   if (ParseTypeAndValue(Op, PFS) ||
   3444       ParseToken(lltok::comma, "expected ',' after vaarg operand") ||
   3445       ParseType(EltTy, TypeLoc))
   3446     return true;
   3447 
   3448   if (!EltTy->isFirstClassType())
   3449     return Error(TypeLoc, "va_arg requires operand with first class type");
   3450 
   3451   Inst = new VAArgInst(Op, EltTy);
   3452   return false;
   3453 }
   3454 
   3455 /// ParseExtractElement
   3456 ///   ::= 'extractelement' TypeAndValue ',' TypeAndValue
   3457 bool LLParser::ParseExtractElement(Instruction *&Inst, PerFunctionState &PFS) {
   3458   LocTy Loc;
   3459   Value *Op0, *Op1;
   3460   if (ParseTypeAndValue(Op0, Loc, PFS) ||
   3461       ParseToken(lltok::comma, "expected ',' after extract value") ||
   3462       ParseTypeAndValue(Op1, PFS))
   3463     return true;
   3464 
   3465   if (!ExtractElementInst::isValidOperands(Op0, Op1))
   3466     return Error(Loc, "invalid extractelement operands");
   3467 
   3468   Inst = ExtractElementInst::Create(Op0, Op1);
   3469   return false;
   3470 }
   3471 
   3472 /// ParseInsertElement
   3473 ///   ::= 'insertelement' TypeAndValue ',' TypeAndValue ',' TypeAndValue
   3474 bool LLParser::ParseInsertElement(Instruction *&Inst, PerFunctionState &PFS) {
   3475   LocTy Loc;
   3476   Value *Op0, *Op1, *Op2;
   3477   if (ParseTypeAndValue(Op0, Loc, PFS) ||
   3478       ParseToken(lltok::comma, "expected ',' after insertelement value") ||
   3479       ParseTypeAndValue(Op1, PFS) ||
   3480       ParseToken(lltok::comma, "expected ',' after insertelement value") ||
   3481       ParseTypeAndValue(Op2, PFS))
   3482     return true;
   3483 
   3484   if (!InsertElementInst::isValidOperands(Op0, Op1, Op2))
   3485     return Error(Loc, "invalid insertelement operands");
   3486 
   3487   Inst = InsertElementInst::Create(Op0, Op1, Op2);
   3488   return false;
   3489 }
   3490 
   3491 /// ParseShuffleVector
   3492 ///   ::= 'shufflevector' TypeAndValue ',' TypeAndValue ',' TypeAndValue
   3493 bool LLParser::ParseShuffleVector(Instruction *&Inst, PerFunctionState &PFS) {
   3494   LocTy Loc;
   3495   Value *Op0, *Op1, *Op2;
   3496   if (ParseTypeAndValue(Op0, Loc, PFS) ||
   3497       ParseToken(lltok::comma, "expected ',' after shuffle mask") ||
   3498       ParseTypeAndValue(Op1, PFS) ||
   3499       ParseToken(lltok::comma, "expected ',' after shuffle value") ||
   3500       ParseTypeAndValue(Op2, PFS))
   3501     return true;
   3502 
   3503   if (!ShuffleVectorInst::isValidOperands(Op0, Op1, Op2))
   3504     return Error(Loc, "invalid shufflevector operands");
   3505 
   3506   Inst = new ShuffleVectorInst(Op0, Op1, Op2);
   3507   return false;
   3508 }
   3509 
   3510 /// ParsePHI
   3511 ///   ::= 'phi' Type '[' Value ',' Value ']' (',' '[' Value ',' Value ']')*
   3512 int LLParser::ParsePHI(Instruction *&Inst, PerFunctionState &PFS) {
   3513   Type *Ty = 0;  LocTy TypeLoc;
   3514   Value *Op0, *Op1;
   3515 
   3516   if (ParseType(Ty, TypeLoc) ||
   3517       ParseToken(lltok::lsquare, "expected '[' in phi value list") ||
   3518       ParseValue(Ty, Op0, PFS) ||
   3519       ParseToken(lltok::comma, "expected ',' after insertelement value") ||
   3520       ParseValue(Type::getLabelTy(Context), Op1, PFS) ||
   3521       ParseToken(lltok::rsquare, "expected ']' in phi value list"))
   3522     return true;
   3523 
   3524   bool AteExtraComma = false;
   3525   SmallVector<std::pair<Value*, BasicBlock*>, 16> PHIVals;
   3526   while (1) {
   3527     PHIVals.push_back(std::make_pair(Op0, cast<BasicBlock>(Op1)));
   3528 
   3529     if (!EatIfPresent(lltok::comma))
   3530       break;
   3531 
   3532     if (Lex.getKind() == lltok::MetadataVar) {
   3533       AteExtraComma = true;
   3534       break;
   3535     }
   3536 
   3537     if (ParseToken(lltok::lsquare, "expected '[' in phi value list") ||
   3538         ParseValue(Ty, Op0, PFS) ||
   3539         ParseToken(lltok::comma, "expected ',' after insertelement value") ||
   3540         ParseValue(Type::getLabelTy(Context), Op1, PFS) ||
   3541         ParseToken(lltok::rsquare, "expected ']' in phi value list"))
   3542       return true;
   3543   }
   3544 
   3545   if (!Ty->isFirstClassType())
   3546     return Error(TypeLoc, "phi node must have first class type");
   3547 
   3548   PHINode *PN = PHINode::Create(Ty, PHIVals.size());
   3549   for (unsigned i = 0, e = PHIVals.size(); i != e; ++i)
   3550     PN->addIncoming(PHIVals[i].first, PHIVals[i].second);
   3551   Inst = PN;
   3552   return AteExtraComma ? InstExtraComma : InstNormal;
   3553 }
   3554 
   3555 /// ParseLandingPad
   3556 ///   ::= 'landingpad' Type 'personality' TypeAndValue 'cleanup'? Clause+
   3557 /// Clause
   3558 ///   ::= 'catch' TypeAndValue
   3559 ///   ::= 'filter'
   3560 ///   ::= 'filter' TypeAndValue ( ',' TypeAndValue )*
   3561 bool LLParser::ParseLandingPad(Instruction *&Inst, PerFunctionState &PFS) {
   3562   Type *Ty = 0; LocTy TyLoc;
   3563   Value *PersFn; LocTy PersFnLoc;
   3564 
   3565   if (ParseType(Ty, TyLoc) ||
   3566       ParseToken(lltok::kw_personality, "expected 'personality'") ||
   3567       ParseTypeAndValue(PersFn, PersFnLoc, PFS))
   3568     return true;
   3569 
   3570   LandingPadInst *LP = LandingPadInst::Create(Ty, PersFn, 0);
   3571   LP->setCleanup(EatIfPresent(lltok::kw_cleanup));
   3572 
   3573   while (Lex.getKind() == lltok::kw_catch || Lex.getKind() == lltok::kw_filter){
   3574     LandingPadInst::ClauseType CT;
   3575     if (EatIfPresent(lltok::kw_catch))
   3576       CT = LandingPadInst::Catch;
   3577     else if (EatIfPresent(lltok::kw_filter))
   3578       CT = LandingPadInst::Filter;
   3579     else
   3580       return TokError("expected 'catch' or 'filter' clause type");
   3581 
   3582     Value *V; LocTy VLoc;
   3583     if (ParseTypeAndValue(V, VLoc, PFS)) {
   3584       delete LP;
   3585       return true;
   3586     }
   3587 
   3588     // A 'catch' type expects a non-array constant. A filter clause expects an
   3589     // array constant.
   3590     if (CT == LandingPadInst::Catch) {
   3591       if (isa<ArrayType>(V->getType()))
   3592         Error(VLoc, "'catch' clause has an invalid type");
   3593     } else {
   3594       if (!isa<ArrayType>(V->getType()))
   3595         Error(VLoc, "'filter' clause has an invalid type");
   3596     }
   3597 
   3598     LP->addClause(V);
   3599   }
   3600 
   3601   Inst = LP;
   3602   return false;
   3603 }
   3604 
   3605 /// ParseCall
   3606 ///   ::= 'tail'? 'call' OptionalCallingConv OptionalAttrs Type Value
   3607 ///       ParameterList OptionalAttrs
   3608 bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS,
   3609                          bool isTail) {
   3610   Attributes RetAttrs, FnAttrs;
   3611   CallingConv::ID CC;
   3612   Type *RetType = 0;
   3613   LocTy RetTypeLoc;
   3614   ValID CalleeID;
   3615   SmallVector<ParamInfo, 16> ArgList;
   3616   LocTy CallLoc = Lex.getLoc();
   3617 
   3618   if ((isTail && ParseToken(lltok::kw_call, "expected 'tail call'")) ||
   3619       ParseOptionalCallingConv(CC) ||
   3620       ParseOptionalAttrs(RetAttrs, 1) ||
   3621       ParseType(RetType, RetTypeLoc, true /*void allowed*/) ||
   3622       ParseValID(CalleeID) ||
   3623       ParseParameterList(ArgList, PFS) ||
   3624       ParseOptionalAttrs(FnAttrs, 2))
   3625     return true;
   3626 
   3627   // If RetType is a non-function pointer type, then this is the short syntax
   3628   // for the call, which means that RetType is just the return type.  Infer the
   3629   // rest of the function argument types from the arguments that are present.
   3630   PointerType *PFTy = 0;
   3631   FunctionType *Ty = 0;
   3632   if (!(PFTy = dyn_cast<PointerType>(RetType)) ||
   3633       !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
   3634     // Pull out the types of all of the arguments...
   3635     std::vector<Type*> ParamTypes;
   3636     for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
   3637       ParamTypes.push_back(ArgList[i].V->getType());
   3638 
   3639     if (!FunctionType::isValidReturnType(RetType))
   3640       return Error(RetTypeLoc, "Invalid result type for LLVM function");
   3641 
   3642     Ty = FunctionType::get(RetType, ParamTypes, false);
   3643     PFTy = PointerType::getUnqual(Ty);
   3644   }
   3645 
   3646   // Look up the callee.
   3647   Value *Callee;
   3648   if (ConvertValIDToValue(PFTy, CalleeID, Callee, &PFS)) return true;
   3649 
   3650   // Set up the Attributes for the function.
   3651   SmallVector<AttributeWithIndex, 8> Attrs;
   3652   if (RetAttrs != Attribute::None)
   3653     Attrs.push_back(AttributeWithIndex::get(0, RetAttrs));
   3654 
   3655   SmallVector<Value*, 8> Args;
   3656 
   3657   // Loop through FunctionType's arguments and ensure they are specified
   3658   // correctly.  Also, gather any parameter attributes.
   3659   FunctionType::param_iterator I = Ty->param_begin();
   3660   FunctionType::param_iterator E = Ty->param_end();
   3661   for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
   3662     Type *ExpectedTy = 0;
   3663     if (I != E) {
   3664       ExpectedTy = *I++;
   3665     } else if (!Ty->isVarArg()) {
   3666       return Error(ArgList[i].Loc, "too many arguments specified");
   3667     }
   3668 
   3669     if (ExpectedTy && ExpectedTy != ArgList[i].V->getType())
   3670       return Error(ArgList[i].Loc, "argument is not of expected type '" +
   3671                    getTypeString(ExpectedTy) + "'");
   3672     Args.push_back(ArgList[i].V);
   3673     if (ArgList[i].Attrs != Attribute::None)
   3674       Attrs.push_back(AttributeWithIndex::get(i+1, ArgList[i].Attrs));
   3675   }
   3676 
   3677   if (I != E)
   3678     return Error(CallLoc, "not enough parameters specified for call");
   3679 
   3680   if (FnAttrs != Attribute::None)
   3681     Attrs.push_back(AttributeWithIndex::get(~0, FnAttrs));
   3682 
   3683   // Finish off the Attributes and check them
   3684   AttrListPtr PAL = AttrListPtr::get(Attrs);
   3685 
   3686   CallInst *CI = CallInst::Create(Callee, Args);
   3687   CI->setTailCall(isTail);
   3688   CI->setCallingConv(CC);
   3689   CI->setAttributes(PAL);
   3690   Inst = CI;
   3691   return false;
   3692 }
   3693 
   3694 //===----------------------------------------------------------------------===//
   3695 // Memory Instructions.
   3696 //===----------------------------------------------------------------------===//
   3697 
   3698 /// ParseAlloc
   3699 ///   ::= 'alloca' Type (',' TypeAndValue)? (',' OptionalInfo)?
   3700 int LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS) {
   3701   Value *Size = 0;
   3702   LocTy SizeLoc;
   3703   unsigned Alignment = 0;
   3704   Type *Ty = 0;
   3705   if (ParseType(Ty)) return true;
   3706 
   3707   bool AteExtraComma = false;
   3708   if (EatIfPresent(lltok::comma)) {
   3709     if (Lex.getKind() == lltok::kw_align) {
   3710       if (ParseOptionalAlignment(Alignment)) return true;
   3711     } else if (Lex.getKind() == lltok::MetadataVar) {
   3712       AteExtraComma = true;
   3713     } else {
   3714       if (ParseTypeAndValue(Size, SizeLoc, PFS) ||
   3715           ParseOptionalCommaAlign(Alignment, AteExtraComma))
   3716         return true;
   3717     }
   3718   }
   3719 
   3720   if (Size && !Size->getType()->isIntegerTy())
   3721     return Error(SizeLoc, "element count must have integer type");
   3722 
   3723   Inst = new AllocaInst(Ty, Size, Alignment);
   3724   return AteExtraComma ? InstExtraComma : InstNormal;
   3725 }
   3726 
   3727 /// ParseLoad
   3728 ///   ::= 'load' 'volatile'? TypeAndValue (',' 'align' i32)?
   3729 ///   ::= 'load' 'atomic' 'volatile'? TypeAndValue
   3730 ///       'singlethread'? AtomicOrdering (',' 'align' i32)?
   3731 int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS) {
   3732   Value *Val; LocTy Loc;
   3733   unsigned Alignment = 0;
   3734   bool AteExtraComma = false;
   3735   bool isAtomic = false;
   3736   AtomicOrdering Ordering = NotAtomic;
   3737   SynchronizationScope Scope = CrossThread;
   3738 
   3739   if (Lex.getKind() == lltok::kw_atomic) {
   3740     isAtomic = true;
   3741     Lex.Lex();
   3742   }
   3743 
   3744   bool isVolatile = false;
   3745   if (Lex.getKind() == lltok::kw_volatile) {
   3746     isVolatile = true;
   3747     Lex.Lex();
   3748   }
   3749 
   3750   if (ParseTypeAndValue(Val, Loc, PFS) ||
   3751       ParseScopeAndOrdering(isAtomic, Scope, Ordering) ||
   3752       ParseOptionalCommaAlign(Alignment, AteExtraComma))
   3753     return true;
   3754 
   3755   if (!Val->getType()->isPointerTy() ||
   3756       !cast<PointerType>(Val->getType())->getElementType()->isFirstClassType())
   3757     return Error(Loc, "load operand must be a pointer to a first class type");
   3758   if (isAtomic && !Alignment)
   3759     return Error(Loc, "atomic load must have explicit non-zero alignment");
   3760   if (Ordering == Release || Ordering == AcquireRelease)
   3761     return Error(Loc, "atomic load cannot use Release ordering");
   3762 
   3763   Inst = new LoadInst(Val, "", isVolatile, Alignment, Ordering, Scope);
   3764   return AteExtraComma ? InstExtraComma : InstNormal;
   3765 }
   3766 
   3767 /// ParseStore
   3768 
   3769 ///   ::= 'store' 'volatile'? TypeAndValue ',' TypeAndValue (',' 'align' i32)?
   3770 ///   ::= 'store' 'atomic' 'volatile'? TypeAndValue ',' TypeAndValue
   3771 ///       'singlethread'? AtomicOrdering (',' 'align' i32)?
   3772 int LLParser::ParseStore(Instruction *&Inst, PerFunctionState &PFS) {
   3773   Value *Val, *Ptr; LocTy Loc, PtrLoc;
   3774   unsigned Alignment = 0;
   3775   bool AteExtraComma = false;
   3776   bool isAtomic = false;
   3777   AtomicOrdering Ordering = NotAtomic;
   3778   SynchronizationScope Scope = CrossThread;
   3779 
   3780   if (Lex.getKind() == lltok::kw_atomic) {
   3781     isAtomic = true;
   3782     Lex.Lex();
   3783   }
   3784 
   3785   bool isVolatile = false;
   3786   if (Lex.getKind() == lltok::kw_volatile) {
   3787     isVolatile = true;
   3788     Lex.Lex();
   3789   }
   3790 
   3791   if (ParseTypeAndValue(Val, Loc, PFS) ||
   3792       ParseToken(lltok::comma, "expected ',' after store operand") ||
   3793       ParseTypeAndValue(Ptr, PtrLoc, PFS) ||
   3794       ParseScopeAndOrdering(isAtomic, Scope, Ordering) ||
   3795       ParseOptionalCommaAlign(Alignment, AteExtraComma))
   3796     return true;
   3797 
   3798   if (!Ptr->getType()->isPointerTy())
   3799     return Error(PtrLoc, "store operand must be a pointer");
   3800   if (!Val->getType()->isFirstClassType())
   3801     return Error(Loc, "store operand must be a first class value");
   3802   if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType())
   3803     return Error(Loc, "stored value and pointer type do not match");
   3804   if (isAtomic && !Alignment)
   3805     return Error(Loc, "atomic store must have explicit non-zero alignment");
   3806   if (Ordering == Acquire || Ordering == AcquireRelease)
   3807     return Error(Loc, "atomic store cannot use Acquire ordering");
   3808 
   3809   Inst = new StoreInst(Val, Ptr, isVolatile, Alignment, Ordering, Scope);
   3810   return AteExtraComma ? InstExtraComma : InstNormal;
   3811 }
   3812 
   3813 /// ParseCmpXchg
   3814 ///   ::= 'cmpxchg' 'volatile'? TypeAndValue ',' TypeAndValue ',' TypeAndValue
   3815 ///       'singlethread'? AtomicOrdering
   3816 int LLParser::ParseCmpXchg(Instruction *&Inst, PerFunctionState &PFS) {
   3817   Value *Ptr, *Cmp, *New; LocTy PtrLoc, CmpLoc, NewLoc;
   3818   bool AteExtraComma = false;
   3819   AtomicOrdering Ordering = NotAtomic;
   3820   SynchronizationScope Scope = CrossThread;
   3821   bool isVolatile = false;
   3822 
   3823   if (EatIfPresent(lltok::kw_volatile))
   3824     isVolatile = true;
   3825 
   3826   if (ParseTypeAndValue(Ptr, PtrLoc, PFS) ||
   3827       ParseToken(lltok::comma, "expected ',' after cmpxchg address") ||
   3828       ParseTypeAndValue(Cmp, CmpLoc, PFS) ||
   3829       ParseToken(lltok::comma, "expected ',' after cmpxchg cmp operand") ||
   3830       ParseTypeAndValue(New, NewLoc, PFS) ||
   3831       ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering))
   3832     return true;
   3833 
   3834   if (Ordering == Unordered)
   3835     return TokError("cmpxchg cannot be unordered");
   3836   if (!Ptr->getType()->isPointerTy())
   3837     return Error(PtrLoc, "cmpxchg operand must be a pointer");
   3838   if (cast<PointerType>(Ptr->getType())->getElementType() != Cmp->getType())
   3839     return Error(CmpLoc, "compare value and pointer type do not match");
   3840   if (cast<PointerType>(Ptr->getType())->getElementType() != New->getType())
   3841     return Error(NewLoc, "new value and pointer type do not match");
   3842   if (!New->getType()->isIntegerTy())
   3843     return Error(NewLoc, "cmpxchg operand must be an integer");
   3844   unsigned Size = New->getType()->getPrimitiveSizeInBits();
   3845   if (Size < 8 || (Size & (Size - 1)))
   3846     return Error(NewLoc, "cmpxchg operand must be power-of-two byte-sized"
   3847                          " integer");
   3848 
   3849   AtomicCmpXchgInst *CXI =
   3850     new AtomicCmpXchgInst(Ptr, Cmp, New, Ordering, Scope);
   3851   CXI->setVolatile(isVolatile);
   3852   Inst = CXI;
   3853   return AteExtraComma ? InstExtraComma : InstNormal;
   3854 }
   3855 
   3856 /// ParseAtomicRMW
   3857 ///   ::= 'atomicrmw' 'volatile'? BinOp TypeAndValue ',' TypeAndValue
   3858 ///       'singlethread'? AtomicOrdering
   3859 int LLParser::ParseAtomicRMW(Instruction *&Inst, PerFunctionState &PFS) {
   3860   Value *Ptr, *Val; LocTy PtrLoc, ValLoc;
   3861   bool AteExtraComma = false;
   3862   AtomicOrdering Ordering = NotAtomic;
   3863   SynchronizationScope Scope = CrossThread;
   3864   bool isVolatile = false;
   3865   AtomicRMWInst::BinOp Operation;
   3866 
   3867   if (EatIfPresent(lltok::kw_volatile))
   3868     isVolatile = true;
   3869 
   3870   switch (Lex.getKind()) {
   3871   default: return TokError("expected binary operation in atomicrmw");
   3872   case lltok::kw_xchg: Operation = AtomicRMWInst::Xchg; break;
   3873   case lltok::kw_add: Operation = AtomicRMWInst::Add; break;
   3874   case lltok::kw_sub: Operation = AtomicRMWInst::Sub; break;
   3875   case lltok::kw_and: Operation = AtomicRMWInst::And; break;
   3876   case lltok::kw_nand: Operation = AtomicRMWInst::Nand; break;
   3877   case lltok::kw_or: Operation = AtomicRMWInst::Or; break;
   3878   case lltok::kw_xor: Operation = AtomicRMWInst::Xor; break;
   3879   case lltok::kw_max: Operation = AtomicRMWInst::Max; break;
   3880   case lltok::kw_min: Operation = AtomicRMWInst::Min; break;
   3881   case lltok::kw_umax: Operation = AtomicRMWInst::UMax; break;
   3882   case lltok::kw_umin: Operation = AtomicRMWInst::UMin; break;
   3883   }
   3884   Lex.Lex();  // Eat the operation.
   3885 
   3886   if (ParseTypeAndValue(Ptr, PtrLoc, PFS) ||
   3887       ParseToken(lltok::comma, "expected ',' after atomicrmw address") ||
   3888       ParseTypeAndValue(Val, ValLoc, PFS) ||
   3889       ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering))
   3890     return true;
   3891 
   3892   if (Ordering == Unordered)
   3893     return TokError("atomicrmw cannot be unordered");
   3894   if (!Ptr->getType()->isPointerTy())
   3895     return Error(PtrLoc, "atomicrmw operand must be a pointer");
   3896   if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType())
   3897     return Error(ValLoc, "atomicrmw value and pointer type do not match");
   3898   if (!Val->getType()->isIntegerTy())
   3899     return Error(ValLoc, "atomicrmw operand must be an integer");
   3900   unsigned Size = Val->getType()->getPrimitiveSizeInBits();
   3901   if (Size < 8 || (Size & (Size - 1)))
   3902     return Error(ValLoc, "atomicrmw operand must be power-of-two byte-sized"
   3903                          " integer");
   3904 
   3905   AtomicRMWInst *RMWI =
   3906     new AtomicRMWInst(Operation, Ptr, Val, Ordering, Scope);
   3907   RMWI->setVolatile(isVolatile);
   3908   Inst = RMWI;
   3909   return AteExtraComma ? InstExtraComma : InstNormal;
   3910 }
   3911 
   3912 /// ParseFence
   3913 ///   ::= 'fence' 'singlethread'? AtomicOrdering
   3914 int LLParser::ParseFence(Instruction *&Inst, PerFunctionState &PFS) {
   3915   AtomicOrdering Ordering = NotAtomic;
   3916   SynchronizationScope Scope = CrossThread;
   3917   if (ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering))
   3918     return true;
   3919 
   3920   if (Ordering == Unordered)
   3921     return TokError("fence cannot be unordered");
   3922   if (Ordering == Monotonic)
   3923     return TokError("fence cannot be monotonic");
   3924 
   3925   Inst = new FenceInst(Context, Ordering, Scope);
   3926   return InstNormal;
   3927 }
   3928 
   3929 /// ParseGetElementPtr
   3930 ///   ::= 'getelementptr' 'inbounds'? TypeAndValue (',' TypeAndValue)*
   3931 int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
   3932   Value *Ptr = 0;
   3933   Value *Val = 0;
   3934   LocTy Loc, EltLoc;
   3935 
   3936   bool InBounds = EatIfPresent(lltok::kw_inbounds);
   3937 
   3938   if (ParseTypeAndValue(Ptr, Loc, PFS)) return true;
   3939 
   3940   if (!Ptr->getType()->getScalarType()->isPointerTy())
   3941     return Error(Loc, "base of getelementptr must be a pointer");
   3942 
   3943   SmallVector<Value*, 16> Indices;
   3944   bool AteExtraComma = false;
   3945   while (EatIfPresent(lltok::comma)) {
   3946     if (Lex.getKind() == lltok::MetadataVar) {
   3947       AteExtraComma = true;
   3948       break;
   3949     }
   3950     if (ParseTypeAndValue(Val, EltLoc, PFS)) return true;
   3951     if (!Val->getType()->getScalarType()->isIntegerTy())
   3952       return Error(EltLoc, "getelementptr index must be an integer");
   3953     if (Val->getType()->isVectorTy() != Ptr->getType()->isVectorTy())
   3954       return Error(EltLoc, "getelementptr index type missmatch");
   3955     if (Val->getType()->isVectorTy()) {
   3956       unsigned ValNumEl = cast<VectorType>(Val->getType())->getNumElements();
   3957       unsigned PtrNumEl = cast<VectorType>(Ptr->getType())->getNumElements();
   3958       if (ValNumEl != PtrNumEl)
   3959         return Error(EltLoc,
   3960           "getelementptr vector index has a wrong number of elements");
   3961     }
   3962     Indices.push_back(Val);
   3963   }
   3964 
   3965   if (Val && Val->getType()->isVectorTy() && Indices.size() != 1)
   3966     return Error(EltLoc, "vector getelementptrs must have a single index");
   3967 
   3968   if (!GetElementPtrInst::getIndexedType(Ptr->getType(), Indices))
   3969     return Error(Loc, "invalid getelementptr indices");
   3970   Inst = GetElementPtrInst::Create(Ptr, Indices);
   3971   if (InBounds)
   3972     cast<GetElementPtrInst>(Inst)->setIsInBounds(true);
   3973   return AteExtraComma ? InstExtraComma : InstNormal;
   3974 }
   3975 
   3976 /// ParseExtractValue
   3977 ///   ::= 'extractvalue' TypeAndValue (',' uint32)+
   3978 int LLParser::ParseExtractValue(Instruction *&Inst, PerFunctionState &PFS) {
   3979   Value *Val; LocTy Loc;
   3980   SmallVector<unsigned, 4> Indices;
   3981   bool AteExtraComma;
   3982   if (ParseTypeAndValue(Val, Loc, PFS) ||
   3983       ParseIndexList(Indices, AteExtraComma))
   3984     return true;
   3985 
   3986   if (!Val->getType()->isAggregateType())
   3987     return Error(Loc, "extractvalue operand must be aggregate type");
   3988 
   3989   if (!ExtractValueInst::getIndexedType(Val->getType(), Indices))
   3990     return Error(Loc, "invalid indices for extractvalue");
   3991   Inst = ExtractValueInst::Create(Val, Indices);
   3992   return AteExtraComma ? InstExtraComma : InstNormal;
   3993 }
   3994 
   3995 /// ParseInsertValue
   3996 ///   ::= 'insertvalue' TypeAndValue ',' TypeAndValue (',' uint32)+
   3997 int LLParser::ParseInsertValue(Instruction *&Inst, PerFunctionState &PFS) {
   3998   Value *Val0, *Val1; LocTy Loc0, Loc1;
   3999   SmallVector<unsigned, 4> Indices;
   4000   bool AteExtraComma;
   4001   if (ParseTypeAndValue(Val0, Loc0, PFS) ||
   4002       ParseToken(lltok::comma, "expected comma after insertvalue operand") ||
   4003       ParseTypeAndValue(Val1, Loc1, PFS) ||
   4004       ParseIndexList(Indices, AteExtraComma))
   4005     return true;
   4006 
   4007   if (!Val0->getType()->isAggregateType())
   4008     return Error(Loc0, "insertvalue operand must be aggregate type");
   4009 
   4010   if (!ExtractValueInst::getIndexedType(Val0->getType(), Indices))
   4011     return Error(Loc0, "invalid indices for insertvalue");
   4012   Inst = InsertValueInst::Create(Val0, Val1, Indices);
   4013   return AteExtraComma ? InstExtraComma : InstNormal;
   4014 }
   4015 
   4016 //===----------------------------------------------------------------------===//
   4017 // Embedded metadata.
   4018 //===----------------------------------------------------------------------===//
   4019 
   4020 /// ParseMDNodeVector
   4021 ///   ::= Element (',' Element)*
   4022 /// Element
   4023 ///   ::= 'null' | TypeAndValue
   4024 bool LLParser::ParseMDNodeVector(SmallVectorImpl<Value*> &Elts,
   4025                                  PerFunctionState *PFS) {
   4026   // Check for an empty list.
   4027   if (Lex.getKind() == lltok::rbrace)
   4028     return false;
   4029 
   4030   do {
   4031     // Null is a special case since it is typeless.
   4032     if (EatIfPresent(lltok::kw_null)) {
   4033       Elts.push_back(0);
   4034       continue;
   4035     }
   4036 
   4037     Value *V = 0;
   4038     if (ParseTypeAndValue(V, PFS)) return true;
   4039     Elts.push_back(V);
   4040   } while (EatIfPresent(lltok::comma));
   4041 
   4042   return false;
   4043 }
   4044