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