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