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