LLParser.cpp revision 64ea275fe4e85f112ccfaf9c7b56fe64e11c771f
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"
27using namespace llvm;
28
29static 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*
37bool 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.
47bool 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
126bool 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
162bool 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
230bool 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
245bool 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)* ']'
270bool 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
294bool 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
324bool 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
351bool 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 '{' ...
361bool 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'
373bool 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
391bool 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
421bool 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
441bool 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.
453bool 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
465bool 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 }
486bool 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 = !{...}
515bool 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///
565bool 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///
644bool 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.
747GlobalValue *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
788GlobalValue *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.
833bool 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
842bool 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
852bool 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'
867bool 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 ')'
890bool 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 ')'
907bool 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.
919bool LLParser::ParseOptionalAttrs(Attributes::Builder &B, unsigned AttrKind) {
920  LocTy AttrLoc = Lex.getLoc();
921  bool HaveError = false;
922
923  B.clear();
924
925  while (1) {
926    lltok::Kind Token = Lex.getKind();
927    switch (Token) {
928    default:  // End of attributes.
929      return HaveError;
930    case lltok::kw_zeroext:         B.addAttribute(Attributes::ZExt); break;
931    case lltok::kw_signext:         B.addAttribute(Attributes::SExt); break;
932    case lltok::kw_inreg:           B.addAttribute(Attributes::InReg); break;
933    case lltok::kw_sret:            B.addAttribute(Attributes::StructRet); break;
934    case lltok::kw_noalias:         B.addAttribute(Attributes::NoAlias); break;
935    case lltok::kw_nocapture:       B.addAttribute(Attributes::NoCapture); break;
936    case lltok::kw_byval:           B.addAttribute(Attributes::ByVal); break;
937    case lltok::kw_nest:            B.addAttribute(Attributes::Nest); break;
938
939    case lltok::kw_noreturn:        B.addAttribute(Attributes::NoReturn); break;
940    case lltok::kw_nounwind:        B.addAttribute(Attributes::NoUnwind); break;
941    case lltok::kw_uwtable:         B.addAttribute(Attributes::UWTable); break;
942    case lltok::kw_returns_twice:   B.addAttribute(Attributes::ReturnsTwice); break;
943    case lltok::kw_noinline:        B.addAttribute(Attributes::NoInline); break;
944    case lltok::kw_readnone:        B.addAttribute(Attributes::ReadNone); break;
945    case lltok::kw_readonly:        B.addAttribute(Attributes::ReadOnly); break;
946    case lltok::kw_inlinehint:      B.addAttribute(Attributes::InlineHint); break;
947    case lltok::kw_alwaysinline:    B.addAttribute(Attributes::AlwaysInline); break;
948    case lltok::kw_optsize:         B.addAttribute(Attributes::OptimizeForSize); break;
949    case lltok::kw_ssp:             B.addAttribute(Attributes::StackProtect); break;
950    case lltok::kw_sspreq:          B.addAttribute(Attributes::StackProtectReq); break;
951    case lltok::kw_noredzone:       B.addAttribute(Attributes::NoRedZone); break;
952    case lltok::kw_noimplicitfloat: B.addAttribute(Attributes::NoImplicitFloat); break;
953    case lltok::kw_naked:           B.addAttribute(Attributes::Naked); break;
954    case lltok::kw_nonlazybind:     B.addAttribute(Attributes::NonLazyBind); break;
955    case lltok::kw_address_safety:  B.addAttribute(Attributes::AddressSafety); break;
956
957    case lltok::kw_alignstack: {
958      unsigned Alignment;
959      if (ParseOptionalStackAlignment(Alignment))
960        return true;
961      B.addStackAlignmentAttr(Alignment);
962      continue;
963    }
964
965    case lltok::kw_align: {
966      unsigned Alignment;
967      if (ParseOptionalAlignment(Alignment))
968        return true;
969      B.addAlignmentAttr(Alignment);
970      continue;
971    }
972
973    }
974
975    // Perform some error checking.
976    switch (Token) {
977    default:
978      if (AttrKind == 2)
979        HaveError |= Error(AttrLoc, "invalid use of attribute on a function");
980      break;
981    case lltok::kw_align:
982      // As a hack, we allow "align 2" on functions as a synonym for
983      // "alignstack 2".
984      break;
985
986    // Parameter Only:
987    case lltok::kw_sret:
988    case lltok::kw_nocapture:
989    case lltok::kw_byval:
990    case lltok::kw_nest:
991      if (AttrKind != 0)
992        HaveError |= Error(AttrLoc, "invalid use of parameter-only attribute");
993      break;
994
995    // Function Only:
996    case lltok::kw_noreturn:
997    case lltok::kw_nounwind:
998    case lltok::kw_readnone:
999    case lltok::kw_readonly:
1000    case lltok::kw_noinline:
1001    case lltok::kw_alwaysinline:
1002    case lltok::kw_optsize:
1003    case lltok::kw_ssp:
1004    case lltok::kw_sspreq:
1005    case lltok::kw_noredzone:
1006    case lltok::kw_noimplicitfloat:
1007    case lltok::kw_naked:
1008    case lltok::kw_inlinehint:
1009    case lltok::kw_alignstack:
1010    case lltok::kw_uwtable:
1011    case lltok::kw_nonlazybind:
1012    case lltok::kw_returns_twice:
1013    case lltok::kw_address_safety:
1014      if (AttrKind != 2)
1015        HaveError |= Error(AttrLoc, "invalid use of function-only attribute");
1016      break;
1017    }
1018
1019    Lex.Lex();
1020  }
1021}
1022
1023/// ParseOptionalLinkage
1024///   ::= /*empty*/
1025///   ::= 'private'
1026///   ::= 'linker_private'
1027///   ::= 'linker_private_weak'
1028///   ::= 'internal'
1029///   ::= 'weak'
1030///   ::= 'weak_odr'
1031///   ::= 'linkonce'
1032///   ::= 'linkonce_odr'
1033///   ::= 'linkonce_odr_auto_hide'
1034///   ::= 'available_externally'
1035///   ::= 'appending'
1036///   ::= 'dllexport'
1037///   ::= 'common'
1038///   ::= 'dllimport'
1039///   ::= 'extern_weak'
1040///   ::= 'external'
1041bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) {
1042  HasLinkage = false;
1043  switch (Lex.getKind()) {
1044  default:                       Res=GlobalValue::ExternalLinkage; return false;
1045  case lltok::kw_private:        Res = GlobalValue::PrivateLinkage;       break;
1046  case lltok::kw_linker_private: Res = GlobalValue::LinkerPrivateLinkage; break;
1047  case lltok::kw_linker_private_weak:
1048    Res = GlobalValue::LinkerPrivateWeakLinkage;
1049    break;
1050  case lltok::kw_internal:       Res = GlobalValue::InternalLinkage;      break;
1051  case lltok::kw_weak:           Res = GlobalValue::WeakAnyLinkage;       break;
1052  case lltok::kw_weak_odr:       Res = GlobalValue::WeakODRLinkage;       break;
1053  case lltok::kw_linkonce:       Res = GlobalValue::LinkOnceAnyLinkage;   break;
1054  case lltok::kw_linkonce_odr:   Res = GlobalValue::LinkOnceODRLinkage;   break;
1055  case lltok::kw_linkonce_odr_auto_hide:
1056  case lltok::kw_linker_private_weak_def_auto: // FIXME: For backwards compat.
1057    Res = GlobalValue::LinkOnceODRAutoHideLinkage;
1058    break;
1059  case lltok::kw_available_externally:
1060    Res = GlobalValue::AvailableExternallyLinkage;
1061    break;
1062  case lltok::kw_appending:      Res = GlobalValue::AppendingLinkage;     break;
1063  case lltok::kw_dllexport:      Res = GlobalValue::DLLExportLinkage;     break;
1064  case lltok::kw_common:         Res = GlobalValue::CommonLinkage;        break;
1065  case lltok::kw_dllimport:      Res = GlobalValue::DLLImportLinkage;     break;
1066  case lltok::kw_extern_weak:    Res = GlobalValue::ExternalWeakLinkage;  break;
1067  case lltok::kw_external:       Res = GlobalValue::ExternalLinkage;      break;
1068  }
1069  Lex.Lex();
1070  HasLinkage = true;
1071  return false;
1072}
1073
1074/// ParseOptionalVisibility
1075///   ::= /*empty*/
1076///   ::= 'default'
1077///   ::= 'hidden'
1078///   ::= 'protected'
1079///
1080bool LLParser::ParseOptionalVisibility(unsigned &Res) {
1081  switch (Lex.getKind()) {
1082  default:                  Res = GlobalValue::DefaultVisibility; return false;
1083  case lltok::kw_default:   Res = GlobalValue::DefaultVisibility; break;
1084  case lltok::kw_hidden:    Res = GlobalValue::HiddenVisibility; break;
1085  case lltok::kw_protected: Res = GlobalValue::ProtectedVisibility; break;
1086  }
1087  Lex.Lex();
1088  return false;
1089}
1090
1091/// ParseOptionalCallingConv
1092///   ::= /*empty*/
1093///   ::= 'ccc'
1094///   ::= 'fastcc'
1095///   ::= 'coldcc'
1096///   ::= 'x86_stdcallcc'
1097///   ::= 'x86_fastcallcc'
1098///   ::= 'x86_thiscallcc'
1099///   ::= 'arm_apcscc'
1100///   ::= 'arm_aapcscc'
1101///   ::= 'arm_aapcs_vfpcc'
1102///   ::= 'msp430_intrcc'
1103///   ::= 'ptx_kernel'
1104///   ::= 'ptx_device'
1105///   ::= 'spir_func'
1106///   ::= 'spir_kernel'
1107///   ::= 'cc' UINT
1108///
1109bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
1110  switch (Lex.getKind()) {
1111  default:                       CC = CallingConv::C; return false;
1112  case lltok::kw_ccc:            CC = CallingConv::C; break;
1113  case lltok::kw_fastcc:         CC = CallingConv::Fast; break;
1114  case lltok::kw_coldcc:         CC = CallingConv::Cold; break;
1115  case lltok::kw_x86_stdcallcc:  CC = CallingConv::X86_StdCall; break;
1116  case lltok::kw_x86_fastcallcc: CC = CallingConv::X86_FastCall; break;
1117  case lltok::kw_x86_thiscallcc: CC = CallingConv::X86_ThisCall; break;
1118  case lltok::kw_arm_apcscc:     CC = CallingConv::ARM_APCS; break;
1119  case lltok::kw_arm_aapcscc:    CC = CallingConv::ARM_AAPCS; break;
1120  case lltok::kw_arm_aapcs_vfpcc:CC = CallingConv::ARM_AAPCS_VFP; break;
1121  case lltok::kw_msp430_intrcc:  CC = CallingConv::MSP430_INTR; break;
1122  case lltok::kw_ptx_kernel:     CC = CallingConv::PTX_Kernel; break;
1123  case lltok::kw_ptx_device:     CC = CallingConv::PTX_Device; break;
1124  case lltok::kw_spir_kernel:    CC = CallingConv::SPIR_KERNEL; break;
1125  case lltok::kw_spir_func:      CC = CallingConv::SPIR_FUNC; break;
1126  case lltok::kw_cc: {
1127      unsigned ArbitraryCC;
1128      Lex.Lex();
1129      if (ParseUInt32(ArbitraryCC))
1130        return true;
1131      CC = static_cast<CallingConv::ID>(ArbitraryCC);
1132      return false;
1133    }
1134  }
1135
1136  Lex.Lex();
1137  return false;
1138}
1139
1140/// ParseInstructionMetadata
1141///   ::= !dbg !42 (',' !dbg !57)*
1142bool LLParser::ParseInstructionMetadata(Instruction *Inst,
1143                                        PerFunctionState *PFS) {
1144  do {
1145    if (Lex.getKind() != lltok::MetadataVar)
1146      return TokError("expected metadata after comma");
1147
1148    std::string Name = Lex.getStrVal();
1149    unsigned MDK = M->getMDKindID(Name);
1150    Lex.Lex();
1151
1152    MDNode *Node;
1153    SMLoc Loc = Lex.getLoc();
1154
1155    if (ParseToken(lltok::exclaim, "expected '!' here"))
1156      return true;
1157
1158    // This code is similar to that of ParseMetadataValue, however it needs to
1159    // have special-case code for a forward reference; see the comments on
1160    // ForwardRefInstMetadata for details. Also, MDStrings are not supported
1161    // at the top level here.
1162    if (Lex.getKind() == lltok::lbrace) {
1163      ValID ID;
1164      if (ParseMetadataListValue(ID, PFS))
1165        return true;
1166      assert(ID.Kind == ValID::t_MDNode);
1167      Inst->setMetadata(MDK, ID.MDNodeVal);
1168    } else {
1169      unsigned NodeID = 0;
1170      if (ParseMDNodeID(Node, NodeID))
1171        return true;
1172      if (Node) {
1173        // If we got the node, add it to the instruction.
1174        Inst->setMetadata(MDK, Node);
1175      } else {
1176        MDRef R = { Loc, MDK, NodeID };
1177        // Otherwise, remember that this should be resolved later.
1178        ForwardRefInstMetadata[Inst].push_back(R);
1179      }
1180    }
1181
1182    // If this is the end of the list, we're done.
1183  } while (EatIfPresent(lltok::comma));
1184  return false;
1185}
1186
1187/// ParseOptionalAlignment
1188///   ::= /* empty */
1189///   ::= 'align' 4
1190bool LLParser::ParseOptionalAlignment(unsigned &Alignment) {
1191  Alignment = 0;
1192  if (!EatIfPresent(lltok::kw_align))
1193    return false;
1194  LocTy AlignLoc = Lex.getLoc();
1195  if (ParseUInt32(Alignment)) return true;
1196  if (!isPowerOf2_32(Alignment))
1197    return Error(AlignLoc, "alignment is not a power of two");
1198  if (Alignment > Value::MaximumAlignment)
1199    return Error(AlignLoc, "huge alignments are not supported yet");
1200  return false;
1201}
1202
1203/// ParseOptionalCommaAlign
1204///   ::=
1205///   ::= ',' align 4
1206///
1207/// This returns with AteExtraComma set to true if it ate an excess comma at the
1208/// end.
1209bool LLParser::ParseOptionalCommaAlign(unsigned &Alignment,
1210                                       bool &AteExtraComma) {
1211  AteExtraComma = false;
1212  while (EatIfPresent(lltok::comma)) {
1213    // Metadata at the end is an early exit.
1214    if (Lex.getKind() == lltok::MetadataVar) {
1215      AteExtraComma = true;
1216      return false;
1217    }
1218
1219    if (Lex.getKind() != lltok::kw_align)
1220      return Error(Lex.getLoc(), "expected metadata or 'align'");
1221
1222    if (ParseOptionalAlignment(Alignment)) return true;
1223  }
1224
1225  return false;
1226}
1227
1228/// ParseScopeAndOrdering
1229///   if isAtomic: ::= 'singlethread'? AtomicOrdering
1230///   else: ::=
1231///
1232/// This sets Scope and Ordering to the parsed values.
1233bool LLParser::ParseScopeAndOrdering(bool isAtomic, SynchronizationScope &Scope,
1234                                     AtomicOrdering &Ordering) {
1235  if (!isAtomic)
1236    return false;
1237
1238  Scope = CrossThread;
1239  if (EatIfPresent(lltok::kw_singlethread))
1240    Scope = SingleThread;
1241  switch (Lex.getKind()) {
1242  default: return TokError("Expected ordering on atomic instruction");
1243  case lltok::kw_unordered: Ordering = Unordered; break;
1244  case lltok::kw_monotonic: Ordering = Monotonic; break;
1245  case lltok::kw_acquire: Ordering = Acquire; break;
1246  case lltok::kw_release: Ordering = Release; break;
1247  case lltok::kw_acq_rel: Ordering = AcquireRelease; break;
1248  case lltok::kw_seq_cst: Ordering = SequentiallyConsistent; break;
1249  }
1250  Lex.Lex();
1251  return false;
1252}
1253
1254/// ParseOptionalStackAlignment
1255///   ::= /* empty */
1256///   ::= 'alignstack' '(' 4 ')'
1257bool LLParser::ParseOptionalStackAlignment(unsigned &Alignment) {
1258  Alignment = 0;
1259  if (!EatIfPresent(lltok::kw_alignstack))
1260    return false;
1261  LocTy ParenLoc = Lex.getLoc();
1262  if (!EatIfPresent(lltok::lparen))
1263    return Error(ParenLoc, "expected '('");
1264  LocTy AlignLoc = Lex.getLoc();
1265  if (ParseUInt32(Alignment)) return true;
1266  ParenLoc = Lex.getLoc();
1267  if (!EatIfPresent(lltok::rparen))
1268    return Error(ParenLoc, "expected ')'");
1269  if (!isPowerOf2_32(Alignment))
1270    return Error(AlignLoc, "stack alignment is not a power of two");
1271  return false;
1272}
1273
1274/// ParseIndexList - This parses the index list for an insert/extractvalue
1275/// instruction.  This sets AteExtraComma in the case where we eat an extra
1276/// comma at the end of the line and find that it is followed by metadata.
1277/// Clients that don't allow metadata can call the version of this function that
1278/// only takes one argument.
1279///
1280/// ParseIndexList
1281///    ::=  (',' uint32)+
1282///
1283bool LLParser::ParseIndexList(SmallVectorImpl<unsigned> &Indices,
1284                              bool &AteExtraComma) {
1285  AteExtraComma = false;
1286
1287  if (Lex.getKind() != lltok::comma)
1288    return TokError("expected ',' as start of index list");
1289
1290  while (EatIfPresent(lltok::comma)) {
1291    if (Lex.getKind() == lltok::MetadataVar) {
1292      AteExtraComma = true;
1293      return false;
1294    }
1295    unsigned Idx = 0;
1296    if (ParseUInt32(Idx)) return true;
1297    Indices.push_back(Idx);
1298  }
1299
1300  return false;
1301}
1302
1303//===----------------------------------------------------------------------===//
1304// Type Parsing.
1305//===----------------------------------------------------------------------===//
1306
1307/// ParseType - Parse a type.
1308bool LLParser::ParseType(Type *&Result, bool AllowVoid) {
1309  SMLoc TypeLoc = Lex.getLoc();
1310  switch (Lex.getKind()) {
1311  default:
1312    return TokError("expected type");
1313  case lltok::Type:
1314    // Type ::= 'float' | 'void' (etc)
1315    Result = Lex.getTyVal();
1316    Lex.Lex();
1317    break;
1318  case lltok::lbrace:
1319    // Type ::= StructType
1320    if (ParseAnonStructType(Result, false))
1321      return true;
1322    break;
1323  case lltok::lsquare:
1324    // Type ::= '[' ... ']'
1325    Lex.Lex(); // eat the lsquare.
1326    if (ParseArrayVectorType(Result, false))
1327      return true;
1328    break;
1329  case lltok::less: // Either vector or packed struct.
1330    // Type ::= '<' ... '>'
1331    Lex.Lex();
1332    if (Lex.getKind() == lltok::lbrace) {
1333      if (ParseAnonStructType(Result, true) ||
1334          ParseToken(lltok::greater, "expected '>' at end of packed struct"))
1335        return true;
1336    } else if (ParseArrayVectorType(Result, true))
1337      return true;
1338    break;
1339  case lltok::LocalVar: {
1340    // Type ::= %foo
1341    std::pair<Type*, LocTy> &Entry = NamedTypes[Lex.getStrVal()];
1342
1343    // If the type hasn't been defined yet, create a forward definition and
1344    // remember where that forward def'n was seen (in case it never is defined).
1345    if (Entry.first == 0) {
1346      Entry.first = StructType::create(Context, Lex.getStrVal());
1347      Entry.second = Lex.getLoc();
1348    }
1349    Result = Entry.first;
1350    Lex.Lex();
1351    break;
1352  }
1353
1354  case lltok::LocalVarID: {
1355    // Type ::= %4
1356    if (Lex.getUIntVal() >= NumberedTypes.size())
1357      NumberedTypes.resize(Lex.getUIntVal()+1);
1358    std::pair<Type*, LocTy> &Entry = NumberedTypes[Lex.getUIntVal()];
1359
1360    // If the type hasn't been defined yet, create a forward definition and
1361    // remember where that forward def'n was seen (in case it never is defined).
1362    if (Entry.first == 0) {
1363      Entry.first = StructType::create(Context);
1364      Entry.second = Lex.getLoc();
1365    }
1366    Result = Entry.first;
1367    Lex.Lex();
1368    break;
1369  }
1370  }
1371
1372  // Parse the type suffixes.
1373  while (1) {
1374    switch (Lex.getKind()) {
1375    // End of type.
1376    default:
1377      if (!AllowVoid && Result->isVoidTy())
1378        return Error(TypeLoc, "void type only allowed for function results");
1379      return false;
1380
1381    // Type ::= Type '*'
1382    case lltok::star:
1383      if (Result->isLabelTy())
1384        return TokError("basic block pointers are invalid");
1385      if (Result->isVoidTy())
1386        return TokError("pointers to void are invalid - use i8* instead");
1387      if (!PointerType::isValidElementType(Result))
1388        return TokError("pointer to this type is invalid");
1389      Result = PointerType::getUnqual(Result);
1390      Lex.Lex();
1391      break;
1392
1393    // Type ::= Type 'addrspace' '(' uint32 ')' '*'
1394    case lltok::kw_addrspace: {
1395      if (Result->isLabelTy())
1396        return TokError("basic block pointers are invalid");
1397      if (Result->isVoidTy())
1398        return TokError("pointers to void are invalid; use i8* instead");
1399      if (!PointerType::isValidElementType(Result))
1400        return TokError("pointer to this type is invalid");
1401      unsigned AddrSpace;
1402      if (ParseOptionalAddrSpace(AddrSpace) ||
1403          ParseToken(lltok::star, "expected '*' in address space"))
1404        return true;
1405
1406      Result = PointerType::get(Result, AddrSpace);
1407      break;
1408    }
1409
1410    /// Types '(' ArgTypeListI ')' OptFuncAttrs
1411    case lltok::lparen:
1412      if (ParseFunctionType(Result))
1413        return true;
1414      break;
1415    }
1416  }
1417}
1418
1419/// ParseParameterList
1420///    ::= '(' ')'
1421///    ::= '(' Arg (',' Arg)* ')'
1422///  Arg
1423///    ::= Type OptionalAttributes Value OptionalAttributes
1424bool LLParser::ParseParameterList(SmallVectorImpl<ParamInfo> &ArgList,
1425                                  PerFunctionState &PFS) {
1426  if (ParseToken(lltok::lparen, "expected '(' in call"))
1427    return true;
1428
1429  while (Lex.getKind() != lltok::rparen) {
1430    // If this isn't the first argument, we need a comma.
1431    if (!ArgList.empty() &&
1432        ParseToken(lltok::comma, "expected ',' in argument list"))
1433      return true;
1434
1435    // Parse the argument.
1436    LocTy ArgLoc;
1437    Type *ArgTy = 0;
1438    Attributes::Builder ArgAttrs;
1439    Value *V;
1440    if (ParseType(ArgTy, ArgLoc))
1441      return true;
1442
1443    // Otherwise, handle normal operands.
1444    if (ParseOptionalAttrs(ArgAttrs, 0) || ParseValue(ArgTy, V, PFS))
1445      return true;
1446    ArgList.push_back(ParamInfo(ArgLoc, V, Attributes::get(ArgAttrs)));
1447  }
1448
1449  Lex.Lex();  // Lex the ')'.
1450  return false;
1451}
1452
1453
1454
1455/// ParseArgumentList - Parse the argument list for a function type or function
1456/// prototype.
1457///   ::= '(' ArgTypeListI ')'
1458/// ArgTypeListI
1459///   ::= /*empty*/
1460///   ::= '...'
1461///   ::= ArgTypeList ',' '...'
1462///   ::= ArgType (',' ArgType)*
1463///
1464bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList,
1465                                 bool &isVarArg){
1466  isVarArg = false;
1467  assert(Lex.getKind() == lltok::lparen);
1468  Lex.Lex(); // eat the (.
1469
1470  if (Lex.getKind() == lltok::rparen) {
1471    // empty
1472  } else if (Lex.getKind() == lltok::dotdotdot) {
1473    isVarArg = true;
1474    Lex.Lex();
1475  } else {
1476    LocTy TypeLoc = Lex.getLoc();
1477    Type *ArgTy = 0;
1478    Attributes::Builder Attrs;
1479    std::string Name;
1480
1481    if (ParseType(ArgTy) ||
1482        ParseOptionalAttrs(Attrs, 0)) return true;
1483
1484    if (ArgTy->isVoidTy())
1485      return Error(TypeLoc, "argument can not have void type");
1486
1487    if (Lex.getKind() == lltok::LocalVar) {
1488      Name = Lex.getStrVal();
1489      Lex.Lex();
1490    }
1491
1492    if (!FunctionType::isValidArgumentType(ArgTy))
1493      return Error(TypeLoc, "invalid type for function argument");
1494
1495    ArgList.push_back(ArgInfo(TypeLoc, ArgTy, Attributes::get(Attrs), Name));
1496
1497    while (EatIfPresent(lltok::comma)) {
1498      // Handle ... at end of arg list.
1499      if (EatIfPresent(lltok::dotdotdot)) {
1500        isVarArg = true;
1501        break;
1502      }
1503
1504      // Otherwise must be an argument type.
1505      TypeLoc = Lex.getLoc();
1506      if (ParseType(ArgTy) || ParseOptionalAttrs(Attrs, 0)) return true;
1507
1508      if (ArgTy->isVoidTy())
1509        return Error(TypeLoc, "argument can not have void type");
1510
1511      if (Lex.getKind() == lltok::LocalVar) {
1512        Name = Lex.getStrVal();
1513        Lex.Lex();
1514      } else {
1515        Name = "";
1516      }
1517
1518      if (!ArgTy->isFirstClassType())
1519        return Error(TypeLoc, "invalid type for function argument");
1520
1521      ArgList.push_back(ArgInfo(TypeLoc, ArgTy, Attributes::get(Attrs), Name));
1522    }
1523  }
1524
1525  return ParseToken(lltok::rparen, "expected ')' at end of argument list");
1526}
1527
1528/// ParseFunctionType
1529///  ::= Type ArgumentList OptionalAttrs
1530bool LLParser::ParseFunctionType(Type *&Result) {
1531  assert(Lex.getKind() == lltok::lparen);
1532
1533  if (!FunctionType::isValidReturnType(Result))
1534    return TokError("invalid function return type");
1535
1536  SmallVector<ArgInfo, 8> ArgList;
1537  bool isVarArg;
1538  if (ParseArgumentList(ArgList, isVarArg))
1539    return true;
1540
1541  // Reject names on the arguments lists.
1542  for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
1543    if (!ArgList[i].Name.empty())
1544      return Error(ArgList[i].Loc, "argument name invalid in function type");
1545    if (ArgList[i].Attrs)
1546      return Error(ArgList[i].Loc,
1547                   "argument attributes invalid in function type");
1548  }
1549
1550  SmallVector<Type*, 16> ArgListTy;
1551  for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
1552    ArgListTy.push_back(ArgList[i].Ty);
1553
1554  Result = FunctionType::get(Result, ArgListTy, isVarArg);
1555  return false;
1556}
1557
1558/// ParseAnonStructType - Parse an anonymous struct type, which is inlined into
1559/// other structs.
1560bool LLParser::ParseAnonStructType(Type *&Result, bool Packed) {
1561  SmallVector<Type*, 8> Elts;
1562  if (ParseStructBody(Elts)) return true;
1563
1564  Result = StructType::get(Context, Elts, Packed);
1565  return false;
1566}
1567
1568/// ParseStructDefinition - Parse a struct in a 'type' definition.
1569bool LLParser::ParseStructDefinition(SMLoc TypeLoc, StringRef Name,
1570                                     std::pair<Type*, LocTy> &Entry,
1571                                     Type *&ResultTy) {
1572  // If the type was already defined, diagnose the redefinition.
1573  if (Entry.first && !Entry.second.isValid())
1574    return Error(TypeLoc, "redefinition of type");
1575
1576  // If we have opaque, just return without filling in the definition for the
1577  // struct.  This counts as a definition as far as the .ll file goes.
1578  if (EatIfPresent(lltok::kw_opaque)) {
1579    // This type is being defined, so clear the location to indicate this.
1580    Entry.second = SMLoc();
1581
1582    // If this type number has never been uttered, create it.
1583    if (Entry.first == 0)
1584      Entry.first = StructType::create(Context, Name);
1585    ResultTy = Entry.first;
1586    return false;
1587  }
1588
1589  // If the type starts with '<', then it is either a packed struct or a vector.
1590  bool isPacked = EatIfPresent(lltok::less);
1591
1592  // If we don't have a struct, then we have a random type alias, which we
1593  // accept for compatibility with old files.  These types are not allowed to be
1594  // forward referenced and not allowed to be recursive.
1595  if (Lex.getKind() != lltok::lbrace) {
1596    if (Entry.first)
1597      return Error(TypeLoc, "forward references to non-struct type");
1598
1599    ResultTy = 0;
1600    if (isPacked)
1601      return ParseArrayVectorType(ResultTy, true);
1602    return ParseType(ResultTy);
1603  }
1604
1605  // This type is being defined, so clear the location to indicate this.
1606  Entry.second = SMLoc();
1607
1608  // If this type number has never been uttered, create it.
1609  if (Entry.first == 0)
1610    Entry.first = StructType::create(Context, Name);
1611
1612  StructType *STy = cast<StructType>(Entry.first);
1613
1614  SmallVector<Type*, 8> Body;
1615  if (ParseStructBody(Body) ||
1616      (isPacked && ParseToken(lltok::greater, "expected '>' in packed struct")))
1617    return true;
1618
1619  STy->setBody(Body, isPacked);
1620  ResultTy = STy;
1621  return false;
1622}
1623
1624
1625/// ParseStructType: Handles packed and unpacked types.  </> parsed elsewhere.
1626///   StructType
1627///     ::= '{' '}'
1628///     ::= '{' Type (',' Type)* '}'
1629///     ::= '<' '{' '}' '>'
1630///     ::= '<' '{' Type (',' Type)* '}' '>'
1631bool LLParser::ParseStructBody(SmallVectorImpl<Type*> &Body) {
1632  assert(Lex.getKind() == lltok::lbrace);
1633  Lex.Lex(); // Consume the '{'
1634
1635  // Handle the empty struct.
1636  if (EatIfPresent(lltok::rbrace))
1637    return false;
1638
1639  LocTy EltTyLoc = Lex.getLoc();
1640  Type *Ty = 0;
1641  if (ParseType(Ty)) return true;
1642  Body.push_back(Ty);
1643
1644  if (!StructType::isValidElementType(Ty))
1645    return Error(EltTyLoc, "invalid element type for struct");
1646
1647  while (EatIfPresent(lltok::comma)) {
1648    EltTyLoc = Lex.getLoc();
1649    if (ParseType(Ty)) return true;
1650
1651    if (!StructType::isValidElementType(Ty))
1652      return Error(EltTyLoc, "invalid element type for struct");
1653
1654    Body.push_back(Ty);
1655  }
1656
1657  return ParseToken(lltok::rbrace, "expected '}' at end of struct");
1658}
1659
1660/// ParseArrayVectorType - Parse an array or vector type, assuming the first
1661/// token has already been consumed.
1662///   Type
1663///     ::= '[' APSINTVAL 'x' Types ']'
1664///     ::= '<' APSINTVAL 'x' Types '>'
1665bool LLParser::ParseArrayVectorType(Type *&Result, bool isVector) {
1666  if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned() ||
1667      Lex.getAPSIntVal().getBitWidth() > 64)
1668    return TokError("expected number in address space");
1669
1670  LocTy SizeLoc = Lex.getLoc();
1671  uint64_t Size = Lex.getAPSIntVal().getZExtValue();
1672  Lex.Lex();
1673
1674  if (ParseToken(lltok::kw_x, "expected 'x' after element count"))
1675      return true;
1676
1677  LocTy TypeLoc = Lex.getLoc();
1678  Type *EltTy = 0;
1679  if (ParseType(EltTy)) return true;
1680
1681  if (ParseToken(isVector ? lltok::greater : lltok::rsquare,
1682                 "expected end of sequential type"))
1683    return true;
1684
1685  if (isVector) {
1686    if (Size == 0)
1687      return Error(SizeLoc, "zero element vector is illegal");
1688    if ((unsigned)Size != Size)
1689      return Error(SizeLoc, "size too large for vector");
1690    if (!VectorType::isValidElementType(EltTy))
1691      return Error(TypeLoc,
1692       "vector element type must be fp, integer or a pointer to these types");
1693    Result = VectorType::get(EltTy, unsigned(Size));
1694  } else {
1695    if (!ArrayType::isValidElementType(EltTy))
1696      return Error(TypeLoc, "invalid array element type");
1697    Result = ArrayType::get(EltTy, Size);
1698  }
1699  return false;
1700}
1701
1702//===----------------------------------------------------------------------===//
1703// Function Semantic Analysis.
1704//===----------------------------------------------------------------------===//
1705
1706LLParser::PerFunctionState::PerFunctionState(LLParser &p, Function &f,
1707                                             int functionNumber)
1708  : P(p), F(f), FunctionNumber(functionNumber) {
1709
1710  // Insert unnamed arguments into the NumberedVals list.
1711  for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end();
1712       AI != E; ++AI)
1713    if (!AI->hasName())
1714      NumberedVals.push_back(AI);
1715}
1716
1717LLParser::PerFunctionState::~PerFunctionState() {
1718  // If there were any forward referenced non-basicblock values, delete them.
1719  for (std::map<std::string, std::pair<Value*, LocTy> >::iterator
1720       I = ForwardRefVals.begin(), E = ForwardRefVals.end(); I != E; ++I)
1721    if (!isa<BasicBlock>(I->second.first)) {
1722      I->second.first->replaceAllUsesWith(
1723                           UndefValue::get(I->second.first->getType()));
1724      delete I->second.first;
1725      I->second.first = 0;
1726    }
1727
1728  for (std::map<unsigned, std::pair<Value*, LocTy> >::iterator
1729       I = ForwardRefValIDs.begin(), E = ForwardRefValIDs.end(); I != E; ++I)
1730    if (!isa<BasicBlock>(I->second.first)) {
1731      I->second.first->replaceAllUsesWith(
1732                           UndefValue::get(I->second.first->getType()));
1733      delete I->second.first;
1734      I->second.first = 0;
1735    }
1736}
1737
1738bool LLParser::PerFunctionState::FinishFunction() {
1739  // Check to see if someone took the address of labels in this block.
1740  if (!P.ForwardRefBlockAddresses.empty()) {
1741    ValID FunctionID;
1742    if (!F.getName().empty()) {
1743      FunctionID.Kind = ValID::t_GlobalName;
1744      FunctionID.StrVal = F.getName();
1745    } else {
1746      FunctionID.Kind = ValID::t_GlobalID;
1747      FunctionID.UIntVal = FunctionNumber;
1748    }
1749
1750    std::map<ValID, std::vector<std::pair<ValID, GlobalValue*> > >::iterator
1751      FRBAI = P.ForwardRefBlockAddresses.find(FunctionID);
1752    if (FRBAI != P.ForwardRefBlockAddresses.end()) {
1753      // Resolve all these references.
1754      if (P.ResolveForwardRefBlockAddresses(&F, FRBAI->second, this))
1755        return true;
1756
1757      P.ForwardRefBlockAddresses.erase(FRBAI);
1758    }
1759  }
1760
1761  if (!ForwardRefVals.empty())
1762    return P.Error(ForwardRefVals.begin()->second.second,
1763                   "use of undefined value '%" + ForwardRefVals.begin()->first +
1764                   "'");
1765  if (!ForwardRefValIDs.empty())
1766    return P.Error(ForwardRefValIDs.begin()->second.second,
1767                   "use of undefined value '%" +
1768                   Twine(ForwardRefValIDs.begin()->first) + "'");
1769  return false;
1770}
1771
1772
1773/// GetVal - Get a value with the specified name or ID, creating a
1774/// forward reference record if needed.  This can return null if the value
1775/// exists but does not have the right type.
1776Value *LLParser::PerFunctionState::GetVal(const std::string &Name,
1777                                          Type *Ty, LocTy Loc) {
1778  // Look this name up in the normal function symbol table.
1779  Value *Val = F.getValueSymbolTable().lookup(Name);
1780
1781  // If this is a forward reference for the value, see if we already created a
1782  // forward ref record.
1783  if (Val == 0) {
1784    std::map<std::string, std::pair<Value*, LocTy> >::iterator
1785      I = ForwardRefVals.find(Name);
1786    if (I != ForwardRefVals.end())
1787      Val = I->second.first;
1788  }
1789
1790  // If we have the value in the symbol table or fwd-ref table, return it.
1791  if (Val) {
1792    if (Val->getType() == Ty) return Val;
1793    if (Ty->isLabelTy())
1794      P.Error(Loc, "'%" + Name + "' is not a basic block");
1795    else
1796      P.Error(Loc, "'%" + Name + "' defined with type '" +
1797              getTypeString(Val->getType()) + "'");
1798    return 0;
1799  }
1800
1801  // Don't make placeholders with invalid type.
1802  if (!Ty->isFirstClassType() && !Ty->isLabelTy()) {
1803    P.Error(Loc, "invalid use of a non-first-class type");
1804    return 0;
1805  }
1806
1807  // Otherwise, create a new forward reference for this value and remember it.
1808  Value *FwdVal;
1809  if (Ty->isLabelTy())
1810    FwdVal = BasicBlock::Create(F.getContext(), Name, &F);
1811  else
1812    FwdVal = new Argument(Ty, Name);
1813
1814  ForwardRefVals[Name] = std::make_pair(FwdVal, Loc);
1815  return FwdVal;
1816}
1817
1818Value *LLParser::PerFunctionState::GetVal(unsigned ID, Type *Ty,
1819                                          LocTy Loc) {
1820  // Look this name up in the normal function symbol table.
1821  Value *Val = ID < NumberedVals.size() ? NumberedVals[ID] : 0;
1822
1823  // If this is a forward reference for the value, see if we already created a
1824  // forward ref record.
1825  if (Val == 0) {
1826    std::map<unsigned, std::pair<Value*, LocTy> >::iterator
1827      I = ForwardRefValIDs.find(ID);
1828    if (I != ForwardRefValIDs.end())
1829      Val = I->second.first;
1830  }
1831
1832  // If we have the value in the symbol table or fwd-ref table, return it.
1833  if (Val) {
1834    if (Val->getType() == Ty) return Val;
1835    if (Ty->isLabelTy())
1836      P.Error(Loc, "'%" + Twine(ID) + "' is not a basic block");
1837    else
1838      P.Error(Loc, "'%" + Twine(ID) + "' defined with type '" +
1839              getTypeString(Val->getType()) + "'");
1840    return 0;
1841  }
1842
1843  if (!Ty->isFirstClassType() && !Ty->isLabelTy()) {
1844    P.Error(Loc, "invalid use of a non-first-class type");
1845    return 0;
1846  }
1847
1848  // Otherwise, create a new forward reference for this value and remember it.
1849  Value *FwdVal;
1850  if (Ty->isLabelTy())
1851    FwdVal = BasicBlock::Create(F.getContext(), "", &F);
1852  else
1853    FwdVal = new Argument(Ty);
1854
1855  ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc);
1856  return FwdVal;
1857}
1858
1859/// SetInstName - After an instruction is parsed and inserted into its
1860/// basic block, this installs its name.
1861bool LLParser::PerFunctionState::SetInstName(int NameID,
1862                                             const std::string &NameStr,
1863                                             LocTy NameLoc, Instruction *Inst) {
1864  // If this instruction has void type, it cannot have a name or ID specified.
1865  if (Inst->getType()->isVoidTy()) {
1866    if (NameID != -1 || !NameStr.empty())
1867      return P.Error(NameLoc, "instructions returning void cannot have a name");
1868    return false;
1869  }
1870
1871  // If this was a numbered instruction, verify that the instruction is the
1872  // expected value and resolve any forward references.
1873  if (NameStr.empty()) {
1874    // If neither a name nor an ID was specified, just use the next ID.
1875    if (NameID == -1)
1876      NameID = NumberedVals.size();
1877
1878    if (unsigned(NameID) != NumberedVals.size())
1879      return P.Error(NameLoc, "instruction expected to be numbered '%" +
1880                     Twine(NumberedVals.size()) + "'");
1881
1882    std::map<unsigned, std::pair<Value*, LocTy> >::iterator FI =
1883      ForwardRefValIDs.find(NameID);
1884    if (FI != ForwardRefValIDs.end()) {
1885      if (FI->second.first->getType() != Inst->getType())
1886        return P.Error(NameLoc, "instruction forward referenced with type '" +
1887                       getTypeString(FI->second.first->getType()) + "'");
1888      FI->second.first->replaceAllUsesWith(Inst);
1889      delete FI->second.first;
1890      ForwardRefValIDs.erase(FI);
1891    }
1892
1893    NumberedVals.push_back(Inst);
1894    return false;
1895  }
1896
1897  // Otherwise, the instruction had a name.  Resolve forward refs and set it.
1898  std::map<std::string, std::pair<Value*, LocTy> >::iterator
1899    FI = ForwardRefVals.find(NameStr);
1900  if (FI != ForwardRefVals.end()) {
1901    if (FI->second.first->getType() != Inst->getType())
1902      return P.Error(NameLoc, "instruction forward referenced with type '" +
1903                     getTypeString(FI->second.first->getType()) + "'");
1904    FI->second.first->replaceAllUsesWith(Inst);
1905    delete FI->second.first;
1906    ForwardRefVals.erase(FI);
1907  }
1908
1909  // Set the name on the instruction.
1910  Inst->setName(NameStr);
1911
1912  if (Inst->getName() != NameStr)
1913    return P.Error(NameLoc, "multiple definition of local value named '" +
1914                   NameStr + "'");
1915  return false;
1916}
1917
1918/// GetBB - Get a basic block with the specified name or ID, creating a
1919/// forward reference record if needed.
1920BasicBlock *LLParser::PerFunctionState::GetBB(const std::string &Name,
1921                                              LocTy Loc) {
1922  return cast_or_null<BasicBlock>(GetVal(Name,
1923                                        Type::getLabelTy(F.getContext()), Loc));
1924}
1925
1926BasicBlock *LLParser::PerFunctionState::GetBB(unsigned ID, LocTy Loc) {
1927  return cast_or_null<BasicBlock>(GetVal(ID,
1928                                        Type::getLabelTy(F.getContext()), Loc));
1929}
1930
1931/// DefineBB - Define the specified basic block, which is either named or
1932/// unnamed.  If there is an error, this returns null otherwise it returns
1933/// the block being defined.
1934BasicBlock *LLParser::PerFunctionState::DefineBB(const std::string &Name,
1935                                                 LocTy Loc) {
1936  BasicBlock *BB;
1937  if (Name.empty())
1938    BB = GetBB(NumberedVals.size(), Loc);
1939  else
1940    BB = GetBB(Name, Loc);
1941  if (BB == 0) return 0; // Already diagnosed error.
1942
1943  // Move the block to the end of the function.  Forward ref'd blocks are
1944  // inserted wherever they happen to be referenced.
1945  F.getBasicBlockList().splice(F.end(), F.getBasicBlockList(), BB);
1946
1947  // Remove the block from forward ref sets.
1948  if (Name.empty()) {
1949    ForwardRefValIDs.erase(NumberedVals.size());
1950    NumberedVals.push_back(BB);
1951  } else {
1952    // BB forward references are already in the function symbol table.
1953    ForwardRefVals.erase(Name);
1954  }
1955
1956  return BB;
1957}
1958
1959//===----------------------------------------------------------------------===//
1960// Constants.
1961//===----------------------------------------------------------------------===//
1962
1963/// ParseValID - Parse an abstract value that doesn't necessarily have a
1964/// type implied.  For example, if we parse "4" we don't know what integer type
1965/// it has.  The value will later be combined with its type and checked for
1966/// sanity.  PFS is used to convert function-local operands of metadata (since
1967/// metadata operands are not just parsed here but also converted to values).
1968/// PFS can be null when we are not parsing metadata values inside a function.
1969bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) {
1970  ID.Loc = Lex.getLoc();
1971  switch (Lex.getKind()) {
1972  default: return TokError("expected value token");
1973  case lltok::GlobalID:  // @42
1974    ID.UIntVal = Lex.getUIntVal();
1975    ID.Kind = ValID::t_GlobalID;
1976    break;
1977  case lltok::GlobalVar:  // @foo
1978    ID.StrVal = Lex.getStrVal();
1979    ID.Kind = ValID::t_GlobalName;
1980    break;
1981  case lltok::LocalVarID:  // %42
1982    ID.UIntVal = Lex.getUIntVal();
1983    ID.Kind = ValID::t_LocalID;
1984    break;
1985  case lltok::LocalVar:  // %foo
1986    ID.StrVal = Lex.getStrVal();
1987    ID.Kind = ValID::t_LocalName;
1988    break;
1989  case lltok::exclaim:   // !42, !{...}, or !"foo"
1990    return ParseMetadataValue(ID, PFS);
1991  case lltok::APSInt:
1992    ID.APSIntVal = Lex.getAPSIntVal();
1993    ID.Kind = ValID::t_APSInt;
1994    break;
1995  case lltok::APFloat:
1996    ID.APFloatVal = Lex.getAPFloatVal();
1997    ID.Kind = ValID::t_APFloat;
1998    break;
1999  case lltok::kw_true:
2000    ID.ConstantVal = ConstantInt::getTrue(Context);
2001    ID.Kind = ValID::t_Constant;
2002    break;
2003  case lltok::kw_false:
2004    ID.ConstantVal = ConstantInt::getFalse(Context);
2005    ID.Kind = ValID::t_Constant;
2006    break;
2007  case lltok::kw_null: ID.Kind = ValID::t_Null; break;
2008  case lltok::kw_undef: ID.Kind = ValID::t_Undef; break;
2009  case lltok::kw_zeroinitializer: ID.Kind = ValID::t_Zero; break;
2010
2011  case lltok::lbrace: {
2012    // ValID ::= '{' ConstVector '}'
2013    Lex.Lex();
2014    SmallVector<Constant*, 16> Elts;
2015    if (ParseGlobalValueVector(Elts) ||
2016        ParseToken(lltok::rbrace, "expected end of struct constant"))
2017      return true;
2018
2019    ID.ConstantStructElts = new Constant*[Elts.size()];
2020    ID.UIntVal = Elts.size();
2021    memcpy(ID.ConstantStructElts, Elts.data(), Elts.size()*sizeof(Elts[0]));
2022    ID.Kind = ValID::t_ConstantStruct;
2023    return false;
2024  }
2025  case lltok::less: {
2026    // ValID ::= '<' ConstVector '>'         --> Vector.
2027    // ValID ::= '<' '{' ConstVector '}' '>' --> Packed Struct.
2028    Lex.Lex();
2029    bool isPackedStruct = EatIfPresent(lltok::lbrace);
2030
2031    SmallVector<Constant*, 16> Elts;
2032    LocTy FirstEltLoc = Lex.getLoc();
2033    if (ParseGlobalValueVector(Elts) ||
2034        (isPackedStruct &&
2035         ParseToken(lltok::rbrace, "expected end of packed struct")) ||
2036        ParseToken(lltok::greater, "expected end of constant"))
2037      return true;
2038
2039    if (isPackedStruct) {
2040      ID.ConstantStructElts = new Constant*[Elts.size()];
2041      memcpy(ID.ConstantStructElts, Elts.data(), Elts.size()*sizeof(Elts[0]));
2042      ID.UIntVal = Elts.size();
2043      ID.Kind = ValID::t_PackedConstantStruct;
2044      return false;
2045    }
2046
2047    if (Elts.empty())
2048      return Error(ID.Loc, "constant vector must not be empty");
2049
2050    if (!Elts[0]->getType()->isIntegerTy() &&
2051        !Elts[0]->getType()->isFloatingPointTy() &&
2052        !Elts[0]->getType()->isPointerTy())
2053      return Error(FirstEltLoc,
2054            "vector elements must have integer, pointer or floating point type");
2055
2056    // Verify that all the vector elements have the same type.
2057    for (unsigned i = 1, e = Elts.size(); i != e; ++i)
2058      if (Elts[i]->getType() != Elts[0]->getType())
2059        return Error(FirstEltLoc,
2060                     "vector element #" + Twine(i) +
2061                    " is not of type '" + getTypeString(Elts[0]->getType()));
2062
2063    ID.ConstantVal = ConstantVector::get(Elts);
2064    ID.Kind = ValID::t_Constant;
2065    return false;
2066  }
2067  case lltok::lsquare: {   // Array Constant
2068    Lex.Lex();
2069    SmallVector<Constant*, 16> Elts;
2070    LocTy FirstEltLoc = Lex.getLoc();
2071    if (ParseGlobalValueVector(Elts) ||
2072        ParseToken(lltok::rsquare, "expected end of array constant"))
2073      return true;
2074
2075    // Handle empty element.
2076    if (Elts.empty()) {
2077      // Use undef instead of an array because it's inconvenient to determine
2078      // the element type at this point, there being no elements to examine.
2079      ID.Kind = ValID::t_EmptyArray;
2080      return false;
2081    }
2082
2083    if (!Elts[0]->getType()->isFirstClassType())
2084      return Error(FirstEltLoc, "invalid array element type: " +
2085                   getTypeString(Elts[0]->getType()));
2086
2087    ArrayType *ATy = ArrayType::get(Elts[0]->getType(), Elts.size());
2088
2089    // Verify all elements are correct type!
2090    for (unsigned i = 0, e = Elts.size(); i != e; ++i) {
2091      if (Elts[i]->getType() != Elts[0]->getType())
2092        return Error(FirstEltLoc,
2093                     "array element #" + Twine(i) +
2094                     " is not of type '" + getTypeString(Elts[0]->getType()));
2095    }
2096
2097    ID.ConstantVal = ConstantArray::get(ATy, Elts);
2098    ID.Kind = ValID::t_Constant;
2099    return false;
2100  }
2101  case lltok::kw_c:  // c "foo"
2102    Lex.Lex();
2103    ID.ConstantVal = ConstantDataArray::getString(Context, Lex.getStrVal(),
2104                                                  false);
2105    if (ParseToken(lltok::StringConstant, "expected string")) return true;
2106    ID.Kind = ValID::t_Constant;
2107    return false;
2108
2109  case lltok::kw_asm: {
2110    // ValID ::= 'asm' SideEffect? AlignStack? STRINGCONSTANT ',' STRINGCONSTANT
2111    bool HasSideEffect, AlignStack, AsmDialect;
2112    Lex.Lex();
2113    if (ParseOptionalToken(lltok::kw_sideeffect, HasSideEffect) ||
2114        ParseOptionalToken(lltok::kw_alignstack, AlignStack) ||
2115        ParseOptionalToken(lltok::kw_inteldialect, AsmDialect) ||
2116        ParseStringConstant(ID.StrVal) ||
2117        ParseToken(lltok::comma, "expected comma in inline asm expression") ||
2118        ParseToken(lltok::StringConstant, "expected constraint string"))
2119      return true;
2120    ID.StrVal2 = Lex.getStrVal();
2121    ID.UIntVal = unsigned(HasSideEffect) | (unsigned(AlignStack)<<1) |
2122      (unsigned(AsmDialect)<<2);
2123    ID.Kind = ValID::t_InlineAsm;
2124    return false;
2125  }
2126
2127  case lltok::kw_blockaddress: {
2128    // ValID ::= 'blockaddress' '(' @foo ',' %bar ')'
2129    Lex.Lex();
2130
2131    ValID Fn, Label;
2132    LocTy FnLoc, LabelLoc;
2133
2134    if (ParseToken(lltok::lparen, "expected '(' in block address expression") ||
2135        ParseValID(Fn) ||
2136        ParseToken(lltok::comma, "expected comma in block address expression")||
2137        ParseValID(Label) ||
2138        ParseToken(lltok::rparen, "expected ')' in block address expression"))
2139      return true;
2140
2141    if (Fn.Kind != ValID::t_GlobalID && Fn.Kind != ValID::t_GlobalName)
2142      return Error(Fn.Loc, "expected function name in blockaddress");
2143    if (Label.Kind != ValID::t_LocalID && Label.Kind != ValID::t_LocalName)
2144      return Error(Label.Loc, "expected basic block name in blockaddress");
2145
2146    // Make a global variable as a placeholder for this reference.
2147    GlobalVariable *FwdRef = new GlobalVariable(*M, Type::getInt8Ty(Context),
2148                                           false, GlobalValue::InternalLinkage,
2149                                                0, "");
2150    ForwardRefBlockAddresses[Fn].push_back(std::make_pair(Label, FwdRef));
2151    ID.ConstantVal = FwdRef;
2152    ID.Kind = ValID::t_Constant;
2153    return false;
2154  }
2155
2156  case lltok::kw_trunc:
2157  case lltok::kw_zext:
2158  case lltok::kw_sext:
2159  case lltok::kw_fptrunc:
2160  case lltok::kw_fpext:
2161  case lltok::kw_bitcast:
2162  case lltok::kw_uitofp:
2163  case lltok::kw_sitofp:
2164  case lltok::kw_fptoui:
2165  case lltok::kw_fptosi:
2166  case lltok::kw_inttoptr:
2167  case lltok::kw_ptrtoint: {
2168    unsigned Opc = Lex.getUIntVal();
2169    Type *DestTy = 0;
2170    Constant *SrcVal;
2171    Lex.Lex();
2172    if (ParseToken(lltok::lparen, "expected '(' after constantexpr cast") ||
2173        ParseGlobalTypeAndValue(SrcVal) ||
2174        ParseToken(lltok::kw_to, "expected 'to' in constantexpr cast") ||
2175        ParseType(DestTy) ||
2176        ParseToken(lltok::rparen, "expected ')' at end of constantexpr cast"))
2177      return true;
2178    if (!CastInst::castIsValid((Instruction::CastOps)Opc, SrcVal, DestTy))
2179      return Error(ID.Loc, "invalid cast opcode for cast from '" +
2180                   getTypeString(SrcVal->getType()) + "' to '" +
2181                   getTypeString(DestTy) + "'");
2182    ID.ConstantVal = ConstantExpr::getCast((Instruction::CastOps)Opc,
2183                                                 SrcVal, DestTy);
2184    ID.Kind = ValID::t_Constant;
2185    return false;
2186  }
2187  case lltok::kw_extractvalue: {
2188    Lex.Lex();
2189    Constant *Val;
2190    SmallVector<unsigned, 4> Indices;
2191    if (ParseToken(lltok::lparen, "expected '(' in extractvalue constantexpr")||
2192        ParseGlobalTypeAndValue(Val) ||
2193        ParseIndexList(Indices) ||
2194        ParseToken(lltok::rparen, "expected ')' in extractvalue constantexpr"))
2195      return true;
2196
2197    if (!Val->getType()->isAggregateType())
2198      return Error(ID.Loc, "extractvalue operand must be aggregate type");
2199    if (!ExtractValueInst::getIndexedType(Val->getType(), Indices))
2200      return Error(ID.Loc, "invalid indices for extractvalue");
2201    ID.ConstantVal = ConstantExpr::getExtractValue(Val, Indices);
2202    ID.Kind = ValID::t_Constant;
2203    return false;
2204  }
2205  case lltok::kw_insertvalue: {
2206    Lex.Lex();
2207    Constant *Val0, *Val1;
2208    SmallVector<unsigned, 4> Indices;
2209    if (ParseToken(lltok::lparen, "expected '(' in insertvalue constantexpr")||
2210        ParseGlobalTypeAndValue(Val0) ||
2211        ParseToken(lltok::comma, "expected comma in insertvalue constantexpr")||
2212        ParseGlobalTypeAndValue(Val1) ||
2213        ParseIndexList(Indices) ||
2214        ParseToken(lltok::rparen, "expected ')' in insertvalue constantexpr"))
2215      return true;
2216    if (!Val0->getType()->isAggregateType())
2217      return Error(ID.Loc, "insertvalue operand must be aggregate type");
2218    if (!ExtractValueInst::getIndexedType(Val0->getType(), Indices))
2219      return Error(ID.Loc, "invalid indices for insertvalue");
2220    ID.ConstantVal = ConstantExpr::getInsertValue(Val0, Val1, Indices);
2221    ID.Kind = ValID::t_Constant;
2222    return false;
2223  }
2224  case lltok::kw_icmp:
2225  case lltok::kw_fcmp: {
2226    unsigned PredVal, Opc = Lex.getUIntVal();
2227    Constant *Val0, *Val1;
2228    Lex.Lex();
2229    if (ParseCmpPredicate(PredVal, Opc) ||
2230        ParseToken(lltok::lparen, "expected '(' in compare constantexpr") ||
2231        ParseGlobalTypeAndValue(Val0) ||
2232        ParseToken(lltok::comma, "expected comma in compare constantexpr") ||
2233        ParseGlobalTypeAndValue(Val1) ||
2234        ParseToken(lltok::rparen, "expected ')' in compare constantexpr"))
2235      return true;
2236
2237    if (Val0->getType() != Val1->getType())
2238      return Error(ID.Loc, "compare operands must have the same type");
2239
2240    CmpInst::Predicate Pred = (CmpInst::Predicate)PredVal;
2241
2242    if (Opc == Instruction::FCmp) {
2243      if (!Val0->getType()->isFPOrFPVectorTy())
2244        return Error(ID.Loc, "fcmp requires floating point operands");
2245      ID.ConstantVal = ConstantExpr::getFCmp(Pred, Val0, Val1);
2246    } else {
2247      assert(Opc == Instruction::ICmp && "Unexpected opcode for CmpInst!");
2248      if (!Val0->getType()->isIntOrIntVectorTy() &&
2249          !Val0->getType()->getScalarType()->isPointerTy())
2250        return Error(ID.Loc, "icmp requires pointer or integer operands");
2251      ID.ConstantVal = ConstantExpr::getICmp(Pred, Val0, Val1);
2252    }
2253    ID.Kind = ValID::t_Constant;
2254    return false;
2255  }
2256
2257  // Binary Operators.
2258  case lltok::kw_add:
2259  case lltok::kw_fadd:
2260  case lltok::kw_sub:
2261  case lltok::kw_fsub:
2262  case lltok::kw_mul:
2263  case lltok::kw_fmul:
2264  case lltok::kw_udiv:
2265  case lltok::kw_sdiv:
2266  case lltok::kw_fdiv:
2267  case lltok::kw_urem:
2268  case lltok::kw_srem:
2269  case lltok::kw_frem:
2270  case lltok::kw_shl:
2271  case lltok::kw_lshr:
2272  case lltok::kw_ashr: {
2273    bool NUW = false;
2274    bool NSW = false;
2275    bool Exact = false;
2276    unsigned Opc = Lex.getUIntVal();
2277    Constant *Val0, *Val1;
2278    Lex.Lex();
2279    LocTy ModifierLoc = Lex.getLoc();
2280    if (Opc == Instruction::Add || Opc == Instruction::Sub ||
2281        Opc == Instruction::Mul || Opc == Instruction::Shl) {
2282      if (EatIfPresent(lltok::kw_nuw))
2283        NUW = true;
2284      if (EatIfPresent(lltok::kw_nsw)) {
2285        NSW = true;
2286        if (EatIfPresent(lltok::kw_nuw))
2287          NUW = true;
2288      }
2289    } else if (Opc == Instruction::SDiv || Opc == Instruction::UDiv ||
2290               Opc == Instruction::LShr || Opc == Instruction::AShr) {
2291      if (EatIfPresent(lltok::kw_exact))
2292        Exact = true;
2293    }
2294    if (ParseToken(lltok::lparen, "expected '(' in binary constantexpr") ||
2295        ParseGlobalTypeAndValue(Val0) ||
2296        ParseToken(lltok::comma, "expected comma in binary constantexpr") ||
2297        ParseGlobalTypeAndValue(Val1) ||
2298        ParseToken(lltok::rparen, "expected ')' in binary constantexpr"))
2299      return true;
2300    if (Val0->getType() != Val1->getType())
2301      return Error(ID.Loc, "operands of constexpr must have same type");
2302    if (!Val0->getType()->isIntOrIntVectorTy()) {
2303      if (NUW)
2304        return Error(ModifierLoc, "nuw only applies to integer operations");
2305      if (NSW)
2306        return Error(ModifierLoc, "nsw only applies to integer operations");
2307    }
2308    // Check that the type is valid for the operator.
2309    switch (Opc) {
2310    case Instruction::Add:
2311    case Instruction::Sub:
2312    case Instruction::Mul:
2313    case Instruction::UDiv:
2314    case Instruction::SDiv:
2315    case Instruction::URem:
2316    case Instruction::SRem:
2317    case Instruction::Shl:
2318    case Instruction::AShr:
2319    case Instruction::LShr:
2320      if (!Val0->getType()->isIntOrIntVectorTy())
2321        return Error(ID.Loc, "constexpr requires integer operands");
2322      break;
2323    case Instruction::FAdd:
2324    case Instruction::FSub:
2325    case Instruction::FMul:
2326    case Instruction::FDiv:
2327    case Instruction::FRem:
2328      if (!Val0->getType()->isFPOrFPVectorTy())
2329        return Error(ID.Loc, "constexpr requires fp operands");
2330      break;
2331    default: llvm_unreachable("Unknown binary operator!");
2332    }
2333    unsigned Flags = 0;
2334    if (NUW)   Flags |= OverflowingBinaryOperator::NoUnsignedWrap;
2335    if (NSW)   Flags |= OverflowingBinaryOperator::NoSignedWrap;
2336    if (Exact) Flags |= PossiblyExactOperator::IsExact;
2337    Constant *C = ConstantExpr::get(Opc, Val0, Val1, Flags);
2338    ID.ConstantVal = C;
2339    ID.Kind = ValID::t_Constant;
2340    return false;
2341  }
2342
2343  // Logical Operations
2344  case lltok::kw_and:
2345  case lltok::kw_or:
2346  case lltok::kw_xor: {
2347    unsigned Opc = Lex.getUIntVal();
2348    Constant *Val0, *Val1;
2349    Lex.Lex();
2350    if (ParseToken(lltok::lparen, "expected '(' in logical constantexpr") ||
2351        ParseGlobalTypeAndValue(Val0) ||
2352        ParseToken(lltok::comma, "expected comma in logical constantexpr") ||
2353        ParseGlobalTypeAndValue(Val1) ||
2354        ParseToken(lltok::rparen, "expected ')' in logical constantexpr"))
2355      return true;
2356    if (Val0->getType() != Val1->getType())
2357      return Error(ID.Loc, "operands of constexpr must have same type");
2358    if (!Val0->getType()->isIntOrIntVectorTy())
2359      return Error(ID.Loc,
2360                   "constexpr requires integer or integer vector operands");
2361    ID.ConstantVal = ConstantExpr::get(Opc, Val0, Val1);
2362    ID.Kind = ValID::t_Constant;
2363    return false;
2364  }
2365
2366  case lltok::kw_getelementptr:
2367  case lltok::kw_shufflevector:
2368  case lltok::kw_insertelement:
2369  case lltok::kw_extractelement:
2370  case lltok::kw_select: {
2371    unsigned Opc = Lex.getUIntVal();
2372    SmallVector<Constant*, 16> Elts;
2373    bool InBounds = false;
2374    Lex.Lex();
2375    if (Opc == Instruction::GetElementPtr)
2376      InBounds = EatIfPresent(lltok::kw_inbounds);
2377    if (ParseToken(lltok::lparen, "expected '(' in constantexpr") ||
2378        ParseGlobalValueVector(Elts) ||
2379        ParseToken(lltok::rparen, "expected ')' in constantexpr"))
2380      return true;
2381
2382    if (Opc == Instruction::GetElementPtr) {
2383      if (Elts.size() == 0 ||
2384          !Elts[0]->getType()->getScalarType()->isPointerTy())
2385        return Error(ID.Loc, "getelementptr requires pointer operand");
2386
2387      ArrayRef<Constant *> Indices(Elts.begin() + 1, Elts.end());
2388      if (!GetElementPtrInst::getIndexedType(Elts[0]->getType(), Indices))
2389        return Error(ID.Loc, "invalid indices for getelementptr");
2390      ID.ConstantVal = ConstantExpr::getGetElementPtr(Elts[0], Indices,
2391                                                      InBounds);
2392    } else if (Opc == Instruction::Select) {
2393      if (Elts.size() != 3)
2394        return Error(ID.Loc, "expected three operands to select");
2395      if (const char *Reason = SelectInst::areInvalidOperands(Elts[0], Elts[1],
2396                                                              Elts[2]))
2397        return Error(ID.Loc, Reason);
2398      ID.ConstantVal = ConstantExpr::getSelect(Elts[0], Elts[1], Elts[2]);
2399    } else if (Opc == Instruction::ShuffleVector) {
2400      if (Elts.size() != 3)
2401        return Error(ID.Loc, "expected three operands to shufflevector");
2402      if (!ShuffleVectorInst::isValidOperands(Elts[0], Elts[1], Elts[2]))
2403        return Error(ID.Loc, "invalid operands to shufflevector");
2404      ID.ConstantVal =
2405                 ConstantExpr::getShuffleVector(Elts[0], Elts[1],Elts[2]);
2406    } else if (Opc == Instruction::ExtractElement) {
2407      if (Elts.size() != 2)
2408        return Error(ID.Loc, "expected two operands to extractelement");
2409      if (!ExtractElementInst::isValidOperands(Elts[0], Elts[1]))
2410        return Error(ID.Loc, "invalid extractelement operands");
2411      ID.ConstantVal = ConstantExpr::getExtractElement(Elts[0], Elts[1]);
2412    } else {
2413      assert(Opc == Instruction::InsertElement && "Unknown opcode");
2414      if (Elts.size() != 3)
2415      return Error(ID.Loc, "expected three operands to insertelement");
2416      if (!InsertElementInst::isValidOperands(Elts[0], Elts[1], Elts[2]))
2417        return Error(ID.Loc, "invalid insertelement operands");
2418      ID.ConstantVal =
2419                 ConstantExpr::getInsertElement(Elts[0], Elts[1],Elts[2]);
2420    }
2421
2422    ID.Kind = ValID::t_Constant;
2423    return false;
2424  }
2425  }
2426
2427  Lex.Lex();
2428  return false;
2429}
2430
2431/// ParseGlobalValue - Parse a global value with the specified type.
2432bool LLParser::ParseGlobalValue(Type *Ty, Constant *&C) {
2433  C = 0;
2434  ValID ID;
2435  Value *V = NULL;
2436  bool Parsed = ParseValID(ID) ||
2437                ConvertValIDToValue(Ty, ID, V, NULL);
2438  if (V && !(C = dyn_cast<Constant>(V)))
2439    return Error(ID.Loc, "global values must be constants");
2440  return Parsed;
2441}
2442
2443bool LLParser::ParseGlobalTypeAndValue(Constant *&V) {
2444  Type *Ty = 0;
2445  return ParseType(Ty) ||
2446         ParseGlobalValue(Ty, V);
2447}
2448
2449/// ParseGlobalValueVector
2450///   ::= /*empty*/
2451///   ::= TypeAndValue (',' TypeAndValue)*
2452bool LLParser::ParseGlobalValueVector(SmallVectorImpl<Constant*> &Elts) {
2453  // Empty list.
2454  if (Lex.getKind() == lltok::rbrace ||
2455      Lex.getKind() == lltok::rsquare ||
2456      Lex.getKind() == lltok::greater ||
2457      Lex.getKind() == lltok::rparen)
2458    return false;
2459
2460  Constant *C;
2461  if (ParseGlobalTypeAndValue(C)) return true;
2462  Elts.push_back(C);
2463
2464  while (EatIfPresent(lltok::comma)) {
2465    if (ParseGlobalTypeAndValue(C)) return true;
2466    Elts.push_back(C);
2467  }
2468
2469  return false;
2470}
2471
2472bool LLParser::ParseMetadataListValue(ValID &ID, PerFunctionState *PFS) {
2473  assert(Lex.getKind() == lltok::lbrace);
2474  Lex.Lex();
2475
2476  SmallVector<Value*, 16> Elts;
2477  if (ParseMDNodeVector(Elts, PFS) ||
2478      ParseToken(lltok::rbrace, "expected end of metadata node"))
2479    return true;
2480
2481  ID.MDNodeVal = MDNode::get(Context, Elts);
2482  ID.Kind = ValID::t_MDNode;
2483  return false;
2484}
2485
2486/// ParseMetadataValue
2487///  ::= !42
2488///  ::= !{...}
2489///  ::= !"string"
2490bool LLParser::ParseMetadataValue(ValID &ID, PerFunctionState *PFS) {
2491  assert(Lex.getKind() == lltok::exclaim);
2492  Lex.Lex();
2493
2494  // MDNode:
2495  // !{ ... }
2496  if (Lex.getKind() == lltok::lbrace)
2497    return ParseMetadataListValue(ID, PFS);
2498
2499  // Standalone metadata reference
2500  // !42
2501  if (Lex.getKind() == lltok::APSInt) {
2502    if (ParseMDNodeID(ID.MDNodeVal)) return true;
2503    ID.Kind = ValID::t_MDNode;
2504    return false;
2505  }
2506
2507  // MDString:
2508  //   ::= '!' STRINGCONSTANT
2509  if (ParseMDString(ID.MDStringVal)) return true;
2510  ID.Kind = ValID::t_MDString;
2511  return false;
2512}
2513
2514
2515//===----------------------------------------------------------------------===//
2516// Function Parsing.
2517//===----------------------------------------------------------------------===//
2518
2519bool LLParser::ConvertValIDToValue(Type *Ty, ValID &ID, Value *&V,
2520                                   PerFunctionState *PFS) {
2521  if (Ty->isFunctionTy())
2522    return Error(ID.Loc, "functions are not values, refer to them as pointers");
2523
2524  switch (ID.Kind) {
2525  case ValID::t_LocalID:
2526    if (!PFS) return Error(ID.Loc, "invalid use of function-local name");
2527    V = PFS->GetVal(ID.UIntVal, Ty, ID.Loc);
2528    return (V == 0);
2529  case ValID::t_LocalName:
2530    if (!PFS) return Error(ID.Loc, "invalid use of function-local name");
2531    V = PFS->GetVal(ID.StrVal, Ty, ID.Loc);
2532    return (V == 0);
2533  case ValID::t_InlineAsm: {
2534    PointerType *PTy = dyn_cast<PointerType>(Ty);
2535    FunctionType *FTy =
2536      PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
2537    if (!FTy || !InlineAsm::Verify(FTy, ID.StrVal2))
2538      return Error(ID.Loc, "invalid type for inline asm constraint string");
2539    V = InlineAsm::get(FTy, ID.StrVal, ID.StrVal2, ID.UIntVal&1,
2540                       (ID.UIntVal>>1)&1, (InlineAsm::AsmDialect(ID.UIntVal>>2)));
2541    return false;
2542  }
2543  case ValID::t_MDNode:
2544    if (!Ty->isMetadataTy())
2545      return Error(ID.Loc, "metadata value must have metadata type");
2546    V = ID.MDNodeVal;
2547    return false;
2548  case ValID::t_MDString:
2549    if (!Ty->isMetadataTy())
2550      return Error(ID.Loc, "metadata value must have metadata type");
2551    V = ID.MDStringVal;
2552    return false;
2553  case ValID::t_GlobalName:
2554    V = GetGlobalVal(ID.StrVal, Ty, ID.Loc);
2555    return V == 0;
2556  case ValID::t_GlobalID:
2557    V = GetGlobalVal(ID.UIntVal, Ty, ID.Loc);
2558    return V == 0;
2559  case ValID::t_APSInt:
2560    if (!Ty->isIntegerTy())
2561      return Error(ID.Loc, "integer constant must have integer type");
2562    ID.APSIntVal = ID.APSIntVal.extOrTrunc(Ty->getPrimitiveSizeInBits());
2563    V = ConstantInt::get(Context, ID.APSIntVal);
2564    return false;
2565  case ValID::t_APFloat:
2566    if (!Ty->isFloatingPointTy() ||
2567        !ConstantFP::isValueValidForType(Ty, ID.APFloatVal))
2568      return Error(ID.Loc, "floating point constant invalid for type");
2569
2570    // The lexer has no type info, so builds all half, float, and double FP
2571    // constants as double.  Fix this here.  Long double does not need this.
2572    if (&ID.APFloatVal.getSemantics() == &APFloat::IEEEdouble) {
2573      bool Ignored;
2574      if (Ty->isHalfTy())
2575        ID.APFloatVal.convert(APFloat::IEEEhalf, APFloat::rmNearestTiesToEven,
2576                              &Ignored);
2577      else if (Ty->isFloatTy())
2578        ID.APFloatVal.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven,
2579                              &Ignored);
2580    }
2581    V = ConstantFP::get(Context, ID.APFloatVal);
2582
2583    if (V->getType() != Ty)
2584      return Error(ID.Loc, "floating point constant does not have type '" +
2585                   getTypeString(Ty) + "'");
2586
2587    return false;
2588  case ValID::t_Null:
2589    if (!Ty->isPointerTy())
2590      return Error(ID.Loc, "null must be a pointer type");
2591    V = ConstantPointerNull::get(cast<PointerType>(Ty));
2592    return false;
2593  case ValID::t_Undef:
2594    // FIXME: LabelTy should not be a first-class type.
2595    if (!Ty->isFirstClassType() || Ty->isLabelTy())
2596      return Error(ID.Loc, "invalid type for undef constant");
2597    V = UndefValue::get(Ty);
2598    return false;
2599  case ValID::t_EmptyArray:
2600    if (!Ty->isArrayTy() || cast<ArrayType>(Ty)->getNumElements() != 0)
2601      return Error(ID.Loc, "invalid empty array initializer");
2602    V = UndefValue::get(Ty);
2603    return false;
2604  case ValID::t_Zero:
2605    // FIXME: LabelTy should not be a first-class type.
2606    if (!Ty->isFirstClassType() || Ty->isLabelTy())
2607      return Error(ID.Loc, "invalid type for null constant");
2608    V = Constant::getNullValue(Ty);
2609    return false;
2610  case ValID::t_Constant:
2611    if (ID.ConstantVal->getType() != Ty)
2612      return Error(ID.Loc, "constant expression type mismatch");
2613
2614    V = ID.ConstantVal;
2615    return false;
2616  case ValID::t_ConstantStruct:
2617  case ValID::t_PackedConstantStruct:
2618    if (StructType *ST = dyn_cast<StructType>(Ty)) {
2619      if (ST->getNumElements() != ID.UIntVal)
2620        return Error(ID.Loc,
2621                     "initializer with struct type has wrong # elements");
2622      if (ST->isPacked() != (ID.Kind == ValID::t_PackedConstantStruct))
2623        return Error(ID.Loc, "packed'ness of initializer and type don't match");
2624
2625      // Verify that the elements are compatible with the structtype.
2626      for (unsigned i = 0, e = ID.UIntVal; i != e; ++i)
2627        if (ID.ConstantStructElts[i]->getType() != ST->getElementType(i))
2628          return Error(ID.Loc, "element " + Twine(i) +
2629                    " of struct initializer doesn't match struct element type");
2630
2631      V = ConstantStruct::get(ST, makeArrayRef(ID.ConstantStructElts,
2632                                               ID.UIntVal));
2633    } else
2634      return Error(ID.Loc, "constant expression type mismatch");
2635    return false;
2636  }
2637  llvm_unreachable("Invalid ValID");
2638}
2639
2640bool LLParser::ParseValue(Type *Ty, Value *&V, PerFunctionState *PFS) {
2641  V = 0;
2642  ValID ID;
2643  return ParseValID(ID, PFS) ||
2644         ConvertValIDToValue(Ty, ID, V, PFS);
2645}
2646
2647bool LLParser::ParseTypeAndValue(Value *&V, PerFunctionState *PFS) {
2648  Type *Ty = 0;
2649  return ParseType(Ty) ||
2650         ParseValue(Ty, V, PFS);
2651}
2652
2653bool LLParser::ParseTypeAndBasicBlock(BasicBlock *&BB, LocTy &Loc,
2654                                      PerFunctionState &PFS) {
2655  Value *V;
2656  Loc = Lex.getLoc();
2657  if (ParseTypeAndValue(V, PFS)) return true;
2658  if (!isa<BasicBlock>(V))
2659    return Error(Loc, "expected a basic block");
2660  BB = cast<BasicBlock>(V);
2661  return false;
2662}
2663
2664
2665/// FunctionHeader
2666///   ::= OptionalLinkage OptionalVisibility OptionalCallingConv OptRetAttrs
2667///       OptUnnamedAddr Type GlobalName '(' ArgList ')' OptFuncAttrs OptSection
2668///       OptionalAlign OptGC
2669bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
2670  // Parse the linkage.
2671  LocTy LinkageLoc = Lex.getLoc();
2672  unsigned Linkage;
2673
2674  unsigned Visibility;
2675  Attributes::Builder RetAttrs;
2676  CallingConv::ID CC;
2677  Type *RetType = 0;
2678  LocTy RetTypeLoc = Lex.getLoc();
2679  if (ParseOptionalLinkage(Linkage) ||
2680      ParseOptionalVisibility(Visibility) ||
2681      ParseOptionalCallingConv(CC) ||
2682      ParseOptionalAttrs(RetAttrs, 1) ||
2683      ParseType(RetType, RetTypeLoc, true /*void allowed*/))
2684    return true;
2685
2686  // Verify that the linkage is ok.
2687  switch ((GlobalValue::LinkageTypes)Linkage) {
2688  case GlobalValue::ExternalLinkage:
2689    break; // always ok.
2690  case GlobalValue::DLLImportLinkage:
2691  case GlobalValue::ExternalWeakLinkage:
2692    if (isDefine)
2693      return Error(LinkageLoc, "invalid linkage for function definition");
2694    break;
2695  case GlobalValue::PrivateLinkage:
2696  case GlobalValue::LinkerPrivateLinkage:
2697  case GlobalValue::LinkerPrivateWeakLinkage:
2698  case GlobalValue::InternalLinkage:
2699  case GlobalValue::AvailableExternallyLinkage:
2700  case GlobalValue::LinkOnceAnyLinkage:
2701  case GlobalValue::LinkOnceODRLinkage:
2702  case GlobalValue::LinkOnceODRAutoHideLinkage:
2703  case GlobalValue::WeakAnyLinkage:
2704  case GlobalValue::WeakODRLinkage:
2705  case GlobalValue::DLLExportLinkage:
2706    if (!isDefine)
2707      return Error(LinkageLoc, "invalid linkage for function declaration");
2708    break;
2709  case GlobalValue::AppendingLinkage:
2710  case GlobalValue::CommonLinkage:
2711    return Error(LinkageLoc, "invalid function linkage type");
2712  }
2713
2714  if (!FunctionType::isValidReturnType(RetType))
2715    return Error(RetTypeLoc, "invalid function return type");
2716
2717  LocTy NameLoc = Lex.getLoc();
2718
2719  std::string FunctionName;
2720  if (Lex.getKind() == lltok::GlobalVar) {
2721    FunctionName = Lex.getStrVal();
2722  } else if (Lex.getKind() == lltok::GlobalID) {     // @42 is ok.
2723    unsigned NameID = Lex.getUIntVal();
2724
2725    if (NameID != NumberedVals.size())
2726      return TokError("function expected to be numbered '%" +
2727                      Twine(NumberedVals.size()) + "'");
2728  } else {
2729    return TokError("expected function name");
2730  }
2731
2732  Lex.Lex();
2733
2734  if (Lex.getKind() != lltok::lparen)
2735    return TokError("expected '(' in function argument list");
2736
2737  SmallVector<ArgInfo, 8> ArgList;
2738  bool isVarArg;
2739  Attributes::Builder FuncAttrs;
2740  std::string Section;
2741  unsigned Alignment;
2742  std::string GC;
2743  bool UnnamedAddr;
2744  LocTy UnnamedAddrLoc;
2745
2746  if (ParseArgumentList(ArgList, isVarArg) ||
2747      ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr,
2748                         &UnnamedAddrLoc) ||
2749      ParseOptionalAttrs(FuncAttrs, 2) ||
2750      (EatIfPresent(lltok::kw_section) &&
2751       ParseStringConstant(Section)) ||
2752      ParseOptionalAlignment(Alignment) ||
2753      (EatIfPresent(lltok::kw_gc) &&
2754       ParseStringConstant(GC)))
2755    return true;
2756
2757  // If the alignment was parsed as an attribute, move to the alignment field.
2758  if (FuncAttrs.hasAlignmentAttr()) {
2759    Alignment = FuncAttrs.getAlignment();
2760    FuncAttrs.removeAttribute(Attributes::Alignment);
2761  }
2762
2763  // Okay, if we got here, the function is syntactically valid.  Convert types
2764  // and do semantic checks.
2765  std::vector<Type*> ParamTypeList;
2766  SmallVector<AttributeWithIndex, 8> Attrs;
2767
2768  if (RetAttrs.hasAttributes())
2769    Attrs.push_back(AttributeWithIndex::get(0, Attributes::get(RetAttrs)));
2770
2771  for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
2772    ParamTypeList.push_back(ArgList[i].Ty);
2773    if (ArgList[i].Attrs.hasAttributes())
2774      Attrs.push_back(AttributeWithIndex::get(i+1, ArgList[i].Attrs));
2775  }
2776
2777  if (FuncAttrs.hasAttributes())
2778    Attrs.push_back(AttributeWithIndex::get(~0, Attributes::get(FuncAttrs)));
2779
2780  AttrListPtr PAL = AttrListPtr::get(Attrs);
2781
2782  if (PAL.getParamAttributes(1).hasAttribute(Attributes::StructRet) &&
2783      !RetType->isVoidTy())
2784    return Error(RetTypeLoc, "functions with 'sret' argument must return void");
2785
2786  FunctionType *FT =
2787    FunctionType::get(RetType, ParamTypeList, isVarArg);
2788  PointerType *PFT = PointerType::getUnqual(FT);
2789
2790  Fn = 0;
2791  if (!FunctionName.empty()) {
2792    // If this was a definition of a forward reference, remove the definition
2793    // from the forward reference table and fill in the forward ref.
2794    std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator FRVI =
2795      ForwardRefVals.find(FunctionName);
2796    if (FRVI != ForwardRefVals.end()) {
2797      Fn = M->getFunction(FunctionName);
2798      if (!Fn)
2799        return Error(FRVI->second.second, "invalid forward reference to "
2800                     "function as global value!");
2801      if (Fn->getType() != PFT)
2802        return Error(FRVI->second.second, "invalid forward reference to "
2803                     "function '" + FunctionName + "' with wrong type!");
2804
2805      ForwardRefVals.erase(FRVI);
2806    } else if ((Fn = M->getFunction(FunctionName))) {
2807      // Reject redefinitions.
2808      return Error(NameLoc, "invalid redefinition of function '" +
2809                   FunctionName + "'");
2810    } else if (M->getNamedValue(FunctionName)) {
2811      return Error(NameLoc, "redefinition of function '@" + FunctionName + "'");
2812    }
2813
2814  } else {
2815    // If this is a definition of a forward referenced function, make sure the
2816    // types agree.
2817    std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator I
2818      = ForwardRefValIDs.find(NumberedVals.size());
2819    if (I != ForwardRefValIDs.end()) {
2820      Fn = cast<Function>(I->second.first);
2821      if (Fn->getType() != PFT)
2822        return Error(NameLoc, "type of definition and forward reference of '@" +
2823                     Twine(NumberedVals.size()) + "' disagree");
2824      ForwardRefValIDs.erase(I);
2825    }
2826  }
2827
2828  if (Fn == 0)
2829    Fn = Function::Create(FT, GlobalValue::ExternalLinkage, FunctionName, M);
2830  else // Move the forward-reference to the correct spot in the module.
2831    M->getFunctionList().splice(M->end(), M->getFunctionList(), Fn);
2832
2833  if (FunctionName.empty())
2834    NumberedVals.push_back(Fn);
2835
2836  Fn->setLinkage((GlobalValue::LinkageTypes)Linkage);
2837  Fn->setVisibility((GlobalValue::VisibilityTypes)Visibility);
2838  Fn->setCallingConv(CC);
2839  Fn->setAttributes(PAL);
2840  Fn->setUnnamedAddr(UnnamedAddr);
2841  Fn->setAlignment(Alignment);
2842  Fn->setSection(Section);
2843  if (!GC.empty()) Fn->setGC(GC.c_str());
2844
2845  // Add all of the arguments we parsed to the function.
2846  Function::arg_iterator ArgIt = Fn->arg_begin();
2847  for (unsigned i = 0, e = ArgList.size(); i != e; ++i, ++ArgIt) {
2848    // If the argument has a name, insert it into the argument symbol table.
2849    if (ArgList[i].Name.empty()) continue;
2850
2851    // Set the name, if it conflicted, it will be auto-renamed.
2852    ArgIt->setName(ArgList[i].Name);
2853
2854    if (ArgIt->getName() != ArgList[i].Name)
2855      return Error(ArgList[i].Loc, "redefinition of argument '%" +
2856                   ArgList[i].Name + "'");
2857  }
2858
2859  return false;
2860}
2861
2862
2863/// ParseFunctionBody
2864///   ::= '{' BasicBlock+ '}'
2865///
2866bool LLParser::ParseFunctionBody(Function &Fn) {
2867  if (Lex.getKind() != lltok::lbrace)
2868    return TokError("expected '{' in function body");
2869  Lex.Lex();  // eat the {.
2870
2871  int FunctionNumber = -1;
2872  if (!Fn.hasName()) FunctionNumber = NumberedVals.size()-1;
2873
2874  PerFunctionState PFS(*this, Fn, FunctionNumber);
2875
2876  // We need at least one basic block.
2877  if (Lex.getKind() == lltok::rbrace)
2878    return TokError("function body requires at least one basic block");
2879
2880  while (Lex.getKind() != lltok::rbrace)
2881    if (ParseBasicBlock(PFS)) return true;
2882
2883  // Eat the }.
2884  Lex.Lex();
2885
2886  // Verify function is ok.
2887  return PFS.FinishFunction();
2888}
2889
2890/// ParseBasicBlock
2891///   ::= LabelStr? Instruction*
2892bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
2893  // If this basic block starts out with a name, remember it.
2894  std::string Name;
2895  LocTy NameLoc = Lex.getLoc();
2896  if (Lex.getKind() == lltok::LabelStr) {
2897    Name = Lex.getStrVal();
2898    Lex.Lex();
2899  }
2900
2901  BasicBlock *BB = PFS.DefineBB(Name, NameLoc);
2902  if (BB == 0) return true;
2903
2904  std::string NameStr;
2905
2906  // Parse the instructions in this block until we get a terminator.
2907  Instruction *Inst;
2908  SmallVector<std::pair<unsigned, MDNode *>, 4> MetadataOnInst;
2909  do {
2910    // This instruction may have three possibilities for a name: a) none
2911    // specified, b) name specified "%foo =", c) number specified: "%4 =".
2912    LocTy NameLoc = Lex.getLoc();
2913    int NameID = -1;
2914    NameStr = "";
2915
2916    if (Lex.getKind() == lltok::LocalVarID) {
2917      NameID = Lex.getUIntVal();
2918      Lex.Lex();
2919      if (ParseToken(lltok::equal, "expected '=' after instruction id"))
2920        return true;
2921    } else if (Lex.getKind() == lltok::LocalVar) {
2922      NameStr = Lex.getStrVal();
2923      Lex.Lex();
2924      if (ParseToken(lltok::equal, "expected '=' after instruction name"))
2925        return true;
2926    }
2927
2928    switch (ParseInstruction(Inst, BB, PFS)) {
2929    default: llvm_unreachable("Unknown ParseInstruction result!");
2930    case InstError: return true;
2931    case InstNormal:
2932      BB->getInstList().push_back(Inst);
2933
2934      // With a normal result, we check to see if the instruction is followed by
2935      // a comma and metadata.
2936      if (EatIfPresent(lltok::comma))
2937        if (ParseInstructionMetadata(Inst, &PFS))
2938          return true;
2939      break;
2940    case InstExtraComma:
2941      BB->getInstList().push_back(Inst);
2942
2943      // If the instruction parser ate an extra comma at the end of it, it
2944      // *must* be followed by metadata.
2945      if (ParseInstructionMetadata(Inst, &PFS))
2946        return true;
2947      break;
2948    }
2949
2950    // Set the name on the instruction.
2951    if (PFS.SetInstName(NameID, NameStr, NameLoc, Inst)) return true;
2952  } while (!isa<TerminatorInst>(Inst));
2953
2954  return false;
2955}
2956
2957//===----------------------------------------------------------------------===//
2958// Instruction Parsing.
2959//===----------------------------------------------------------------------===//
2960
2961/// ParseInstruction - Parse one of the many different instructions.
2962///
2963int LLParser::ParseInstruction(Instruction *&Inst, BasicBlock *BB,
2964                               PerFunctionState &PFS) {
2965  lltok::Kind Token = Lex.getKind();
2966  if (Token == lltok::Eof)
2967    return TokError("found end of file when expecting more instructions");
2968  LocTy Loc = Lex.getLoc();
2969  unsigned KeywordVal = Lex.getUIntVal();
2970  Lex.Lex();  // Eat the keyword.
2971
2972  switch (Token) {
2973  default:                    return Error(Loc, "expected instruction opcode");
2974  // Terminator Instructions.
2975  case lltok::kw_unreachable: Inst = new UnreachableInst(Context); return false;
2976  case lltok::kw_ret:         return ParseRet(Inst, BB, PFS);
2977  case lltok::kw_br:          return ParseBr(Inst, PFS);
2978  case lltok::kw_switch:      return ParseSwitch(Inst, PFS);
2979  case lltok::kw_indirectbr:  return ParseIndirectBr(Inst, PFS);
2980  case lltok::kw_invoke:      return ParseInvoke(Inst, PFS);
2981  case lltok::kw_resume:      return ParseResume(Inst, PFS);
2982  // Binary Operators.
2983  case lltok::kw_add:
2984  case lltok::kw_sub:
2985  case lltok::kw_mul:
2986  case lltok::kw_shl: {
2987    bool NUW = EatIfPresent(lltok::kw_nuw);
2988    bool NSW = EatIfPresent(lltok::kw_nsw);
2989    if (!NUW) NUW = EatIfPresent(lltok::kw_nuw);
2990
2991    if (ParseArithmetic(Inst, PFS, KeywordVal, 1)) return true;
2992
2993    if (NUW) cast<BinaryOperator>(Inst)->setHasNoUnsignedWrap(true);
2994    if (NSW) cast<BinaryOperator>(Inst)->setHasNoSignedWrap(true);
2995    return false;
2996  }
2997  case lltok::kw_fadd:
2998  case lltok::kw_fsub:
2999  case lltok::kw_fmul:    return ParseArithmetic(Inst, PFS, KeywordVal, 2);
3000
3001  case lltok::kw_sdiv:
3002  case lltok::kw_udiv:
3003  case lltok::kw_lshr:
3004  case lltok::kw_ashr: {
3005    bool Exact = EatIfPresent(lltok::kw_exact);
3006
3007    if (ParseArithmetic(Inst, PFS, KeywordVal, 1)) return true;
3008    if (Exact) cast<BinaryOperator>(Inst)->setIsExact(true);
3009    return false;
3010  }
3011
3012  case lltok::kw_urem:
3013  case lltok::kw_srem:   return ParseArithmetic(Inst, PFS, KeywordVal, 1);
3014  case lltok::kw_fdiv:
3015  case lltok::kw_frem:   return ParseArithmetic(Inst, PFS, KeywordVal, 2);
3016  case lltok::kw_and:
3017  case lltok::kw_or:
3018  case lltok::kw_xor:    return ParseLogical(Inst, PFS, KeywordVal);
3019  case lltok::kw_icmp:
3020  case lltok::kw_fcmp:   return ParseCompare(Inst, PFS, KeywordVal);
3021  // Casts.
3022  case lltok::kw_trunc:
3023  case lltok::kw_zext:
3024  case lltok::kw_sext:
3025  case lltok::kw_fptrunc:
3026  case lltok::kw_fpext:
3027  case lltok::kw_bitcast:
3028  case lltok::kw_uitofp:
3029  case lltok::kw_sitofp:
3030  case lltok::kw_fptoui:
3031  case lltok::kw_fptosi:
3032  case lltok::kw_inttoptr:
3033  case lltok::kw_ptrtoint:       return ParseCast(Inst, PFS, KeywordVal);
3034  // Other.
3035  case lltok::kw_select:         return ParseSelect(Inst, PFS);
3036  case lltok::kw_va_arg:         return ParseVA_Arg(Inst, PFS);
3037  case lltok::kw_extractelement: return ParseExtractElement(Inst, PFS);
3038  case lltok::kw_insertelement:  return ParseInsertElement(Inst, PFS);
3039  case lltok::kw_shufflevector:  return ParseShuffleVector(Inst, PFS);
3040  case lltok::kw_phi:            return ParsePHI(Inst, PFS);
3041  case lltok::kw_landingpad:     return ParseLandingPad(Inst, PFS);
3042  case lltok::kw_call:           return ParseCall(Inst, PFS, false);
3043  case lltok::kw_tail:           return ParseCall(Inst, PFS, true);
3044  // Memory.
3045  case lltok::kw_alloca:         return ParseAlloc(Inst, PFS);
3046  case lltok::kw_load:           return ParseLoad(Inst, PFS);
3047  case lltok::kw_store:          return ParseStore(Inst, PFS);
3048  case lltok::kw_cmpxchg:        return ParseCmpXchg(Inst, PFS);
3049  case lltok::kw_atomicrmw:      return ParseAtomicRMW(Inst, PFS);
3050  case lltok::kw_fence:          return ParseFence(Inst, PFS);
3051  case lltok::kw_getelementptr: return ParseGetElementPtr(Inst, PFS);
3052  case lltok::kw_extractvalue:  return ParseExtractValue(Inst, PFS);
3053  case lltok::kw_insertvalue:   return ParseInsertValue(Inst, PFS);
3054  }
3055}
3056
3057/// ParseCmpPredicate - Parse an integer or fp predicate, based on Kind.
3058bool LLParser::ParseCmpPredicate(unsigned &P, unsigned Opc) {
3059  if (Opc == Instruction::FCmp) {
3060    switch (Lex.getKind()) {
3061    default: TokError("expected fcmp predicate (e.g. 'oeq')");
3062    case lltok::kw_oeq: P = CmpInst::FCMP_OEQ; break;
3063    case lltok::kw_one: P = CmpInst::FCMP_ONE; break;
3064    case lltok::kw_olt: P = CmpInst::FCMP_OLT; break;
3065    case lltok::kw_ogt: P = CmpInst::FCMP_OGT; break;
3066    case lltok::kw_ole: P = CmpInst::FCMP_OLE; break;
3067    case lltok::kw_oge: P = CmpInst::FCMP_OGE; break;
3068    case lltok::kw_ord: P = CmpInst::FCMP_ORD; break;
3069    case lltok::kw_uno: P = CmpInst::FCMP_UNO; break;
3070    case lltok::kw_ueq: P = CmpInst::FCMP_UEQ; break;
3071    case lltok::kw_une: P = CmpInst::FCMP_UNE; break;
3072    case lltok::kw_ult: P = CmpInst::FCMP_ULT; break;
3073    case lltok::kw_ugt: P = CmpInst::FCMP_UGT; break;
3074    case lltok::kw_ule: P = CmpInst::FCMP_ULE; break;
3075    case lltok::kw_uge: P = CmpInst::FCMP_UGE; break;
3076    case lltok::kw_true: P = CmpInst::FCMP_TRUE; break;
3077    case lltok::kw_false: P = CmpInst::FCMP_FALSE; break;
3078    }
3079  } else {
3080    switch (Lex.getKind()) {
3081    default: TokError("expected icmp predicate (e.g. 'eq')");
3082    case lltok::kw_eq:  P = CmpInst::ICMP_EQ; break;
3083    case lltok::kw_ne:  P = CmpInst::ICMP_NE; break;
3084    case lltok::kw_slt: P = CmpInst::ICMP_SLT; break;
3085    case lltok::kw_sgt: P = CmpInst::ICMP_SGT; break;
3086    case lltok::kw_sle: P = CmpInst::ICMP_SLE; break;
3087    case lltok::kw_sge: P = CmpInst::ICMP_SGE; break;
3088    case lltok::kw_ult: P = CmpInst::ICMP_ULT; break;
3089    case lltok::kw_ugt: P = CmpInst::ICMP_UGT; break;
3090    case lltok::kw_ule: P = CmpInst::ICMP_ULE; break;
3091    case lltok::kw_uge: P = CmpInst::ICMP_UGE; break;
3092    }
3093  }
3094  Lex.Lex();
3095  return false;
3096}
3097
3098//===----------------------------------------------------------------------===//
3099// Terminator Instructions.
3100//===----------------------------------------------------------------------===//
3101
3102/// ParseRet - Parse a return instruction.
3103///   ::= 'ret' void (',' !dbg, !1)*
3104///   ::= 'ret' TypeAndValue (',' !dbg, !1)*
3105bool LLParser::ParseRet(Instruction *&Inst, BasicBlock *BB,
3106                        PerFunctionState &PFS) {
3107  SMLoc TypeLoc = Lex.getLoc();
3108  Type *Ty = 0;
3109  if (ParseType(Ty, true /*void allowed*/)) return true;
3110
3111  Type *ResType = PFS.getFunction().getReturnType();
3112
3113  if (Ty->isVoidTy()) {
3114    if (!ResType->isVoidTy())
3115      return Error(TypeLoc, "value doesn't match function result type '" +
3116                   getTypeString(ResType) + "'");
3117
3118    Inst = ReturnInst::Create(Context);
3119    return false;
3120  }
3121
3122  Value *RV;
3123  if (ParseValue(Ty, RV, PFS)) return true;
3124
3125  if (ResType != RV->getType())
3126    return Error(TypeLoc, "value doesn't match function result type '" +
3127                 getTypeString(ResType) + "'");
3128
3129  Inst = ReturnInst::Create(Context, RV);
3130  return false;
3131}
3132
3133
3134/// ParseBr
3135///   ::= 'br' TypeAndValue
3136///   ::= 'br' TypeAndValue ',' TypeAndValue ',' TypeAndValue
3137bool LLParser::ParseBr(Instruction *&Inst, PerFunctionState &PFS) {
3138  LocTy Loc, Loc2;
3139  Value *Op0;
3140  BasicBlock *Op1, *Op2;
3141  if (ParseTypeAndValue(Op0, Loc, PFS)) return true;
3142
3143  if (BasicBlock *BB = dyn_cast<BasicBlock>(Op0)) {
3144    Inst = BranchInst::Create(BB);
3145    return false;
3146  }
3147
3148  if (Op0->getType() != Type::getInt1Ty(Context))
3149    return Error(Loc, "branch condition must have 'i1' type");
3150
3151  if (ParseToken(lltok::comma, "expected ',' after branch condition") ||
3152      ParseTypeAndBasicBlock(Op1, Loc, PFS) ||
3153      ParseToken(lltok::comma, "expected ',' after true destination") ||
3154      ParseTypeAndBasicBlock(Op2, Loc2, PFS))
3155    return true;
3156
3157  Inst = BranchInst::Create(Op1, Op2, Op0);
3158  return false;
3159}
3160
3161/// ParseSwitch
3162///  Instruction
3163///    ::= 'switch' TypeAndValue ',' TypeAndValue '[' JumpTable ']'
3164///  JumpTable
3165///    ::= (TypeAndValue ',' TypeAndValue)*
3166bool LLParser::ParseSwitch(Instruction *&Inst, PerFunctionState &PFS) {
3167  LocTy CondLoc, BBLoc;
3168  Value *Cond;
3169  BasicBlock *DefaultBB;
3170  if (ParseTypeAndValue(Cond, CondLoc, PFS) ||
3171      ParseToken(lltok::comma, "expected ',' after switch condition") ||
3172      ParseTypeAndBasicBlock(DefaultBB, BBLoc, PFS) ||
3173      ParseToken(lltok::lsquare, "expected '[' with switch table"))
3174    return true;
3175
3176  if (!Cond->getType()->isIntegerTy())
3177    return Error(CondLoc, "switch condition must have integer type");
3178
3179  // Parse the jump table pairs.
3180  SmallPtrSet<Value*, 32> SeenCases;
3181  SmallVector<std::pair<ConstantInt*, BasicBlock*>, 32> Table;
3182  while (Lex.getKind() != lltok::rsquare) {
3183    Value *Constant;
3184    BasicBlock *DestBB;
3185
3186    if (ParseTypeAndValue(Constant, CondLoc, PFS) ||
3187        ParseToken(lltok::comma, "expected ',' after case value") ||
3188        ParseTypeAndBasicBlock(DestBB, PFS))
3189      return true;
3190
3191    if (!SeenCases.insert(Constant))
3192      return Error(CondLoc, "duplicate case value in switch");
3193    if (!isa<ConstantInt>(Constant))
3194      return Error(CondLoc, "case value is not a constant integer");
3195
3196    Table.push_back(std::make_pair(cast<ConstantInt>(Constant), DestBB));
3197  }
3198
3199  Lex.Lex();  // Eat the ']'.
3200
3201  SwitchInst *SI = SwitchInst::Create(Cond, DefaultBB, Table.size());
3202  for (unsigned i = 0, e = Table.size(); i != e; ++i)
3203    SI->addCase(Table[i].first, Table[i].second);
3204  Inst = SI;
3205  return false;
3206}
3207
3208/// ParseIndirectBr
3209///  Instruction
3210///    ::= 'indirectbr' TypeAndValue ',' '[' LabelList ']'
3211bool LLParser::ParseIndirectBr(Instruction *&Inst, PerFunctionState &PFS) {
3212  LocTy AddrLoc;
3213  Value *Address;
3214  if (ParseTypeAndValue(Address, AddrLoc, PFS) ||
3215      ParseToken(lltok::comma, "expected ',' after indirectbr address") ||
3216      ParseToken(lltok::lsquare, "expected '[' with indirectbr"))
3217    return true;
3218
3219  if (!Address->getType()->isPointerTy())
3220    return Error(AddrLoc, "indirectbr address must have pointer type");
3221
3222  // Parse the destination list.
3223  SmallVector<BasicBlock*, 16> DestList;
3224
3225  if (Lex.getKind() != lltok::rsquare) {
3226    BasicBlock *DestBB;
3227    if (ParseTypeAndBasicBlock(DestBB, PFS))
3228      return true;
3229    DestList.push_back(DestBB);
3230
3231    while (EatIfPresent(lltok::comma)) {
3232      if (ParseTypeAndBasicBlock(DestBB, PFS))
3233        return true;
3234      DestList.push_back(DestBB);
3235    }
3236  }
3237
3238  if (ParseToken(lltok::rsquare, "expected ']' at end of block list"))
3239    return true;
3240
3241  IndirectBrInst *IBI = IndirectBrInst::Create(Address, DestList.size());
3242  for (unsigned i = 0, e = DestList.size(); i != e; ++i)
3243    IBI->addDestination(DestList[i]);
3244  Inst = IBI;
3245  return false;
3246}
3247
3248
3249/// ParseInvoke
3250///   ::= 'invoke' OptionalCallingConv OptionalAttrs Type Value ParamList
3251///       OptionalAttrs 'to' TypeAndValue 'unwind' TypeAndValue
3252bool LLParser::ParseInvoke(Instruction *&Inst, PerFunctionState &PFS) {
3253  LocTy CallLoc = Lex.getLoc();
3254  Attributes::Builder RetAttrs, FnAttrs;
3255  CallingConv::ID CC;
3256  Type *RetType = 0;
3257  LocTy RetTypeLoc;
3258  ValID CalleeID;
3259  SmallVector<ParamInfo, 16> ArgList;
3260
3261  BasicBlock *NormalBB, *UnwindBB;
3262  if (ParseOptionalCallingConv(CC) ||
3263      ParseOptionalAttrs(RetAttrs, 1) ||
3264      ParseType(RetType, RetTypeLoc, true /*void allowed*/) ||
3265      ParseValID(CalleeID) ||
3266      ParseParameterList(ArgList, PFS) ||
3267      ParseOptionalAttrs(FnAttrs, 2) ||
3268      ParseToken(lltok::kw_to, "expected 'to' in invoke") ||
3269      ParseTypeAndBasicBlock(NormalBB, PFS) ||
3270      ParseToken(lltok::kw_unwind, "expected 'unwind' in invoke") ||
3271      ParseTypeAndBasicBlock(UnwindBB, PFS))
3272    return true;
3273
3274  // If RetType is a non-function pointer type, then this is the short syntax
3275  // for the call, which means that RetType is just the return type.  Infer the
3276  // rest of the function argument types from the arguments that are present.
3277  PointerType *PFTy = 0;
3278  FunctionType *Ty = 0;
3279  if (!(PFTy = dyn_cast<PointerType>(RetType)) ||
3280      !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
3281    // Pull out the types of all of the arguments...
3282    std::vector<Type*> ParamTypes;
3283    for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
3284      ParamTypes.push_back(ArgList[i].V->getType());
3285
3286    if (!FunctionType::isValidReturnType(RetType))
3287      return Error(RetTypeLoc, "Invalid result type for LLVM function");
3288
3289    Ty = FunctionType::get(RetType, ParamTypes, false);
3290    PFTy = PointerType::getUnqual(Ty);
3291  }
3292
3293  // Look up the callee.
3294  Value *Callee;
3295  if (ConvertValIDToValue(PFTy, CalleeID, Callee, &PFS)) return true;
3296
3297  // Set up the Attributes for the function.
3298  SmallVector<AttributeWithIndex, 8> Attrs;
3299  if (RetAttrs.hasAttributes())
3300    Attrs.push_back(AttributeWithIndex::get(0, Attributes::get(RetAttrs)));
3301
3302  SmallVector<Value*, 8> Args;
3303
3304  // Loop through FunctionType's arguments and ensure they are specified
3305  // correctly.  Also, gather any parameter attributes.
3306  FunctionType::param_iterator I = Ty->param_begin();
3307  FunctionType::param_iterator E = Ty->param_end();
3308  for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
3309    Type *ExpectedTy = 0;
3310    if (I != E) {
3311      ExpectedTy = *I++;
3312    } else if (!Ty->isVarArg()) {
3313      return Error(ArgList[i].Loc, "too many arguments specified");
3314    }
3315
3316    if (ExpectedTy && ExpectedTy != ArgList[i].V->getType())
3317      return Error(ArgList[i].Loc, "argument is not of expected type '" +
3318                   getTypeString(ExpectedTy) + "'");
3319    Args.push_back(ArgList[i].V);
3320    if (ArgList[i].Attrs.hasAttributes())
3321      Attrs.push_back(AttributeWithIndex::get(i+1, ArgList[i].Attrs));
3322  }
3323
3324  if (I != E)
3325    return Error(CallLoc, "not enough parameters specified for call");
3326
3327  if (FnAttrs.hasAttributes())
3328    Attrs.push_back(AttributeWithIndex::get(~0, Attributes::get(FnAttrs)));
3329
3330  // Finish off the Attributes and check them
3331  AttrListPtr PAL = AttrListPtr::get(Attrs);
3332
3333  InvokeInst *II = InvokeInst::Create(Callee, NormalBB, UnwindBB, Args);
3334  II->setCallingConv(CC);
3335  II->setAttributes(PAL);
3336  Inst = II;
3337  return false;
3338}
3339
3340/// ParseResume
3341///   ::= 'resume' TypeAndValue
3342bool LLParser::ParseResume(Instruction *&Inst, PerFunctionState &PFS) {
3343  Value *Exn; LocTy ExnLoc;
3344  if (ParseTypeAndValue(Exn, ExnLoc, PFS))
3345    return true;
3346
3347  ResumeInst *RI = ResumeInst::Create(Exn);
3348  Inst = RI;
3349  return false;
3350}
3351
3352//===----------------------------------------------------------------------===//
3353// Binary Operators.
3354//===----------------------------------------------------------------------===//
3355
3356/// ParseArithmetic
3357///  ::= ArithmeticOps TypeAndValue ',' Value
3358///
3359/// If OperandType is 0, then any FP or integer operand is allowed.  If it is 1,
3360/// then any integer operand is allowed, if it is 2, any fp operand is allowed.
3361bool LLParser::ParseArithmetic(Instruction *&Inst, PerFunctionState &PFS,
3362                               unsigned Opc, unsigned OperandType) {
3363  LocTy Loc; Value *LHS, *RHS;
3364  if (ParseTypeAndValue(LHS, Loc, PFS) ||
3365      ParseToken(lltok::comma, "expected ',' in arithmetic operation") ||
3366      ParseValue(LHS->getType(), RHS, PFS))
3367    return true;
3368
3369  bool Valid;
3370  switch (OperandType) {
3371  default: llvm_unreachable("Unknown operand type!");
3372  case 0: // int or FP.
3373    Valid = LHS->getType()->isIntOrIntVectorTy() ||
3374            LHS->getType()->isFPOrFPVectorTy();
3375    break;
3376  case 1: Valid = LHS->getType()->isIntOrIntVectorTy(); break;
3377  case 2: Valid = LHS->getType()->isFPOrFPVectorTy(); break;
3378  }
3379
3380  if (!Valid)
3381    return Error(Loc, "invalid operand type for instruction");
3382
3383  Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS);
3384  return false;
3385}
3386
3387/// ParseLogical
3388///  ::= ArithmeticOps TypeAndValue ',' Value {
3389bool LLParser::ParseLogical(Instruction *&Inst, PerFunctionState &PFS,
3390                            unsigned Opc) {
3391  LocTy Loc; Value *LHS, *RHS;
3392  if (ParseTypeAndValue(LHS, Loc, PFS) ||
3393      ParseToken(lltok::comma, "expected ',' in logical operation") ||
3394      ParseValue(LHS->getType(), RHS, PFS))
3395    return true;
3396
3397  if (!LHS->getType()->isIntOrIntVectorTy())
3398    return Error(Loc,"instruction requires integer or integer vector operands");
3399
3400  Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS);
3401  return false;
3402}
3403
3404
3405/// ParseCompare
3406///  ::= 'icmp' IPredicates TypeAndValue ',' Value
3407///  ::= 'fcmp' FPredicates TypeAndValue ',' Value
3408bool LLParser::ParseCompare(Instruction *&Inst, PerFunctionState &PFS,
3409                            unsigned Opc) {
3410  // Parse the integer/fp comparison predicate.
3411  LocTy Loc;
3412  unsigned Pred;
3413  Value *LHS, *RHS;
3414  if (ParseCmpPredicate(Pred, Opc) ||
3415      ParseTypeAndValue(LHS, Loc, PFS) ||
3416      ParseToken(lltok::comma, "expected ',' after compare value") ||
3417      ParseValue(LHS->getType(), RHS, PFS))
3418    return true;
3419
3420  if (Opc == Instruction::FCmp) {
3421    if (!LHS->getType()->isFPOrFPVectorTy())
3422      return Error(Loc, "fcmp requires floating point operands");
3423    Inst = new FCmpInst(CmpInst::Predicate(Pred), LHS, RHS);
3424  } else {
3425    assert(Opc == Instruction::ICmp && "Unknown opcode for CmpInst!");
3426    if (!LHS->getType()->isIntOrIntVectorTy() &&
3427        !LHS->getType()->getScalarType()->isPointerTy())
3428      return Error(Loc, "icmp requires integer operands");
3429    Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS);
3430  }
3431  return false;
3432}
3433
3434//===----------------------------------------------------------------------===//
3435// Other Instructions.
3436//===----------------------------------------------------------------------===//
3437
3438
3439/// ParseCast
3440///   ::= CastOpc TypeAndValue 'to' Type
3441bool LLParser::ParseCast(Instruction *&Inst, PerFunctionState &PFS,
3442                         unsigned Opc) {
3443  LocTy Loc;
3444  Value *Op;
3445  Type *DestTy = 0;
3446  if (ParseTypeAndValue(Op, Loc, PFS) ||
3447      ParseToken(lltok::kw_to, "expected 'to' after cast value") ||
3448      ParseType(DestTy))
3449    return true;
3450
3451  if (!CastInst::castIsValid((Instruction::CastOps)Opc, Op, DestTy)) {
3452    CastInst::castIsValid((Instruction::CastOps)Opc, Op, DestTy);
3453    return Error(Loc, "invalid cast opcode for cast from '" +
3454                 getTypeString(Op->getType()) + "' to '" +
3455                 getTypeString(DestTy) + "'");
3456  }
3457  Inst = CastInst::Create((Instruction::CastOps)Opc, Op, DestTy);
3458  return false;
3459}
3460
3461/// ParseSelect
3462///   ::= 'select' TypeAndValue ',' TypeAndValue ',' TypeAndValue
3463bool LLParser::ParseSelect(Instruction *&Inst, PerFunctionState &PFS) {
3464  LocTy Loc;
3465  Value *Op0, *Op1, *Op2;
3466  if (ParseTypeAndValue(Op0, Loc, PFS) ||
3467      ParseToken(lltok::comma, "expected ',' after select condition") ||
3468      ParseTypeAndValue(Op1, PFS) ||
3469      ParseToken(lltok::comma, "expected ',' after select value") ||
3470      ParseTypeAndValue(Op2, PFS))
3471    return true;
3472
3473  if (const char *Reason = SelectInst::areInvalidOperands(Op0, Op1, Op2))
3474    return Error(Loc, Reason);
3475
3476  Inst = SelectInst::Create(Op0, Op1, Op2);
3477  return false;
3478}
3479
3480/// ParseVA_Arg
3481///   ::= 'va_arg' TypeAndValue ',' Type
3482bool LLParser::ParseVA_Arg(Instruction *&Inst, PerFunctionState &PFS) {
3483  Value *Op;
3484  Type *EltTy = 0;
3485  LocTy TypeLoc;
3486  if (ParseTypeAndValue(Op, PFS) ||
3487      ParseToken(lltok::comma, "expected ',' after vaarg operand") ||
3488      ParseType(EltTy, TypeLoc))
3489    return true;
3490
3491  if (!EltTy->isFirstClassType())
3492    return Error(TypeLoc, "va_arg requires operand with first class type");
3493
3494  Inst = new VAArgInst(Op, EltTy);
3495  return false;
3496}
3497
3498/// ParseExtractElement
3499///   ::= 'extractelement' TypeAndValue ',' TypeAndValue
3500bool LLParser::ParseExtractElement(Instruction *&Inst, PerFunctionState &PFS) {
3501  LocTy Loc;
3502  Value *Op0, *Op1;
3503  if (ParseTypeAndValue(Op0, Loc, PFS) ||
3504      ParseToken(lltok::comma, "expected ',' after extract value") ||
3505      ParseTypeAndValue(Op1, PFS))
3506    return true;
3507
3508  if (!ExtractElementInst::isValidOperands(Op0, Op1))
3509    return Error(Loc, "invalid extractelement operands");
3510
3511  Inst = ExtractElementInst::Create(Op0, Op1);
3512  return false;
3513}
3514
3515/// ParseInsertElement
3516///   ::= 'insertelement' TypeAndValue ',' TypeAndValue ',' TypeAndValue
3517bool LLParser::ParseInsertElement(Instruction *&Inst, PerFunctionState &PFS) {
3518  LocTy Loc;
3519  Value *Op0, *Op1, *Op2;
3520  if (ParseTypeAndValue(Op0, Loc, PFS) ||
3521      ParseToken(lltok::comma, "expected ',' after insertelement value") ||
3522      ParseTypeAndValue(Op1, PFS) ||
3523      ParseToken(lltok::comma, "expected ',' after insertelement value") ||
3524      ParseTypeAndValue(Op2, PFS))
3525    return true;
3526
3527  if (!InsertElementInst::isValidOperands(Op0, Op1, Op2))
3528    return Error(Loc, "invalid insertelement operands");
3529
3530  Inst = InsertElementInst::Create(Op0, Op1, Op2);
3531  return false;
3532}
3533
3534/// ParseShuffleVector
3535///   ::= 'shufflevector' TypeAndValue ',' TypeAndValue ',' TypeAndValue
3536bool LLParser::ParseShuffleVector(Instruction *&Inst, PerFunctionState &PFS) {
3537  LocTy Loc;
3538  Value *Op0, *Op1, *Op2;
3539  if (ParseTypeAndValue(Op0, Loc, PFS) ||
3540      ParseToken(lltok::comma, "expected ',' after shuffle mask") ||
3541      ParseTypeAndValue(Op1, PFS) ||
3542      ParseToken(lltok::comma, "expected ',' after shuffle value") ||
3543      ParseTypeAndValue(Op2, PFS))
3544    return true;
3545
3546  if (!ShuffleVectorInst::isValidOperands(Op0, Op1, Op2))
3547    return Error(Loc, "invalid shufflevector operands");
3548
3549  Inst = new ShuffleVectorInst(Op0, Op1, Op2);
3550  return false;
3551}
3552
3553/// ParsePHI
3554///   ::= 'phi' Type '[' Value ',' Value ']' (',' '[' Value ',' Value ']')*
3555int LLParser::ParsePHI(Instruction *&Inst, PerFunctionState &PFS) {
3556  Type *Ty = 0;  LocTy TypeLoc;
3557  Value *Op0, *Op1;
3558
3559  if (ParseType(Ty, TypeLoc) ||
3560      ParseToken(lltok::lsquare, "expected '[' in phi value list") ||
3561      ParseValue(Ty, Op0, PFS) ||
3562      ParseToken(lltok::comma, "expected ',' after insertelement value") ||
3563      ParseValue(Type::getLabelTy(Context), Op1, PFS) ||
3564      ParseToken(lltok::rsquare, "expected ']' in phi value list"))
3565    return true;
3566
3567  bool AteExtraComma = false;
3568  SmallVector<std::pair<Value*, BasicBlock*>, 16> PHIVals;
3569  while (1) {
3570    PHIVals.push_back(std::make_pair(Op0, cast<BasicBlock>(Op1)));
3571
3572    if (!EatIfPresent(lltok::comma))
3573      break;
3574
3575    if (Lex.getKind() == lltok::MetadataVar) {
3576      AteExtraComma = true;
3577      break;
3578    }
3579
3580    if (ParseToken(lltok::lsquare, "expected '[' in phi value list") ||
3581        ParseValue(Ty, Op0, PFS) ||
3582        ParseToken(lltok::comma, "expected ',' after insertelement value") ||
3583        ParseValue(Type::getLabelTy(Context), Op1, PFS) ||
3584        ParseToken(lltok::rsquare, "expected ']' in phi value list"))
3585      return true;
3586  }
3587
3588  if (!Ty->isFirstClassType())
3589    return Error(TypeLoc, "phi node must have first class type");
3590
3591  PHINode *PN = PHINode::Create(Ty, PHIVals.size());
3592  for (unsigned i = 0, e = PHIVals.size(); i != e; ++i)
3593    PN->addIncoming(PHIVals[i].first, PHIVals[i].second);
3594  Inst = PN;
3595  return AteExtraComma ? InstExtraComma : InstNormal;
3596}
3597
3598/// ParseLandingPad
3599///   ::= 'landingpad' Type 'personality' TypeAndValue 'cleanup'? Clause+
3600/// Clause
3601///   ::= 'catch' TypeAndValue
3602///   ::= 'filter'
3603///   ::= 'filter' TypeAndValue ( ',' TypeAndValue )*
3604bool LLParser::ParseLandingPad(Instruction *&Inst, PerFunctionState &PFS) {
3605  Type *Ty = 0; LocTy TyLoc;
3606  Value *PersFn; LocTy PersFnLoc;
3607
3608  if (ParseType(Ty, TyLoc) ||
3609      ParseToken(lltok::kw_personality, "expected 'personality'") ||
3610      ParseTypeAndValue(PersFn, PersFnLoc, PFS))
3611    return true;
3612
3613  LandingPadInst *LP = LandingPadInst::Create(Ty, PersFn, 0);
3614  LP->setCleanup(EatIfPresent(lltok::kw_cleanup));
3615
3616  while (Lex.getKind() == lltok::kw_catch || Lex.getKind() == lltok::kw_filter){
3617    LandingPadInst::ClauseType CT;
3618    if (EatIfPresent(lltok::kw_catch))
3619      CT = LandingPadInst::Catch;
3620    else if (EatIfPresent(lltok::kw_filter))
3621      CT = LandingPadInst::Filter;
3622    else
3623      return TokError("expected 'catch' or 'filter' clause type");
3624
3625    Value *V; LocTy VLoc;
3626    if (ParseTypeAndValue(V, VLoc, PFS)) {
3627      delete LP;
3628      return true;
3629    }
3630
3631    // A 'catch' type expects a non-array constant. A filter clause expects an
3632    // array constant.
3633    if (CT == LandingPadInst::Catch) {
3634      if (isa<ArrayType>(V->getType()))
3635        Error(VLoc, "'catch' clause has an invalid type");
3636    } else {
3637      if (!isa<ArrayType>(V->getType()))
3638        Error(VLoc, "'filter' clause has an invalid type");
3639    }
3640
3641    LP->addClause(V);
3642  }
3643
3644  Inst = LP;
3645  return false;
3646}
3647
3648/// ParseCall
3649///   ::= 'tail'? 'call' OptionalCallingConv OptionalAttrs Type Value
3650///       ParameterList OptionalAttrs
3651bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS,
3652                         bool isTail) {
3653  Attributes::Builder RetAttrs, FnAttrs;
3654  CallingConv::ID CC;
3655  Type *RetType = 0;
3656  LocTy RetTypeLoc;
3657  ValID CalleeID;
3658  SmallVector<ParamInfo, 16> ArgList;
3659  LocTy CallLoc = Lex.getLoc();
3660
3661  if ((isTail && ParseToken(lltok::kw_call, "expected 'tail call'")) ||
3662      ParseOptionalCallingConv(CC) ||
3663      ParseOptionalAttrs(RetAttrs, 1) ||
3664      ParseType(RetType, RetTypeLoc, true /*void allowed*/) ||
3665      ParseValID(CalleeID) ||
3666      ParseParameterList(ArgList, PFS) ||
3667      ParseOptionalAttrs(FnAttrs, 2))
3668    return true;
3669
3670  // If RetType is a non-function pointer type, then this is the short syntax
3671  // for the call, which means that RetType is just the return type.  Infer the
3672  // rest of the function argument types from the arguments that are present.
3673  PointerType *PFTy = 0;
3674  FunctionType *Ty = 0;
3675  if (!(PFTy = dyn_cast<PointerType>(RetType)) ||
3676      !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
3677    // Pull out the types of all of the arguments...
3678    std::vector<Type*> ParamTypes;
3679    for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
3680      ParamTypes.push_back(ArgList[i].V->getType());
3681
3682    if (!FunctionType::isValidReturnType(RetType))
3683      return Error(RetTypeLoc, "Invalid result type for LLVM function");
3684
3685    Ty = FunctionType::get(RetType, ParamTypes, false);
3686    PFTy = PointerType::getUnqual(Ty);
3687  }
3688
3689  // Look up the callee.
3690  Value *Callee;
3691  if (ConvertValIDToValue(PFTy, CalleeID, Callee, &PFS)) return true;
3692
3693  // Set up the Attributes for the function.
3694  SmallVector<AttributeWithIndex, 8> Attrs;
3695  if (RetAttrs.hasAttributes())
3696    Attrs.push_back(AttributeWithIndex::get(0, Attributes::get(RetAttrs)));
3697
3698  SmallVector<Value*, 8> Args;
3699
3700  // Loop through FunctionType's arguments and ensure they are specified
3701  // correctly.  Also, gather any parameter attributes.
3702  FunctionType::param_iterator I = Ty->param_begin();
3703  FunctionType::param_iterator E = Ty->param_end();
3704  for (unsigned i = 0, e = ArgList.size(); i != e; ++i) {
3705    Type *ExpectedTy = 0;
3706    if (I != E) {
3707      ExpectedTy = *I++;
3708    } else if (!Ty->isVarArg()) {
3709      return Error(ArgList[i].Loc, "too many arguments specified");
3710    }
3711
3712    if (ExpectedTy && ExpectedTy != ArgList[i].V->getType())
3713      return Error(ArgList[i].Loc, "argument is not of expected type '" +
3714                   getTypeString(ExpectedTy) + "'");
3715    Args.push_back(ArgList[i].V);
3716    if (ArgList[i].Attrs.hasAttributes())
3717      Attrs.push_back(AttributeWithIndex::get(i+1, ArgList[i].Attrs));
3718  }
3719
3720  if (I != E)
3721    return Error(CallLoc, "not enough parameters specified for call");
3722
3723  if (FnAttrs.hasAttributes())
3724    Attrs.push_back(AttributeWithIndex::get(~0, Attributes::get(FnAttrs)));
3725
3726  // Finish off the Attributes and check them
3727  AttrListPtr PAL = AttrListPtr::get(Attrs);
3728
3729  CallInst *CI = CallInst::Create(Callee, Args);
3730  CI->setTailCall(isTail);
3731  CI->setCallingConv(CC);
3732  CI->setAttributes(PAL);
3733  Inst = CI;
3734  return false;
3735}
3736
3737//===----------------------------------------------------------------------===//
3738// Memory Instructions.
3739//===----------------------------------------------------------------------===//
3740
3741/// ParseAlloc
3742///   ::= 'alloca' Type (',' TypeAndValue)? (',' OptionalInfo)?
3743int LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS) {
3744  Value *Size = 0;
3745  LocTy SizeLoc;
3746  unsigned Alignment = 0;
3747  Type *Ty = 0;
3748  if (ParseType(Ty)) return true;
3749
3750  bool AteExtraComma = false;
3751  if (EatIfPresent(lltok::comma)) {
3752    if (Lex.getKind() == lltok::kw_align) {
3753      if (ParseOptionalAlignment(Alignment)) return true;
3754    } else if (Lex.getKind() == lltok::MetadataVar) {
3755      AteExtraComma = true;
3756    } else {
3757      if (ParseTypeAndValue(Size, SizeLoc, PFS) ||
3758          ParseOptionalCommaAlign(Alignment, AteExtraComma))
3759        return true;
3760    }
3761  }
3762
3763  if (Size && !Size->getType()->isIntegerTy())
3764    return Error(SizeLoc, "element count must have integer type");
3765
3766  Inst = new AllocaInst(Ty, Size, Alignment);
3767  return AteExtraComma ? InstExtraComma : InstNormal;
3768}
3769
3770/// ParseLoad
3771///   ::= 'load' 'volatile'? TypeAndValue (',' 'align' i32)?
3772///   ::= 'load' 'atomic' 'volatile'? TypeAndValue
3773///       'singlethread'? AtomicOrdering (',' 'align' i32)?
3774int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS) {
3775  Value *Val; LocTy Loc;
3776  unsigned Alignment = 0;
3777  bool AteExtraComma = false;
3778  bool isAtomic = false;
3779  AtomicOrdering Ordering = NotAtomic;
3780  SynchronizationScope Scope = CrossThread;
3781
3782  if (Lex.getKind() == lltok::kw_atomic) {
3783    isAtomic = true;
3784    Lex.Lex();
3785  }
3786
3787  bool isVolatile = false;
3788  if (Lex.getKind() == lltok::kw_volatile) {
3789    isVolatile = true;
3790    Lex.Lex();
3791  }
3792
3793  if (ParseTypeAndValue(Val, Loc, PFS) ||
3794      ParseScopeAndOrdering(isAtomic, Scope, Ordering) ||
3795      ParseOptionalCommaAlign(Alignment, AteExtraComma))
3796    return true;
3797
3798  if (!Val->getType()->isPointerTy() ||
3799      !cast<PointerType>(Val->getType())->getElementType()->isFirstClassType())
3800    return Error(Loc, "load operand must be a pointer to a first class type");
3801  if (isAtomic && !Alignment)
3802    return Error(Loc, "atomic load must have explicit non-zero alignment");
3803  if (Ordering == Release || Ordering == AcquireRelease)
3804    return Error(Loc, "atomic load cannot use Release ordering");
3805
3806  Inst = new LoadInst(Val, "", isVolatile, Alignment, Ordering, Scope);
3807  return AteExtraComma ? InstExtraComma : InstNormal;
3808}
3809
3810/// ParseStore
3811
3812///   ::= 'store' 'volatile'? TypeAndValue ',' TypeAndValue (',' 'align' i32)?
3813///   ::= 'store' 'atomic' 'volatile'? TypeAndValue ',' TypeAndValue
3814///       'singlethread'? AtomicOrdering (',' 'align' i32)?
3815int LLParser::ParseStore(Instruction *&Inst, PerFunctionState &PFS) {
3816  Value *Val, *Ptr; LocTy Loc, PtrLoc;
3817  unsigned Alignment = 0;
3818  bool AteExtraComma = false;
3819  bool isAtomic = false;
3820  AtomicOrdering Ordering = NotAtomic;
3821  SynchronizationScope Scope = CrossThread;
3822
3823  if (Lex.getKind() == lltok::kw_atomic) {
3824    isAtomic = true;
3825    Lex.Lex();
3826  }
3827
3828  bool isVolatile = false;
3829  if (Lex.getKind() == lltok::kw_volatile) {
3830    isVolatile = true;
3831    Lex.Lex();
3832  }
3833
3834  if (ParseTypeAndValue(Val, Loc, PFS) ||
3835      ParseToken(lltok::comma, "expected ',' after store operand") ||
3836      ParseTypeAndValue(Ptr, PtrLoc, PFS) ||
3837      ParseScopeAndOrdering(isAtomic, Scope, Ordering) ||
3838      ParseOptionalCommaAlign(Alignment, AteExtraComma))
3839    return true;
3840
3841  if (!Ptr->getType()->isPointerTy())
3842    return Error(PtrLoc, "store operand must be a pointer");
3843  if (!Val->getType()->isFirstClassType())
3844    return Error(Loc, "store operand must be a first class value");
3845  if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType())
3846    return Error(Loc, "stored value and pointer type do not match");
3847  if (isAtomic && !Alignment)
3848    return Error(Loc, "atomic store must have explicit non-zero alignment");
3849  if (Ordering == Acquire || Ordering == AcquireRelease)
3850    return Error(Loc, "atomic store cannot use Acquire ordering");
3851
3852  Inst = new StoreInst(Val, Ptr, isVolatile, Alignment, Ordering, Scope);
3853  return AteExtraComma ? InstExtraComma : InstNormal;
3854}
3855
3856/// ParseCmpXchg
3857///   ::= 'cmpxchg' 'volatile'? TypeAndValue ',' TypeAndValue ',' TypeAndValue
3858///       'singlethread'? AtomicOrdering
3859int LLParser::ParseCmpXchg(Instruction *&Inst, PerFunctionState &PFS) {
3860  Value *Ptr, *Cmp, *New; LocTy PtrLoc, CmpLoc, NewLoc;
3861  bool AteExtraComma = false;
3862  AtomicOrdering Ordering = NotAtomic;
3863  SynchronizationScope Scope = CrossThread;
3864  bool isVolatile = false;
3865
3866  if (EatIfPresent(lltok::kw_volatile))
3867    isVolatile = true;
3868
3869  if (ParseTypeAndValue(Ptr, PtrLoc, PFS) ||
3870      ParseToken(lltok::comma, "expected ',' after cmpxchg address") ||
3871      ParseTypeAndValue(Cmp, CmpLoc, PFS) ||
3872      ParseToken(lltok::comma, "expected ',' after cmpxchg cmp operand") ||
3873      ParseTypeAndValue(New, NewLoc, PFS) ||
3874      ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering))
3875    return true;
3876
3877  if (Ordering == Unordered)
3878    return TokError("cmpxchg cannot be unordered");
3879  if (!Ptr->getType()->isPointerTy())
3880    return Error(PtrLoc, "cmpxchg operand must be a pointer");
3881  if (cast<PointerType>(Ptr->getType())->getElementType() != Cmp->getType())
3882    return Error(CmpLoc, "compare value and pointer type do not match");
3883  if (cast<PointerType>(Ptr->getType())->getElementType() != New->getType())
3884    return Error(NewLoc, "new value and pointer type do not match");
3885  if (!New->getType()->isIntegerTy())
3886    return Error(NewLoc, "cmpxchg operand must be an integer");
3887  unsigned Size = New->getType()->getPrimitiveSizeInBits();
3888  if (Size < 8 || (Size & (Size - 1)))
3889    return Error(NewLoc, "cmpxchg operand must be power-of-two byte-sized"
3890                         " integer");
3891
3892  AtomicCmpXchgInst *CXI =
3893    new AtomicCmpXchgInst(Ptr, Cmp, New, Ordering, Scope);
3894  CXI->setVolatile(isVolatile);
3895  Inst = CXI;
3896  return AteExtraComma ? InstExtraComma : InstNormal;
3897}
3898
3899/// ParseAtomicRMW
3900///   ::= 'atomicrmw' 'volatile'? BinOp TypeAndValue ',' TypeAndValue
3901///       'singlethread'? AtomicOrdering
3902int LLParser::ParseAtomicRMW(Instruction *&Inst, PerFunctionState &PFS) {
3903  Value *Ptr, *Val; LocTy PtrLoc, ValLoc;
3904  bool AteExtraComma = false;
3905  AtomicOrdering Ordering = NotAtomic;
3906  SynchronizationScope Scope = CrossThread;
3907  bool isVolatile = false;
3908  AtomicRMWInst::BinOp Operation;
3909
3910  if (EatIfPresent(lltok::kw_volatile))
3911    isVolatile = true;
3912
3913  switch (Lex.getKind()) {
3914  default: return TokError("expected binary operation in atomicrmw");
3915  case lltok::kw_xchg: Operation = AtomicRMWInst::Xchg; break;
3916  case lltok::kw_add: Operation = AtomicRMWInst::Add; break;
3917  case lltok::kw_sub: Operation = AtomicRMWInst::Sub; break;
3918  case lltok::kw_and: Operation = AtomicRMWInst::And; break;
3919  case lltok::kw_nand: Operation = AtomicRMWInst::Nand; break;
3920  case lltok::kw_or: Operation = AtomicRMWInst::Or; break;
3921  case lltok::kw_xor: Operation = AtomicRMWInst::Xor; break;
3922  case lltok::kw_max: Operation = AtomicRMWInst::Max; break;
3923  case lltok::kw_min: Operation = AtomicRMWInst::Min; break;
3924  case lltok::kw_umax: Operation = AtomicRMWInst::UMax; break;
3925  case lltok::kw_umin: Operation = AtomicRMWInst::UMin; break;
3926  }
3927  Lex.Lex();  // Eat the operation.
3928
3929  if (ParseTypeAndValue(Ptr, PtrLoc, PFS) ||
3930      ParseToken(lltok::comma, "expected ',' after atomicrmw address") ||
3931      ParseTypeAndValue(Val, ValLoc, PFS) ||
3932      ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering))
3933    return true;
3934
3935  if (Ordering == Unordered)
3936    return TokError("atomicrmw cannot be unordered");
3937  if (!Ptr->getType()->isPointerTy())
3938    return Error(PtrLoc, "atomicrmw operand must be a pointer");
3939  if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType())
3940    return Error(ValLoc, "atomicrmw value and pointer type do not match");
3941  if (!Val->getType()->isIntegerTy())
3942    return Error(ValLoc, "atomicrmw operand must be an integer");
3943  unsigned Size = Val->getType()->getPrimitiveSizeInBits();
3944  if (Size < 8 || (Size & (Size - 1)))
3945    return Error(ValLoc, "atomicrmw operand must be power-of-two byte-sized"
3946                         " integer");
3947
3948  AtomicRMWInst *RMWI =
3949    new AtomicRMWInst(Operation, Ptr, Val, Ordering, Scope);
3950  RMWI->setVolatile(isVolatile);
3951  Inst = RMWI;
3952  return AteExtraComma ? InstExtraComma : InstNormal;
3953}
3954
3955/// ParseFence
3956///   ::= 'fence' 'singlethread'? AtomicOrdering
3957int LLParser::ParseFence(Instruction *&Inst, PerFunctionState &PFS) {
3958  AtomicOrdering Ordering = NotAtomic;
3959  SynchronizationScope Scope = CrossThread;
3960  if (ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering))
3961    return true;
3962
3963  if (Ordering == Unordered)
3964    return TokError("fence cannot be unordered");
3965  if (Ordering == Monotonic)
3966    return TokError("fence cannot be monotonic");
3967
3968  Inst = new FenceInst(Context, Ordering, Scope);
3969  return InstNormal;
3970}
3971
3972/// ParseGetElementPtr
3973///   ::= 'getelementptr' 'inbounds'? TypeAndValue (',' TypeAndValue)*
3974int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
3975  Value *Ptr = 0;
3976  Value *Val = 0;
3977  LocTy Loc, EltLoc;
3978
3979  bool InBounds = EatIfPresent(lltok::kw_inbounds);
3980
3981  if (ParseTypeAndValue(Ptr, Loc, PFS)) return true;
3982
3983  if (!Ptr->getType()->getScalarType()->isPointerTy())
3984    return Error(Loc, "base of getelementptr must be a pointer");
3985
3986  SmallVector<Value*, 16> Indices;
3987  bool AteExtraComma = false;
3988  while (EatIfPresent(lltok::comma)) {
3989    if (Lex.getKind() == lltok::MetadataVar) {
3990      AteExtraComma = true;
3991      break;
3992    }
3993    if (ParseTypeAndValue(Val, EltLoc, PFS)) return true;
3994    if (!Val->getType()->getScalarType()->isIntegerTy())
3995      return Error(EltLoc, "getelementptr index must be an integer");
3996    if (Val->getType()->isVectorTy() != Ptr->getType()->isVectorTy())
3997      return Error(EltLoc, "getelementptr index type missmatch");
3998    if (Val->getType()->isVectorTy()) {
3999      unsigned ValNumEl = cast<VectorType>(Val->getType())->getNumElements();
4000      unsigned PtrNumEl = cast<VectorType>(Ptr->getType())->getNumElements();
4001      if (ValNumEl != PtrNumEl)
4002        return Error(EltLoc,
4003          "getelementptr vector index has a wrong number of elements");
4004    }
4005    Indices.push_back(Val);
4006  }
4007
4008  if (Val && Val->getType()->isVectorTy() && Indices.size() != 1)
4009    return Error(EltLoc, "vector getelementptrs must have a single index");
4010
4011  if (!GetElementPtrInst::getIndexedType(Ptr->getType(), Indices))
4012    return Error(Loc, "invalid getelementptr indices");
4013  Inst = GetElementPtrInst::Create(Ptr, Indices);
4014  if (InBounds)
4015    cast<GetElementPtrInst>(Inst)->setIsInBounds(true);
4016  return AteExtraComma ? InstExtraComma : InstNormal;
4017}
4018
4019/// ParseExtractValue
4020///   ::= 'extractvalue' TypeAndValue (',' uint32)+
4021int LLParser::ParseExtractValue(Instruction *&Inst, PerFunctionState &PFS) {
4022  Value *Val; LocTy Loc;
4023  SmallVector<unsigned, 4> Indices;
4024  bool AteExtraComma;
4025  if (ParseTypeAndValue(Val, Loc, PFS) ||
4026      ParseIndexList(Indices, AteExtraComma))
4027    return true;
4028
4029  if (!Val->getType()->isAggregateType())
4030    return Error(Loc, "extractvalue operand must be aggregate type");
4031
4032  if (!ExtractValueInst::getIndexedType(Val->getType(), Indices))
4033    return Error(Loc, "invalid indices for extractvalue");
4034  Inst = ExtractValueInst::Create(Val, Indices);
4035  return AteExtraComma ? InstExtraComma : InstNormal;
4036}
4037
4038/// ParseInsertValue
4039///   ::= 'insertvalue' TypeAndValue ',' TypeAndValue (',' uint32)+
4040int LLParser::ParseInsertValue(Instruction *&Inst, PerFunctionState &PFS) {
4041  Value *Val0, *Val1; LocTy Loc0, Loc1;
4042  SmallVector<unsigned, 4> Indices;
4043  bool AteExtraComma;
4044  if (ParseTypeAndValue(Val0, Loc0, PFS) ||
4045      ParseToken(lltok::comma, "expected comma after insertvalue operand") ||
4046      ParseTypeAndValue(Val1, Loc1, PFS) ||
4047      ParseIndexList(Indices, AteExtraComma))
4048    return true;
4049
4050  if (!Val0->getType()->isAggregateType())
4051    return Error(Loc0, "insertvalue operand must be aggregate type");
4052
4053  if (!ExtractValueInst::getIndexedType(Val0->getType(), Indices))
4054    return Error(Loc0, "invalid indices for insertvalue");
4055  Inst = InsertValueInst::Create(Val0, Val1, Indices);
4056  return AteExtraComma ? InstExtraComma : InstNormal;
4057}
4058
4059//===----------------------------------------------------------------------===//
4060// Embedded metadata.
4061//===----------------------------------------------------------------------===//
4062
4063/// ParseMDNodeVector
4064///   ::= Element (',' Element)*
4065/// Element
4066///   ::= 'null' | TypeAndValue
4067bool LLParser::ParseMDNodeVector(SmallVectorImpl<Value*> &Elts,
4068                                 PerFunctionState *PFS) {
4069  // Check for an empty list.
4070  if (Lex.getKind() == lltok::rbrace)
4071    return false;
4072
4073  do {
4074    // Null is a special case since it is typeless.
4075    if (EatIfPresent(lltok::kw_null)) {
4076      Elts.push_back(0);
4077      continue;
4078    }
4079
4080    Value *V = 0;
4081    if (ParseTypeAndValue(V, PFS)) return true;
4082    Elts.push_back(V);
4083  } while (EatIfPresent(lltok::comma));
4084
4085  return false;
4086}
4087