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/ADT/STLExtras.h" 17 #include "llvm/AsmParser/SlotMapping.h" 18 #include "llvm/IR/AutoUpgrade.h" 19 #include "llvm/IR/CallingConv.h" 20 #include "llvm/IR/Constants.h" 21 #include "llvm/IR/DebugInfo.h" 22 #include "llvm/IR/DebugInfoMetadata.h" 23 #include "llvm/IR/DerivedTypes.h" 24 #include "llvm/IR/InlineAsm.h" 25 #include "llvm/IR/Instructions.h" 26 #include "llvm/IR/LLVMContext.h" 27 #include "llvm/IR/Module.h" 28 #include "llvm/IR/Operator.h" 29 #include "llvm/IR/ValueSymbolTable.h" 30 #include "llvm/Support/Dwarf.h" 31 #include "llvm/Support/ErrorHandling.h" 32 #include "llvm/Support/SaveAndRestore.h" 33 #include "llvm/Support/raw_ostream.h" 34 using namespace llvm; 35 36 static std::string getTypeString(Type *T) { 37 std::string Result; 38 raw_string_ostream Tmp(Result); 39 Tmp << *T; 40 return Tmp.str(); 41 } 42 43 /// Run: module ::= toplevelentity* 44 bool LLParser::Run() { 45 // Prime the lexer. 46 Lex.Lex(); 47 48 return ParseTopLevelEntities() || 49 ValidateEndOfModule(); 50 } 51 52 bool LLParser::parseStandaloneConstantValue(Constant *&C) { 53 Lex.Lex(); 54 55 Type *Ty = nullptr; 56 if (ParseType(Ty) || parseConstantValue(Ty, C)) 57 return true; 58 if (Lex.getKind() != lltok::Eof) 59 return Error(Lex.getLoc(), "expected end of string"); 60 return false; 61 } 62 63 /// ValidateEndOfModule - Do final validity and sanity checks at the end of the 64 /// module. 65 bool LLParser::ValidateEndOfModule() { 66 for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++) 67 UpgradeInstWithTBAATag(InstsWithTBAATag[I]); 68 69 // Handle any function attribute group forward references. 70 for (std::map<Value*, std::vector<unsigned> >::iterator 71 I = ForwardRefAttrGroups.begin(), E = ForwardRefAttrGroups.end(); 72 I != E; ++I) { 73 Value *V = I->first; 74 std::vector<unsigned> &Vec = I->second; 75 AttrBuilder B; 76 77 for (std::vector<unsigned>::iterator VI = Vec.begin(), VE = Vec.end(); 78 VI != VE; ++VI) 79 B.merge(NumberedAttrBuilders[*VI]); 80 81 if (Function *Fn = dyn_cast<Function>(V)) { 82 AttributeSet AS = Fn->getAttributes(); 83 AttrBuilder FnAttrs(AS.getFnAttributes(), AttributeSet::FunctionIndex); 84 AS = AS.removeAttributes(Context, AttributeSet::FunctionIndex, 85 AS.getFnAttributes()); 86 87 FnAttrs.merge(B); 88 89 // If the alignment was parsed as an attribute, move to the alignment 90 // field. 91 if (FnAttrs.hasAlignmentAttr()) { 92 Fn->setAlignment(FnAttrs.getAlignment()); 93 FnAttrs.removeAttribute(Attribute::Alignment); 94 } 95 96 AS = AS.addAttributes(Context, AttributeSet::FunctionIndex, 97 AttributeSet::get(Context, 98 AttributeSet::FunctionIndex, 99 FnAttrs)); 100 Fn->setAttributes(AS); 101 } else if (CallInst *CI = dyn_cast<CallInst>(V)) { 102 AttributeSet AS = CI->getAttributes(); 103 AttrBuilder FnAttrs(AS.getFnAttributes(), AttributeSet::FunctionIndex); 104 AS = AS.removeAttributes(Context, AttributeSet::FunctionIndex, 105 AS.getFnAttributes()); 106 FnAttrs.merge(B); 107 AS = AS.addAttributes(Context, AttributeSet::FunctionIndex, 108 AttributeSet::get(Context, 109 AttributeSet::FunctionIndex, 110 FnAttrs)); 111 CI->setAttributes(AS); 112 } else if (InvokeInst *II = dyn_cast<InvokeInst>(V)) { 113 AttributeSet AS = II->getAttributes(); 114 AttrBuilder FnAttrs(AS.getFnAttributes(), AttributeSet::FunctionIndex); 115 AS = AS.removeAttributes(Context, AttributeSet::FunctionIndex, 116 AS.getFnAttributes()); 117 FnAttrs.merge(B); 118 AS = AS.addAttributes(Context, AttributeSet::FunctionIndex, 119 AttributeSet::get(Context, 120 AttributeSet::FunctionIndex, 121 FnAttrs)); 122 II->setAttributes(AS); 123 } else { 124 llvm_unreachable("invalid object with forward attribute group reference"); 125 } 126 } 127 128 // If there are entries in ForwardRefBlockAddresses at this point, the 129 // function was never defined. 130 if (!ForwardRefBlockAddresses.empty()) 131 return Error(ForwardRefBlockAddresses.begin()->first.Loc, 132 "expected function name in blockaddress"); 133 134 for (const auto &NT : NumberedTypes) 135 if (NT.second.second.isValid()) 136 return Error(NT.second.second, 137 "use of undefined type '%" + Twine(NT.first) + "'"); 138 139 for (StringMap<std::pair<Type*, LocTy> >::iterator I = 140 NamedTypes.begin(), E = NamedTypes.end(); I != E; ++I) 141 if (I->second.second.isValid()) 142 return Error(I->second.second, 143 "use of undefined type named '" + I->getKey() + "'"); 144 145 if (!ForwardRefComdats.empty()) 146 return Error(ForwardRefComdats.begin()->second, 147 "use of undefined comdat '$" + 148 ForwardRefComdats.begin()->first + "'"); 149 150 if (!ForwardRefVals.empty()) 151 return Error(ForwardRefVals.begin()->second.second, 152 "use of undefined value '@" + ForwardRefVals.begin()->first + 153 "'"); 154 155 if (!ForwardRefValIDs.empty()) 156 return Error(ForwardRefValIDs.begin()->second.second, 157 "use of undefined value '@" + 158 Twine(ForwardRefValIDs.begin()->first) + "'"); 159 160 if (!ForwardRefMDNodes.empty()) 161 return Error(ForwardRefMDNodes.begin()->second.second, 162 "use of undefined metadata '!" + 163 Twine(ForwardRefMDNodes.begin()->first) + "'"); 164 165 // Resolve metadata cycles. 166 for (auto &N : NumberedMetadata) { 167 if (N.second && !N.second->isResolved()) 168 N.second->resolveCycles(); 169 } 170 171 // Look for intrinsic functions and CallInst that need to be upgraded 172 for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; ) 173 UpgradeCallsToIntrinsic(FI++); // must be post-increment, as we remove 174 175 UpgradeDebugInfo(*M); 176 177 if (!Slots) 178 return false; 179 // Initialize the slot mapping. 180 // Because by this point we've parsed and validated everything, we can "steal" 181 // the mapping from LLParser as it doesn't need it anymore. 182 Slots->GlobalValues = std::move(NumberedVals); 183 Slots->MetadataNodes = std::move(NumberedMetadata); 184 185 return false; 186 } 187 188 //===----------------------------------------------------------------------===// 189 // Top-Level Entities 190 //===----------------------------------------------------------------------===// 191 192 bool LLParser::ParseTopLevelEntities() { 193 while (1) { 194 switch (Lex.getKind()) { 195 default: return TokError("expected top-level entity"); 196 case lltok::Eof: return false; 197 case lltok::kw_declare: if (ParseDeclare()) return true; break; 198 case lltok::kw_define: if (ParseDefine()) return true; break; 199 case lltok::kw_module: if (ParseModuleAsm()) return true; break; 200 case lltok::kw_target: if (ParseTargetDefinition()) return true; break; 201 case lltok::kw_deplibs: if (ParseDepLibs()) return true; break; 202 case lltok::LocalVarID: if (ParseUnnamedType()) return true; break; 203 case lltok::LocalVar: if (ParseNamedType()) return true; break; 204 case lltok::GlobalID: if (ParseUnnamedGlobal()) return true; break; 205 case lltok::GlobalVar: if (ParseNamedGlobal()) return true; break; 206 case lltok::ComdatVar: if (parseComdat()) return true; break; 207 case lltok::exclaim: if (ParseStandaloneMetadata()) return true; break; 208 case lltok::MetadataVar:if (ParseNamedMetadata()) return true; break; 209 210 // The Global variable production with no name can have many different 211 // optional leading prefixes, the production is: 212 // GlobalVar ::= OptionalLinkage OptionalVisibility OptionalDLLStorageClass 213 // OptionalThreadLocal OptionalAddrSpace OptionalUnnamedAddr 214 // ('constant'|'global') ... 215 case lltok::kw_private: // OptionalLinkage 216 case lltok::kw_internal: // OptionalLinkage 217 case lltok::kw_weak: // OptionalLinkage 218 case lltok::kw_weak_odr: // OptionalLinkage 219 case lltok::kw_linkonce: // OptionalLinkage 220 case lltok::kw_linkonce_odr: // OptionalLinkage 221 case lltok::kw_appending: // OptionalLinkage 222 case lltok::kw_common: // OptionalLinkage 223 case lltok::kw_extern_weak: // OptionalLinkage 224 case lltok::kw_external: // OptionalLinkage 225 case lltok::kw_default: // OptionalVisibility 226 case lltok::kw_hidden: // OptionalVisibility 227 case lltok::kw_protected: // OptionalVisibility 228 case lltok::kw_dllimport: // OptionalDLLStorageClass 229 case lltok::kw_dllexport: // OptionalDLLStorageClass 230 case lltok::kw_thread_local: // OptionalThreadLocal 231 case lltok::kw_addrspace: // OptionalAddrSpace 232 case lltok::kw_constant: // GlobalType 233 case lltok::kw_global: { // GlobalType 234 unsigned Linkage, Visibility, DLLStorageClass; 235 bool UnnamedAddr; 236 GlobalVariable::ThreadLocalMode TLM; 237 bool HasLinkage; 238 if (ParseOptionalLinkage(Linkage, HasLinkage) || 239 ParseOptionalVisibility(Visibility) || 240 ParseOptionalDLLStorageClass(DLLStorageClass) || 241 ParseOptionalThreadLocal(TLM) || 242 parseOptionalUnnamedAddr(UnnamedAddr) || 243 ParseGlobal("", SMLoc(), Linkage, HasLinkage, Visibility, 244 DLLStorageClass, TLM, UnnamedAddr)) 245 return true; 246 break; 247 } 248 249 case lltok::kw_attributes: if (ParseUnnamedAttrGrp()) return true; break; 250 case lltok::kw_uselistorder: if (ParseUseListOrder()) return true; break; 251 case lltok::kw_uselistorder_bb: 252 if (ParseUseListOrderBB()) return true; break; 253 } 254 } 255 } 256 257 258 /// toplevelentity 259 /// ::= 'module' 'asm' STRINGCONSTANT 260 bool LLParser::ParseModuleAsm() { 261 assert(Lex.getKind() == lltok::kw_module); 262 Lex.Lex(); 263 264 std::string AsmStr; 265 if (ParseToken(lltok::kw_asm, "expected 'module asm'") || 266 ParseStringConstant(AsmStr)) return true; 267 268 M->appendModuleInlineAsm(AsmStr); 269 return false; 270 } 271 272 /// toplevelentity 273 /// ::= 'target' 'triple' '=' STRINGCONSTANT 274 /// ::= 'target' 'datalayout' '=' STRINGCONSTANT 275 bool LLParser::ParseTargetDefinition() { 276 assert(Lex.getKind() == lltok::kw_target); 277 std::string Str; 278 switch (Lex.Lex()) { 279 default: return TokError("unknown target property"); 280 case lltok::kw_triple: 281 Lex.Lex(); 282 if (ParseToken(lltok::equal, "expected '=' after target triple") || 283 ParseStringConstant(Str)) 284 return true; 285 M->setTargetTriple(Str); 286 return false; 287 case lltok::kw_datalayout: 288 Lex.Lex(); 289 if (ParseToken(lltok::equal, "expected '=' after target datalayout") || 290 ParseStringConstant(Str)) 291 return true; 292 M->setDataLayout(Str); 293 return false; 294 } 295 } 296 297 /// toplevelentity 298 /// ::= 'deplibs' '=' '[' ']' 299 /// ::= 'deplibs' '=' '[' STRINGCONSTANT (',' STRINGCONSTANT)* ']' 300 /// FIXME: Remove in 4.0. Currently parse, but ignore. 301 bool LLParser::ParseDepLibs() { 302 assert(Lex.getKind() == lltok::kw_deplibs); 303 Lex.Lex(); 304 if (ParseToken(lltok::equal, "expected '=' after deplibs") || 305 ParseToken(lltok::lsquare, "expected '=' after deplibs")) 306 return true; 307 308 if (EatIfPresent(lltok::rsquare)) 309 return false; 310 311 do { 312 std::string Str; 313 if (ParseStringConstant(Str)) return true; 314 } while (EatIfPresent(lltok::comma)); 315 316 return ParseToken(lltok::rsquare, "expected ']' at end of list"); 317 } 318 319 /// ParseUnnamedType: 320 /// ::= LocalVarID '=' 'type' type 321 bool LLParser::ParseUnnamedType() { 322 LocTy TypeLoc = Lex.getLoc(); 323 unsigned TypeID = Lex.getUIntVal(); 324 Lex.Lex(); // eat LocalVarID; 325 326 if (ParseToken(lltok::equal, "expected '=' after name") || 327 ParseToken(lltok::kw_type, "expected 'type' after '='")) 328 return true; 329 330 Type *Result = nullptr; 331 if (ParseStructDefinition(TypeLoc, "", 332 NumberedTypes[TypeID], Result)) return true; 333 334 if (!isa<StructType>(Result)) { 335 std::pair<Type*, LocTy> &Entry = NumberedTypes[TypeID]; 336 if (Entry.first) 337 return Error(TypeLoc, "non-struct types may not be recursive"); 338 Entry.first = Result; 339 Entry.second = SMLoc(); 340 } 341 342 return false; 343 } 344 345 346 /// toplevelentity 347 /// ::= LocalVar '=' 'type' type 348 bool LLParser::ParseNamedType() { 349 std::string Name = Lex.getStrVal(); 350 LocTy NameLoc = Lex.getLoc(); 351 Lex.Lex(); // eat LocalVar. 352 353 if (ParseToken(lltok::equal, "expected '=' after name") || 354 ParseToken(lltok::kw_type, "expected 'type' after name")) 355 return true; 356 357 Type *Result = nullptr; 358 if (ParseStructDefinition(NameLoc, Name, 359 NamedTypes[Name], Result)) return true; 360 361 if (!isa<StructType>(Result)) { 362 std::pair<Type*, LocTy> &Entry = NamedTypes[Name]; 363 if (Entry.first) 364 return Error(NameLoc, "non-struct types may not be recursive"); 365 Entry.first = Result; 366 Entry.second = SMLoc(); 367 } 368 369 return false; 370 } 371 372 373 /// toplevelentity 374 /// ::= 'declare' FunctionHeader 375 bool LLParser::ParseDeclare() { 376 assert(Lex.getKind() == lltok::kw_declare); 377 Lex.Lex(); 378 379 Function *F; 380 return ParseFunctionHeader(F, false); 381 } 382 383 /// toplevelentity 384 /// ::= 'define' FunctionHeader (!dbg !56)* '{' ... 385 bool LLParser::ParseDefine() { 386 assert(Lex.getKind() == lltok::kw_define); 387 Lex.Lex(); 388 389 Function *F; 390 return ParseFunctionHeader(F, true) || 391 ParseOptionalFunctionMetadata(*F) || 392 ParseFunctionBody(*F); 393 } 394 395 /// ParseGlobalType 396 /// ::= 'constant' 397 /// ::= 'global' 398 bool LLParser::ParseGlobalType(bool &IsConstant) { 399 if (Lex.getKind() == lltok::kw_constant) 400 IsConstant = true; 401 else if (Lex.getKind() == lltok::kw_global) 402 IsConstant = false; 403 else { 404 IsConstant = false; 405 return TokError("expected 'global' or 'constant'"); 406 } 407 Lex.Lex(); 408 return false; 409 } 410 411 /// ParseUnnamedGlobal: 412 /// OptionalVisibility ALIAS ... 413 /// OptionalLinkage OptionalVisibility OptionalDLLStorageClass 414 /// ... -> global variable 415 /// GlobalID '=' OptionalVisibility ALIAS ... 416 /// GlobalID '=' OptionalLinkage OptionalVisibility OptionalDLLStorageClass 417 /// ... -> global variable 418 bool LLParser::ParseUnnamedGlobal() { 419 unsigned VarID = NumberedVals.size(); 420 std::string Name; 421 LocTy NameLoc = Lex.getLoc(); 422 423 // Handle the GlobalID form. 424 if (Lex.getKind() == lltok::GlobalID) { 425 if (Lex.getUIntVal() != VarID) 426 return Error(Lex.getLoc(), "variable expected to be numbered '%" + 427 Twine(VarID) + "'"); 428 Lex.Lex(); // eat GlobalID; 429 430 if (ParseToken(lltok::equal, "expected '=' after name")) 431 return true; 432 } 433 434 bool HasLinkage; 435 unsigned Linkage, Visibility, DLLStorageClass; 436 GlobalVariable::ThreadLocalMode TLM; 437 bool UnnamedAddr; 438 if (ParseOptionalLinkage(Linkage, HasLinkage) || 439 ParseOptionalVisibility(Visibility) || 440 ParseOptionalDLLStorageClass(DLLStorageClass) || 441 ParseOptionalThreadLocal(TLM) || 442 parseOptionalUnnamedAddr(UnnamedAddr)) 443 return true; 444 445 if (Lex.getKind() != lltok::kw_alias) 446 return ParseGlobal(Name, NameLoc, Linkage, HasLinkage, Visibility, 447 DLLStorageClass, TLM, UnnamedAddr); 448 return ParseAlias(Name, NameLoc, Linkage, Visibility, DLLStorageClass, TLM, 449 UnnamedAddr); 450 } 451 452 /// ParseNamedGlobal: 453 /// GlobalVar '=' OptionalVisibility ALIAS ... 454 /// GlobalVar '=' OptionalLinkage OptionalVisibility OptionalDLLStorageClass 455 /// ... -> global variable 456 bool LLParser::ParseNamedGlobal() { 457 assert(Lex.getKind() == lltok::GlobalVar); 458 LocTy NameLoc = Lex.getLoc(); 459 std::string Name = Lex.getStrVal(); 460 Lex.Lex(); 461 462 bool HasLinkage; 463 unsigned Linkage, Visibility, DLLStorageClass; 464 GlobalVariable::ThreadLocalMode TLM; 465 bool UnnamedAddr; 466 if (ParseToken(lltok::equal, "expected '=' in global variable") || 467 ParseOptionalLinkage(Linkage, HasLinkage) || 468 ParseOptionalVisibility(Visibility) || 469 ParseOptionalDLLStorageClass(DLLStorageClass) || 470 ParseOptionalThreadLocal(TLM) || 471 parseOptionalUnnamedAddr(UnnamedAddr)) 472 return true; 473 474 if (Lex.getKind() != lltok::kw_alias) 475 return ParseGlobal(Name, NameLoc, Linkage, HasLinkage, Visibility, 476 DLLStorageClass, TLM, UnnamedAddr); 477 478 return ParseAlias(Name, NameLoc, Linkage, Visibility, DLLStorageClass, TLM, 479 UnnamedAddr); 480 } 481 482 bool LLParser::parseComdat() { 483 assert(Lex.getKind() == lltok::ComdatVar); 484 std::string Name = Lex.getStrVal(); 485 LocTy NameLoc = Lex.getLoc(); 486 Lex.Lex(); 487 488 if (ParseToken(lltok::equal, "expected '=' here")) 489 return true; 490 491 if (ParseToken(lltok::kw_comdat, "expected comdat keyword")) 492 return TokError("expected comdat type"); 493 494 Comdat::SelectionKind SK; 495 switch (Lex.getKind()) { 496 default: 497 return TokError("unknown selection kind"); 498 case lltok::kw_any: 499 SK = Comdat::Any; 500 break; 501 case lltok::kw_exactmatch: 502 SK = Comdat::ExactMatch; 503 break; 504 case lltok::kw_largest: 505 SK = Comdat::Largest; 506 break; 507 case lltok::kw_noduplicates: 508 SK = Comdat::NoDuplicates; 509 break; 510 case lltok::kw_samesize: 511 SK = Comdat::SameSize; 512 break; 513 } 514 Lex.Lex(); 515 516 // See if the comdat was forward referenced, if so, use the comdat. 517 Module::ComdatSymTabType &ComdatSymTab = M->getComdatSymbolTable(); 518 Module::ComdatSymTabType::iterator I = ComdatSymTab.find(Name); 519 if (I != ComdatSymTab.end() && !ForwardRefComdats.erase(Name)) 520 return Error(NameLoc, "redefinition of comdat '$" + Name + "'"); 521 522 Comdat *C; 523 if (I != ComdatSymTab.end()) 524 C = &I->second; 525 else 526 C = M->getOrInsertComdat(Name); 527 C->setSelectionKind(SK); 528 529 return false; 530 } 531 532 // MDString: 533 // ::= '!' STRINGCONSTANT 534 bool LLParser::ParseMDString(MDString *&Result) { 535 std::string Str; 536 if (ParseStringConstant(Str)) return true; 537 llvm::UpgradeMDStringConstant(Str); 538 Result = MDString::get(Context, Str); 539 return false; 540 } 541 542 // MDNode: 543 // ::= '!' MDNodeNumber 544 bool LLParser::ParseMDNodeID(MDNode *&Result) { 545 // !{ ..., !42, ... } 546 unsigned MID = 0; 547 if (ParseUInt32(MID)) 548 return true; 549 550 // If not a forward reference, just return it now. 551 if (NumberedMetadata.count(MID)) { 552 Result = NumberedMetadata[MID]; 553 return false; 554 } 555 556 // Otherwise, create MDNode forward reference. 557 auto &FwdRef = ForwardRefMDNodes[MID]; 558 FwdRef = std::make_pair(MDTuple::getTemporary(Context, None), Lex.getLoc()); 559 560 Result = FwdRef.first.get(); 561 NumberedMetadata[MID].reset(Result); 562 return false; 563 } 564 565 /// ParseNamedMetadata: 566 /// !foo = !{ !1, !2 } 567 bool LLParser::ParseNamedMetadata() { 568 assert(Lex.getKind() == lltok::MetadataVar); 569 std::string Name = Lex.getStrVal(); 570 Lex.Lex(); 571 572 if (ParseToken(lltok::equal, "expected '=' here") || 573 ParseToken(lltok::exclaim, "Expected '!' here") || 574 ParseToken(lltok::lbrace, "Expected '{' here")) 575 return true; 576 577 NamedMDNode *NMD = M->getOrInsertNamedMetadata(Name); 578 if (Lex.getKind() != lltok::rbrace) 579 do { 580 if (ParseToken(lltok::exclaim, "Expected '!' here")) 581 return true; 582 583 MDNode *N = nullptr; 584 if (ParseMDNodeID(N)) return true; 585 NMD->addOperand(N); 586 } while (EatIfPresent(lltok::comma)); 587 588 return ParseToken(lltok::rbrace, "expected end of metadata node"); 589 } 590 591 /// ParseStandaloneMetadata: 592 /// !42 = !{...} 593 bool LLParser::ParseStandaloneMetadata() { 594 assert(Lex.getKind() == lltok::exclaim); 595 Lex.Lex(); 596 unsigned MetadataID = 0; 597 598 MDNode *Init; 599 if (ParseUInt32(MetadataID) || 600 ParseToken(lltok::equal, "expected '=' here")) 601 return true; 602 603 // Detect common error, from old metadata syntax. 604 if (Lex.getKind() == lltok::Type) 605 return TokError("unexpected type in metadata definition"); 606 607 bool IsDistinct = EatIfPresent(lltok::kw_distinct); 608 if (Lex.getKind() == lltok::MetadataVar) { 609 if (ParseSpecializedMDNode(Init, IsDistinct)) 610 return true; 611 } else if (ParseToken(lltok::exclaim, "Expected '!' here") || 612 ParseMDTuple(Init, IsDistinct)) 613 return true; 614 615 // See if this was forward referenced, if so, handle it. 616 auto FI = ForwardRefMDNodes.find(MetadataID); 617 if (FI != ForwardRefMDNodes.end()) { 618 FI->second.first->replaceAllUsesWith(Init); 619 ForwardRefMDNodes.erase(FI); 620 621 assert(NumberedMetadata[MetadataID] == Init && "Tracking VH didn't work"); 622 } else { 623 if (NumberedMetadata.count(MetadataID)) 624 return TokError("Metadata id is already used"); 625 NumberedMetadata[MetadataID].reset(Init); 626 } 627 628 return false; 629 } 630 631 static bool isValidVisibilityForLinkage(unsigned V, unsigned L) { 632 return !GlobalValue::isLocalLinkage((GlobalValue::LinkageTypes)L) || 633 (GlobalValue::VisibilityTypes)V == GlobalValue::DefaultVisibility; 634 } 635 636 /// ParseAlias: 637 /// ::= GlobalVar '=' OptionalLinkage OptionalVisibility 638 /// OptionalDLLStorageClass OptionalThreadLocal 639 /// OptionalUnnamedAddr 'alias' Aliasee 640 /// 641 /// Aliasee 642 /// ::= TypeAndValue 643 /// 644 /// Everything through OptionalUnnamedAddr has already been parsed. 645 /// 646 bool LLParser::ParseAlias(const std::string &Name, LocTy NameLoc, unsigned L, 647 unsigned Visibility, unsigned DLLStorageClass, 648 GlobalVariable::ThreadLocalMode TLM, 649 bool UnnamedAddr) { 650 assert(Lex.getKind() == lltok::kw_alias); 651 Lex.Lex(); 652 653 GlobalValue::LinkageTypes Linkage = (GlobalValue::LinkageTypes) L; 654 655 if(!GlobalAlias::isValidLinkage(Linkage)) 656 return Error(NameLoc, "invalid linkage type for alias"); 657 658 if (!isValidVisibilityForLinkage(Visibility, L)) 659 return Error(NameLoc, 660 "symbol with local linkage must have default visibility"); 661 662 Constant *Aliasee; 663 LocTy AliaseeLoc = Lex.getLoc(); 664 if (Lex.getKind() != lltok::kw_bitcast && 665 Lex.getKind() != lltok::kw_getelementptr && 666 Lex.getKind() != lltok::kw_addrspacecast && 667 Lex.getKind() != lltok::kw_inttoptr) { 668 if (ParseGlobalTypeAndValue(Aliasee)) 669 return true; 670 } else { 671 // The bitcast dest type is not present, it is implied by the dest type. 672 ValID ID; 673 if (ParseValID(ID)) 674 return true; 675 if (ID.Kind != ValID::t_Constant) 676 return Error(AliaseeLoc, "invalid aliasee"); 677 Aliasee = ID.ConstantVal; 678 } 679 680 Type *AliaseeType = Aliasee->getType(); 681 auto *PTy = dyn_cast<PointerType>(AliaseeType); 682 if (!PTy) 683 return Error(AliaseeLoc, "An alias must have pointer type"); 684 685 // Okay, create the alias but do not insert it into the module yet. 686 std::unique_ptr<GlobalAlias> GA( 687 GlobalAlias::create(PTy, (GlobalValue::LinkageTypes)Linkage, Name, 688 Aliasee, /*Parent*/ nullptr)); 689 GA->setThreadLocalMode(TLM); 690 GA->setVisibility((GlobalValue::VisibilityTypes)Visibility); 691 GA->setDLLStorageClass((GlobalValue::DLLStorageClassTypes)DLLStorageClass); 692 GA->setUnnamedAddr(UnnamedAddr); 693 694 if (Name.empty()) 695 NumberedVals.push_back(GA.get()); 696 697 // See if this value already exists in the symbol table. If so, it is either 698 // a redefinition or a definition of a forward reference. 699 if (GlobalValue *Val = M->getNamedValue(Name)) { 700 // See if this was a redefinition. If so, there is no entry in 701 // ForwardRefVals. 702 std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator 703 I = ForwardRefVals.find(Name); 704 if (I == ForwardRefVals.end()) 705 return Error(NameLoc, "redefinition of global named '@" + Name + "'"); 706 707 // Otherwise, this was a definition of forward ref. Verify that types 708 // agree. 709 if (Val->getType() != GA->getType()) 710 return Error(NameLoc, 711 "forward reference and definition of alias have different types"); 712 713 // If they agree, just RAUW the old value with the alias and remove the 714 // forward ref info. 715 Val->replaceAllUsesWith(GA.get()); 716 Val->eraseFromParent(); 717 ForwardRefVals.erase(I); 718 } 719 720 // Insert into the module, we know its name won't collide now. 721 M->getAliasList().push_back(GA.get()); 722 assert(GA->getName() == Name && "Should not be a name conflict!"); 723 724 // The module owns this now 725 GA.release(); 726 727 return false; 728 } 729 730 /// ParseGlobal 731 /// ::= GlobalVar '=' OptionalLinkage OptionalVisibility OptionalDLLStorageClass 732 /// OptionalThreadLocal OptionalUnnamedAddr OptionalAddrSpace 733 /// OptionalExternallyInitialized GlobalType Type Const 734 /// ::= OptionalLinkage OptionalVisibility OptionalDLLStorageClass 735 /// OptionalThreadLocal OptionalUnnamedAddr OptionalAddrSpace 736 /// OptionalExternallyInitialized GlobalType Type Const 737 /// 738 /// Everything up to and including OptionalUnnamedAddr has been parsed 739 /// already. 740 /// 741 bool LLParser::ParseGlobal(const std::string &Name, LocTy NameLoc, 742 unsigned Linkage, bool HasLinkage, 743 unsigned Visibility, unsigned DLLStorageClass, 744 GlobalVariable::ThreadLocalMode TLM, 745 bool UnnamedAddr) { 746 if (!isValidVisibilityForLinkage(Visibility, Linkage)) 747 return Error(NameLoc, 748 "symbol with local linkage must have default visibility"); 749 750 unsigned AddrSpace; 751 bool IsConstant, IsExternallyInitialized; 752 LocTy IsExternallyInitializedLoc; 753 LocTy TyLoc; 754 755 Type *Ty = nullptr; 756 if (ParseOptionalAddrSpace(AddrSpace) || 757 ParseOptionalToken(lltok::kw_externally_initialized, 758 IsExternallyInitialized, 759 &IsExternallyInitializedLoc) || 760 ParseGlobalType(IsConstant) || 761 ParseType(Ty, TyLoc)) 762 return true; 763 764 // If the linkage is specified and is external, then no initializer is 765 // present. 766 Constant *Init = nullptr; 767 if (!HasLinkage || (Linkage != GlobalValue::ExternalWeakLinkage && 768 Linkage != GlobalValue::ExternalLinkage)) { 769 if (ParseGlobalValue(Ty, Init)) 770 return true; 771 } 772 773 if (Ty->isFunctionTy() || !PointerType::isValidElementType(Ty)) 774 return Error(TyLoc, "invalid type for global variable"); 775 776 GlobalValue *GVal = nullptr; 777 778 // See if the global was forward referenced, if so, use the global. 779 if (!Name.empty()) { 780 GVal = M->getNamedValue(Name); 781 if (GVal) { 782 if (!ForwardRefVals.erase(Name) || !isa<GlobalValue>(GVal)) 783 return Error(NameLoc, "redefinition of global '@" + Name + "'"); 784 } 785 } else { 786 std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator 787 I = ForwardRefValIDs.find(NumberedVals.size()); 788 if (I != ForwardRefValIDs.end()) { 789 GVal = I->second.first; 790 ForwardRefValIDs.erase(I); 791 } 792 } 793 794 GlobalVariable *GV; 795 if (!GVal) { 796 GV = new GlobalVariable(*M, Ty, false, GlobalValue::ExternalLinkage, nullptr, 797 Name, nullptr, GlobalVariable::NotThreadLocal, 798 AddrSpace); 799 } else { 800 if (GVal->getValueType() != Ty) 801 return Error(TyLoc, 802 "forward reference and definition of global have different types"); 803 804 GV = cast<GlobalVariable>(GVal); 805 806 // Move the forward-reference to the correct spot in the module. 807 M->getGlobalList().splice(M->global_end(), M->getGlobalList(), GV); 808 } 809 810 if (Name.empty()) 811 NumberedVals.push_back(GV); 812 813 // Set the parsed properties on the global. 814 if (Init) 815 GV->setInitializer(Init); 816 GV->setConstant(IsConstant); 817 GV->setLinkage((GlobalValue::LinkageTypes)Linkage); 818 GV->setVisibility((GlobalValue::VisibilityTypes)Visibility); 819 GV->setDLLStorageClass((GlobalValue::DLLStorageClassTypes)DLLStorageClass); 820 GV->setExternallyInitialized(IsExternallyInitialized); 821 GV->setThreadLocalMode(TLM); 822 GV->setUnnamedAddr(UnnamedAddr); 823 824 // Parse attributes on the global. 825 while (Lex.getKind() == lltok::comma) { 826 Lex.Lex(); 827 828 if (Lex.getKind() == lltok::kw_section) { 829 Lex.Lex(); 830 GV->setSection(Lex.getStrVal()); 831 if (ParseToken(lltok::StringConstant, "expected global section string")) 832 return true; 833 } else if (Lex.getKind() == lltok::kw_align) { 834 unsigned Alignment; 835 if (ParseOptionalAlignment(Alignment)) return true; 836 GV->setAlignment(Alignment); 837 } else { 838 Comdat *C; 839 if (parseOptionalComdat(Name, C)) 840 return true; 841 if (C) 842 GV->setComdat(C); 843 else 844 return TokError("unknown global variable property!"); 845 } 846 } 847 848 return false; 849 } 850 851 /// ParseUnnamedAttrGrp 852 /// ::= 'attributes' AttrGrpID '=' '{' AttrValPair+ '}' 853 bool LLParser::ParseUnnamedAttrGrp() { 854 assert(Lex.getKind() == lltok::kw_attributes); 855 LocTy AttrGrpLoc = Lex.getLoc(); 856 Lex.Lex(); 857 858 if (Lex.getKind() != lltok::AttrGrpID) 859 return TokError("expected attribute group id"); 860 861 unsigned VarID = Lex.getUIntVal(); 862 std::vector<unsigned> unused; 863 LocTy BuiltinLoc; 864 Lex.Lex(); 865 866 if (ParseToken(lltok::equal, "expected '=' here") || 867 ParseToken(lltok::lbrace, "expected '{' here") || 868 ParseFnAttributeValuePairs(NumberedAttrBuilders[VarID], unused, true, 869 BuiltinLoc) || 870 ParseToken(lltok::rbrace, "expected end of attribute group")) 871 return true; 872 873 if (!NumberedAttrBuilders[VarID].hasAttributes()) 874 return Error(AttrGrpLoc, "attribute group has no attributes"); 875 876 return false; 877 } 878 879 /// ParseFnAttributeValuePairs 880 /// ::= <attr> | <attr> '=' <value> 881 bool LLParser::ParseFnAttributeValuePairs(AttrBuilder &B, 882 std::vector<unsigned> &FwdRefAttrGrps, 883 bool inAttrGrp, LocTy &BuiltinLoc) { 884 bool HaveError = false; 885 886 B.clear(); 887 888 while (true) { 889 lltok::Kind Token = Lex.getKind(); 890 if (Token == lltok::kw_builtin) 891 BuiltinLoc = Lex.getLoc(); 892 switch (Token) { 893 default: 894 if (!inAttrGrp) return HaveError; 895 return Error(Lex.getLoc(), "unterminated attribute group"); 896 case lltok::rbrace: 897 // Finished. 898 return false; 899 900 case lltok::AttrGrpID: { 901 // Allow a function to reference an attribute group: 902 // 903 // define void @foo() #1 { ... } 904 if (inAttrGrp) 905 HaveError |= 906 Error(Lex.getLoc(), 907 "cannot have an attribute group reference in an attribute group"); 908 909 unsigned AttrGrpNum = Lex.getUIntVal(); 910 if (inAttrGrp) break; 911 912 // Save the reference to the attribute group. We'll fill it in later. 913 FwdRefAttrGrps.push_back(AttrGrpNum); 914 break; 915 } 916 // Target-dependent attributes: 917 case lltok::StringConstant: { 918 if (ParseStringAttribute(B)) 919 return true; 920 continue; 921 } 922 923 // Target-independent attributes: 924 case lltok::kw_align: { 925 // As a hack, we allow function alignment to be initially parsed as an 926 // attribute on a function declaration/definition or added to an attribute 927 // group and later moved to the alignment field. 928 unsigned Alignment; 929 if (inAttrGrp) { 930 Lex.Lex(); 931 if (ParseToken(lltok::equal, "expected '=' here") || 932 ParseUInt32(Alignment)) 933 return true; 934 } else { 935 if (ParseOptionalAlignment(Alignment)) 936 return true; 937 } 938 B.addAlignmentAttr(Alignment); 939 continue; 940 } 941 case lltok::kw_alignstack: { 942 unsigned Alignment; 943 if (inAttrGrp) { 944 Lex.Lex(); 945 if (ParseToken(lltok::equal, "expected '=' here") || 946 ParseUInt32(Alignment)) 947 return true; 948 } else { 949 if (ParseOptionalStackAlignment(Alignment)) 950 return true; 951 } 952 B.addStackAlignmentAttr(Alignment); 953 continue; 954 } 955 case lltok::kw_alwaysinline: B.addAttribute(Attribute::AlwaysInline); break; 956 case lltok::kw_argmemonly: B.addAttribute(Attribute::ArgMemOnly); break; 957 case lltok::kw_builtin: B.addAttribute(Attribute::Builtin); break; 958 case lltok::kw_cold: B.addAttribute(Attribute::Cold); break; 959 case lltok::kw_convergent: B.addAttribute(Attribute::Convergent); break; 960 case lltok::kw_inlinehint: B.addAttribute(Attribute::InlineHint); break; 961 case lltok::kw_jumptable: B.addAttribute(Attribute::JumpTable); break; 962 case lltok::kw_minsize: B.addAttribute(Attribute::MinSize); break; 963 case lltok::kw_naked: B.addAttribute(Attribute::Naked); break; 964 case lltok::kw_nobuiltin: B.addAttribute(Attribute::NoBuiltin); break; 965 case lltok::kw_noduplicate: B.addAttribute(Attribute::NoDuplicate); break; 966 case lltok::kw_noimplicitfloat: 967 B.addAttribute(Attribute::NoImplicitFloat); break; 968 case lltok::kw_noinline: B.addAttribute(Attribute::NoInline); break; 969 case lltok::kw_nonlazybind: B.addAttribute(Attribute::NonLazyBind); break; 970 case lltok::kw_noredzone: B.addAttribute(Attribute::NoRedZone); break; 971 case lltok::kw_noreturn: B.addAttribute(Attribute::NoReturn); break; 972 case lltok::kw_nounwind: B.addAttribute(Attribute::NoUnwind); break; 973 case lltok::kw_optnone: B.addAttribute(Attribute::OptimizeNone); break; 974 case lltok::kw_optsize: B.addAttribute(Attribute::OptimizeForSize); break; 975 case lltok::kw_readnone: B.addAttribute(Attribute::ReadNone); break; 976 case lltok::kw_readonly: B.addAttribute(Attribute::ReadOnly); break; 977 case lltok::kw_returns_twice: 978 B.addAttribute(Attribute::ReturnsTwice); break; 979 case lltok::kw_ssp: B.addAttribute(Attribute::StackProtect); break; 980 case lltok::kw_sspreq: B.addAttribute(Attribute::StackProtectReq); break; 981 case lltok::kw_sspstrong: 982 B.addAttribute(Attribute::StackProtectStrong); break; 983 case lltok::kw_safestack: B.addAttribute(Attribute::SafeStack); break; 984 case lltok::kw_sanitize_address: 985 B.addAttribute(Attribute::SanitizeAddress); break; 986 case lltok::kw_sanitize_thread: 987 B.addAttribute(Attribute::SanitizeThread); break; 988 case lltok::kw_sanitize_memory: 989 B.addAttribute(Attribute::SanitizeMemory); break; 990 case lltok::kw_uwtable: B.addAttribute(Attribute::UWTable); break; 991 992 // Error handling. 993 case lltok::kw_inreg: 994 case lltok::kw_signext: 995 case lltok::kw_zeroext: 996 HaveError |= 997 Error(Lex.getLoc(), 998 "invalid use of attribute on a function"); 999 break; 1000 case lltok::kw_byval: 1001 case lltok::kw_dereferenceable: 1002 case lltok::kw_dereferenceable_or_null: 1003 case lltok::kw_inalloca: 1004 case lltok::kw_nest: 1005 case lltok::kw_noalias: 1006 case lltok::kw_nocapture: 1007 case lltok::kw_nonnull: 1008 case lltok::kw_returned: 1009 case lltok::kw_sret: 1010 HaveError |= 1011 Error(Lex.getLoc(), 1012 "invalid use of parameter-only attribute on a function"); 1013 break; 1014 } 1015 1016 Lex.Lex(); 1017 } 1018 } 1019 1020 //===----------------------------------------------------------------------===// 1021 // GlobalValue Reference/Resolution Routines. 1022 //===----------------------------------------------------------------------===// 1023 1024 /// GetGlobalVal - Get a value with the specified name or ID, creating a 1025 /// forward reference record if needed. This can return null if the value 1026 /// exists but does not have the right type. 1027 GlobalValue *LLParser::GetGlobalVal(const std::string &Name, Type *Ty, 1028 LocTy Loc) { 1029 PointerType *PTy = dyn_cast<PointerType>(Ty); 1030 if (!PTy) { 1031 Error(Loc, "global variable reference must have pointer type"); 1032 return nullptr; 1033 } 1034 1035 // Look this name up in the normal function symbol table. 1036 GlobalValue *Val = 1037 cast_or_null<GlobalValue>(M->getValueSymbolTable().lookup(Name)); 1038 1039 // If this is a forward reference for the value, see if we already created a 1040 // forward ref record. 1041 if (!Val) { 1042 std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator 1043 I = ForwardRefVals.find(Name); 1044 if (I != ForwardRefVals.end()) 1045 Val = I->second.first; 1046 } 1047 1048 // If we have the value in the symbol table or fwd-ref table, return it. 1049 if (Val) { 1050 if (Val->getType() == Ty) return Val; 1051 Error(Loc, "'@" + Name + "' defined with type '" + 1052 getTypeString(Val->getType()) + "'"); 1053 return nullptr; 1054 } 1055 1056 // Otherwise, create a new forward reference for this value and remember it. 1057 GlobalValue *FwdVal; 1058 if (FunctionType *FT = dyn_cast<FunctionType>(PTy->getElementType())) 1059 FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, Name, M); 1060 else 1061 FwdVal = new GlobalVariable(*M, PTy->getElementType(), false, 1062 GlobalValue::ExternalWeakLinkage, nullptr, Name, 1063 nullptr, GlobalVariable::NotThreadLocal, 1064 PTy->getAddressSpace()); 1065 1066 ForwardRefVals[Name] = std::make_pair(FwdVal, Loc); 1067 return FwdVal; 1068 } 1069 1070 GlobalValue *LLParser::GetGlobalVal(unsigned ID, Type *Ty, LocTy Loc) { 1071 PointerType *PTy = dyn_cast<PointerType>(Ty); 1072 if (!PTy) { 1073 Error(Loc, "global variable reference must have pointer type"); 1074 return nullptr; 1075 } 1076 1077 GlobalValue *Val = ID < NumberedVals.size() ? NumberedVals[ID] : nullptr; 1078 1079 // If this is a forward reference for the value, see if we already created a 1080 // forward ref record. 1081 if (!Val) { 1082 std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator 1083 I = ForwardRefValIDs.find(ID); 1084 if (I != ForwardRefValIDs.end()) 1085 Val = I->second.first; 1086 } 1087 1088 // If we have the value in the symbol table or fwd-ref table, return it. 1089 if (Val) { 1090 if (Val->getType() == Ty) return Val; 1091 Error(Loc, "'@" + Twine(ID) + "' defined with type '" + 1092 getTypeString(Val->getType()) + "'"); 1093 return nullptr; 1094 } 1095 1096 // Otherwise, create a new forward reference for this value and remember it. 1097 GlobalValue *FwdVal; 1098 if (FunctionType *FT = dyn_cast<FunctionType>(PTy->getElementType())) 1099 FwdVal = Function::Create(FT, GlobalValue::ExternalWeakLinkage, "", M); 1100 else 1101 FwdVal = new GlobalVariable(*M, PTy->getElementType(), false, 1102 GlobalValue::ExternalWeakLinkage, nullptr, ""); 1103 1104 ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc); 1105 return FwdVal; 1106 } 1107 1108 1109 //===----------------------------------------------------------------------===// 1110 // Comdat Reference/Resolution Routines. 1111 //===----------------------------------------------------------------------===// 1112 1113 Comdat *LLParser::getComdat(const std::string &Name, LocTy Loc) { 1114 // Look this name up in the comdat symbol table. 1115 Module::ComdatSymTabType &ComdatSymTab = M->getComdatSymbolTable(); 1116 Module::ComdatSymTabType::iterator I = ComdatSymTab.find(Name); 1117 if (I != ComdatSymTab.end()) 1118 return &I->second; 1119 1120 // Otherwise, create a new forward reference for this value and remember it. 1121 Comdat *C = M->getOrInsertComdat(Name); 1122 ForwardRefComdats[Name] = Loc; 1123 return C; 1124 } 1125 1126 1127 //===----------------------------------------------------------------------===// 1128 // Helper Routines. 1129 //===----------------------------------------------------------------------===// 1130 1131 /// ParseToken - If the current token has the specified kind, eat it and return 1132 /// success. Otherwise, emit the specified error and return failure. 1133 bool LLParser::ParseToken(lltok::Kind T, const char *ErrMsg) { 1134 if (Lex.getKind() != T) 1135 return TokError(ErrMsg); 1136 Lex.Lex(); 1137 return false; 1138 } 1139 1140 /// ParseStringConstant 1141 /// ::= StringConstant 1142 bool LLParser::ParseStringConstant(std::string &Result) { 1143 if (Lex.getKind() != lltok::StringConstant) 1144 return TokError("expected string constant"); 1145 Result = Lex.getStrVal(); 1146 Lex.Lex(); 1147 return false; 1148 } 1149 1150 /// ParseUInt32 1151 /// ::= uint32 1152 bool LLParser::ParseUInt32(unsigned &Val) { 1153 if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned()) 1154 return TokError("expected integer"); 1155 uint64_t Val64 = Lex.getAPSIntVal().getLimitedValue(0xFFFFFFFFULL+1); 1156 if (Val64 != unsigned(Val64)) 1157 return TokError("expected 32-bit integer (too large)"); 1158 Val = Val64; 1159 Lex.Lex(); 1160 return false; 1161 } 1162 1163 /// ParseUInt64 1164 /// ::= uint64 1165 bool LLParser::ParseUInt64(uint64_t &Val) { 1166 if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned()) 1167 return TokError("expected integer"); 1168 Val = Lex.getAPSIntVal().getLimitedValue(); 1169 Lex.Lex(); 1170 return false; 1171 } 1172 1173 /// ParseTLSModel 1174 /// := 'localdynamic' 1175 /// := 'initialexec' 1176 /// := 'localexec' 1177 bool LLParser::ParseTLSModel(GlobalVariable::ThreadLocalMode &TLM) { 1178 switch (Lex.getKind()) { 1179 default: 1180 return TokError("expected localdynamic, initialexec or localexec"); 1181 case lltok::kw_localdynamic: 1182 TLM = GlobalVariable::LocalDynamicTLSModel; 1183 break; 1184 case lltok::kw_initialexec: 1185 TLM = GlobalVariable::InitialExecTLSModel; 1186 break; 1187 case lltok::kw_localexec: 1188 TLM = GlobalVariable::LocalExecTLSModel; 1189 break; 1190 } 1191 1192 Lex.Lex(); 1193 return false; 1194 } 1195 1196 /// ParseOptionalThreadLocal 1197 /// := /*empty*/ 1198 /// := 'thread_local' 1199 /// := 'thread_local' '(' tlsmodel ')' 1200 bool LLParser::ParseOptionalThreadLocal(GlobalVariable::ThreadLocalMode &TLM) { 1201 TLM = GlobalVariable::NotThreadLocal; 1202 if (!EatIfPresent(lltok::kw_thread_local)) 1203 return false; 1204 1205 TLM = GlobalVariable::GeneralDynamicTLSModel; 1206 if (Lex.getKind() == lltok::lparen) { 1207 Lex.Lex(); 1208 return ParseTLSModel(TLM) || 1209 ParseToken(lltok::rparen, "expected ')' after thread local model"); 1210 } 1211 return false; 1212 } 1213 1214 /// ParseOptionalAddrSpace 1215 /// := /*empty*/ 1216 /// := 'addrspace' '(' uint32 ')' 1217 bool LLParser::ParseOptionalAddrSpace(unsigned &AddrSpace) { 1218 AddrSpace = 0; 1219 if (!EatIfPresent(lltok::kw_addrspace)) 1220 return false; 1221 return ParseToken(lltok::lparen, "expected '(' in address space") || 1222 ParseUInt32(AddrSpace) || 1223 ParseToken(lltok::rparen, "expected ')' in address space"); 1224 } 1225 1226 /// ParseStringAttribute 1227 /// := StringConstant 1228 /// := StringConstant '=' StringConstant 1229 bool LLParser::ParseStringAttribute(AttrBuilder &B) { 1230 std::string Attr = Lex.getStrVal(); 1231 Lex.Lex(); 1232 std::string Val; 1233 if (EatIfPresent(lltok::equal) && ParseStringConstant(Val)) 1234 return true; 1235 B.addAttribute(Attr, Val); 1236 return false; 1237 } 1238 1239 /// ParseOptionalParamAttrs - Parse a potentially empty list of parameter attributes. 1240 bool LLParser::ParseOptionalParamAttrs(AttrBuilder &B) { 1241 bool HaveError = false; 1242 1243 B.clear(); 1244 1245 while (1) { 1246 lltok::Kind Token = Lex.getKind(); 1247 switch (Token) { 1248 default: // End of attributes. 1249 return HaveError; 1250 case lltok::StringConstant: { 1251 if (ParseStringAttribute(B)) 1252 return true; 1253 continue; 1254 } 1255 case lltok::kw_align: { 1256 unsigned Alignment; 1257 if (ParseOptionalAlignment(Alignment)) 1258 return true; 1259 B.addAlignmentAttr(Alignment); 1260 continue; 1261 } 1262 case lltok::kw_byval: B.addAttribute(Attribute::ByVal); break; 1263 case lltok::kw_dereferenceable: { 1264 uint64_t Bytes; 1265 if (ParseOptionalDerefAttrBytes(lltok::kw_dereferenceable, Bytes)) 1266 return true; 1267 B.addDereferenceableAttr(Bytes); 1268 continue; 1269 } 1270 case lltok::kw_dereferenceable_or_null: { 1271 uint64_t Bytes; 1272 if (ParseOptionalDerefAttrBytes(lltok::kw_dereferenceable_or_null, Bytes)) 1273 return true; 1274 B.addDereferenceableOrNullAttr(Bytes); 1275 continue; 1276 } 1277 case lltok::kw_inalloca: B.addAttribute(Attribute::InAlloca); break; 1278 case lltok::kw_inreg: B.addAttribute(Attribute::InReg); break; 1279 case lltok::kw_nest: B.addAttribute(Attribute::Nest); break; 1280 case lltok::kw_noalias: B.addAttribute(Attribute::NoAlias); break; 1281 case lltok::kw_nocapture: B.addAttribute(Attribute::NoCapture); break; 1282 case lltok::kw_nonnull: B.addAttribute(Attribute::NonNull); break; 1283 case lltok::kw_readnone: B.addAttribute(Attribute::ReadNone); break; 1284 case lltok::kw_readonly: B.addAttribute(Attribute::ReadOnly); break; 1285 case lltok::kw_returned: B.addAttribute(Attribute::Returned); break; 1286 case lltok::kw_signext: B.addAttribute(Attribute::SExt); break; 1287 case lltok::kw_sret: B.addAttribute(Attribute::StructRet); break; 1288 case lltok::kw_zeroext: B.addAttribute(Attribute::ZExt); break; 1289 1290 case lltok::kw_alignstack: 1291 case lltok::kw_alwaysinline: 1292 case lltok::kw_argmemonly: 1293 case lltok::kw_builtin: 1294 case lltok::kw_inlinehint: 1295 case lltok::kw_jumptable: 1296 case lltok::kw_minsize: 1297 case lltok::kw_naked: 1298 case lltok::kw_nobuiltin: 1299 case lltok::kw_noduplicate: 1300 case lltok::kw_noimplicitfloat: 1301 case lltok::kw_noinline: 1302 case lltok::kw_nonlazybind: 1303 case lltok::kw_noredzone: 1304 case lltok::kw_noreturn: 1305 case lltok::kw_nounwind: 1306 case lltok::kw_optnone: 1307 case lltok::kw_optsize: 1308 case lltok::kw_returns_twice: 1309 case lltok::kw_sanitize_address: 1310 case lltok::kw_sanitize_memory: 1311 case lltok::kw_sanitize_thread: 1312 case lltok::kw_ssp: 1313 case lltok::kw_sspreq: 1314 case lltok::kw_sspstrong: 1315 case lltok::kw_safestack: 1316 case lltok::kw_uwtable: 1317 HaveError |= Error(Lex.getLoc(), "invalid use of function-only attribute"); 1318 break; 1319 } 1320 1321 Lex.Lex(); 1322 } 1323 } 1324 1325 /// ParseOptionalReturnAttrs - Parse a potentially empty list of return attributes. 1326 bool LLParser::ParseOptionalReturnAttrs(AttrBuilder &B) { 1327 bool HaveError = false; 1328 1329 B.clear(); 1330 1331 while (1) { 1332 lltok::Kind Token = Lex.getKind(); 1333 switch (Token) { 1334 default: // End of attributes. 1335 return HaveError; 1336 case lltok::StringConstant: { 1337 if (ParseStringAttribute(B)) 1338 return true; 1339 continue; 1340 } 1341 case lltok::kw_dereferenceable: { 1342 uint64_t Bytes; 1343 if (ParseOptionalDerefAttrBytes(lltok::kw_dereferenceable, Bytes)) 1344 return true; 1345 B.addDereferenceableAttr(Bytes); 1346 continue; 1347 } 1348 case lltok::kw_dereferenceable_or_null: { 1349 uint64_t Bytes; 1350 if (ParseOptionalDerefAttrBytes(lltok::kw_dereferenceable_or_null, Bytes)) 1351 return true; 1352 B.addDereferenceableOrNullAttr(Bytes); 1353 continue; 1354 } 1355 case lltok::kw_inreg: B.addAttribute(Attribute::InReg); break; 1356 case lltok::kw_noalias: B.addAttribute(Attribute::NoAlias); break; 1357 case lltok::kw_nonnull: B.addAttribute(Attribute::NonNull); break; 1358 case lltok::kw_signext: B.addAttribute(Attribute::SExt); break; 1359 case lltok::kw_zeroext: B.addAttribute(Attribute::ZExt); break; 1360 1361 // Error handling. 1362 case lltok::kw_align: 1363 case lltok::kw_byval: 1364 case lltok::kw_inalloca: 1365 case lltok::kw_nest: 1366 case lltok::kw_nocapture: 1367 case lltok::kw_returned: 1368 case lltok::kw_sret: 1369 HaveError |= Error(Lex.getLoc(), "invalid use of parameter-only attribute"); 1370 break; 1371 1372 case lltok::kw_alignstack: 1373 case lltok::kw_alwaysinline: 1374 case lltok::kw_argmemonly: 1375 case lltok::kw_builtin: 1376 case lltok::kw_cold: 1377 case lltok::kw_inlinehint: 1378 case lltok::kw_jumptable: 1379 case lltok::kw_minsize: 1380 case lltok::kw_naked: 1381 case lltok::kw_nobuiltin: 1382 case lltok::kw_noduplicate: 1383 case lltok::kw_noimplicitfloat: 1384 case lltok::kw_noinline: 1385 case lltok::kw_nonlazybind: 1386 case lltok::kw_noredzone: 1387 case lltok::kw_noreturn: 1388 case lltok::kw_nounwind: 1389 case lltok::kw_optnone: 1390 case lltok::kw_optsize: 1391 case lltok::kw_returns_twice: 1392 case lltok::kw_sanitize_address: 1393 case lltok::kw_sanitize_memory: 1394 case lltok::kw_sanitize_thread: 1395 case lltok::kw_ssp: 1396 case lltok::kw_sspreq: 1397 case lltok::kw_sspstrong: 1398 case lltok::kw_safestack: 1399 case lltok::kw_uwtable: 1400 HaveError |= Error(Lex.getLoc(), "invalid use of function-only attribute"); 1401 break; 1402 1403 case lltok::kw_readnone: 1404 case lltok::kw_readonly: 1405 HaveError |= Error(Lex.getLoc(), "invalid use of attribute on return type"); 1406 } 1407 1408 Lex.Lex(); 1409 } 1410 } 1411 1412 /// ParseOptionalLinkage 1413 /// ::= /*empty*/ 1414 /// ::= 'private' 1415 /// ::= 'internal' 1416 /// ::= 'weak' 1417 /// ::= 'weak_odr' 1418 /// ::= 'linkonce' 1419 /// ::= 'linkonce_odr' 1420 /// ::= 'available_externally' 1421 /// ::= 'appending' 1422 /// ::= 'common' 1423 /// ::= 'extern_weak' 1424 /// ::= 'external' 1425 bool LLParser::ParseOptionalLinkage(unsigned &Res, bool &HasLinkage) { 1426 HasLinkage = false; 1427 switch (Lex.getKind()) { 1428 default: Res=GlobalValue::ExternalLinkage; return false; 1429 case lltok::kw_private: Res = GlobalValue::PrivateLinkage; break; 1430 case lltok::kw_internal: Res = GlobalValue::InternalLinkage; break; 1431 case lltok::kw_weak: Res = GlobalValue::WeakAnyLinkage; break; 1432 case lltok::kw_weak_odr: Res = GlobalValue::WeakODRLinkage; break; 1433 case lltok::kw_linkonce: Res = GlobalValue::LinkOnceAnyLinkage; break; 1434 case lltok::kw_linkonce_odr: Res = GlobalValue::LinkOnceODRLinkage; break; 1435 case lltok::kw_available_externally: 1436 Res = GlobalValue::AvailableExternallyLinkage; 1437 break; 1438 case lltok::kw_appending: Res = GlobalValue::AppendingLinkage; break; 1439 case lltok::kw_common: Res = GlobalValue::CommonLinkage; break; 1440 case lltok::kw_extern_weak: Res = GlobalValue::ExternalWeakLinkage; break; 1441 case lltok::kw_external: Res = GlobalValue::ExternalLinkage; break; 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 /// ::= 'intel_ocl_bicc' 1485 /// ::= 'coldcc' 1486 /// ::= 'x86_stdcallcc' 1487 /// ::= 'x86_fastcallcc' 1488 /// ::= 'x86_thiscallcc' 1489 /// ::= 'x86_vectorcallcc' 1490 /// ::= 'arm_apcscc' 1491 /// ::= 'arm_aapcscc' 1492 /// ::= 'arm_aapcs_vfpcc' 1493 /// ::= 'msp430_intrcc' 1494 /// ::= 'ptx_kernel' 1495 /// ::= 'ptx_device' 1496 /// ::= 'spir_func' 1497 /// ::= 'spir_kernel' 1498 /// ::= 'x86_64_sysvcc' 1499 /// ::= 'x86_64_win64cc' 1500 /// ::= 'webkit_jscc' 1501 /// ::= 'anyregcc' 1502 /// ::= 'preserve_mostcc' 1503 /// ::= 'preserve_allcc' 1504 /// ::= 'ghccc' 1505 /// ::= 'cc' UINT 1506 /// 1507 bool LLParser::ParseOptionalCallingConv(unsigned &CC) { 1508 switch (Lex.getKind()) { 1509 default: CC = CallingConv::C; return false; 1510 case lltok::kw_ccc: CC = CallingConv::C; break; 1511 case lltok::kw_fastcc: CC = CallingConv::Fast; break; 1512 case lltok::kw_coldcc: CC = CallingConv::Cold; break; 1513 case lltok::kw_x86_stdcallcc: CC = CallingConv::X86_StdCall; break; 1514 case lltok::kw_x86_fastcallcc: CC = CallingConv::X86_FastCall; break; 1515 case lltok::kw_x86_thiscallcc: CC = CallingConv::X86_ThisCall; break; 1516 case lltok::kw_x86_vectorcallcc:CC = CallingConv::X86_VectorCall; break; 1517 case lltok::kw_arm_apcscc: CC = CallingConv::ARM_APCS; break; 1518 case lltok::kw_arm_aapcscc: CC = CallingConv::ARM_AAPCS; break; 1519 case lltok::kw_arm_aapcs_vfpcc:CC = CallingConv::ARM_AAPCS_VFP; break; 1520 case lltok::kw_msp430_intrcc: CC = CallingConv::MSP430_INTR; break; 1521 case lltok::kw_ptx_kernel: CC = CallingConv::PTX_Kernel; break; 1522 case lltok::kw_ptx_device: CC = CallingConv::PTX_Device; break; 1523 case lltok::kw_spir_kernel: CC = CallingConv::SPIR_KERNEL; break; 1524 case lltok::kw_spir_func: CC = CallingConv::SPIR_FUNC; break; 1525 case lltok::kw_intel_ocl_bicc: CC = CallingConv::Intel_OCL_BI; break; 1526 case lltok::kw_x86_64_sysvcc: CC = CallingConv::X86_64_SysV; break; 1527 case lltok::kw_x86_64_win64cc: CC = CallingConv::X86_64_Win64; break; 1528 case lltok::kw_webkit_jscc: CC = CallingConv::WebKit_JS; break; 1529 case lltok::kw_anyregcc: CC = CallingConv::AnyReg; break; 1530 case lltok::kw_preserve_mostcc:CC = CallingConv::PreserveMost; break; 1531 case lltok::kw_preserve_allcc: CC = CallingConv::PreserveAll; break; 1532 case lltok::kw_ghccc: CC = CallingConv::GHC; break; 1533 case lltok::kw_cc: { 1534 Lex.Lex(); 1535 return ParseUInt32(CC); 1536 } 1537 } 1538 1539 Lex.Lex(); 1540 return false; 1541 } 1542 1543 /// ParseMetadataAttachment 1544 /// ::= !dbg !42 1545 bool LLParser::ParseMetadataAttachment(unsigned &Kind, MDNode *&MD) { 1546 assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata attachment"); 1547 1548 std::string Name = Lex.getStrVal(); 1549 Kind = M->getMDKindID(Name); 1550 Lex.Lex(); 1551 1552 return ParseMDNode(MD); 1553 } 1554 1555 /// ParseInstructionMetadata 1556 /// ::= !dbg !42 (',' !dbg !57)* 1557 bool LLParser::ParseInstructionMetadata(Instruction &Inst) { 1558 do { 1559 if (Lex.getKind() != lltok::MetadataVar) 1560 return TokError("expected metadata after comma"); 1561 1562 unsigned MDK; 1563 MDNode *N; 1564 if (ParseMetadataAttachment(MDK, N)) 1565 return true; 1566 1567 Inst.setMetadata(MDK, N); 1568 if (MDK == LLVMContext::MD_tbaa) 1569 InstsWithTBAATag.push_back(&Inst); 1570 1571 // If this is the end of the list, we're done. 1572 } while (EatIfPresent(lltok::comma)); 1573 return false; 1574 } 1575 1576 /// ParseOptionalFunctionMetadata 1577 /// ::= (!dbg !57)* 1578 bool LLParser::ParseOptionalFunctionMetadata(Function &F) { 1579 while (Lex.getKind() == lltok::MetadataVar) { 1580 unsigned MDK; 1581 MDNode *N; 1582 if (ParseMetadataAttachment(MDK, N)) 1583 return true; 1584 1585 F.setMetadata(MDK, N); 1586 } 1587 return false; 1588 } 1589 1590 /// ParseOptionalAlignment 1591 /// ::= /* empty */ 1592 /// ::= 'align' 4 1593 bool LLParser::ParseOptionalAlignment(unsigned &Alignment) { 1594 Alignment = 0; 1595 if (!EatIfPresent(lltok::kw_align)) 1596 return false; 1597 LocTy AlignLoc = Lex.getLoc(); 1598 if (ParseUInt32(Alignment)) return true; 1599 if (!isPowerOf2_32(Alignment)) 1600 return Error(AlignLoc, "alignment is not a power of two"); 1601 if (Alignment > Value::MaximumAlignment) 1602 return Error(AlignLoc, "huge alignments are not supported yet"); 1603 return false; 1604 } 1605 1606 /// ParseOptionalDerefAttrBytes 1607 /// ::= /* empty */ 1608 /// ::= AttrKind '(' 4 ')' 1609 /// 1610 /// where AttrKind is either 'dereferenceable' or 'dereferenceable_or_null'. 1611 bool LLParser::ParseOptionalDerefAttrBytes(lltok::Kind AttrKind, 1612 uint64_t &Bytes) { 1613 assert((AttrKind == lltok::kw_dereferenceable || 1614 AttrKind == lltok::kw_dereferenceable_or_null) && 1615 "contract!"); 1616 1617 Bytes = 0; 1618 if (!EatIfPresent(AttrKind)) 1619 return false; 1620 LocTy ParenLoc = Lex.getLoc(); 1621 if (!EatIfPresent(lltok::lparen)) 1622 return Error(ParenLoc, "expected '('"); 1623 LocTy DerefLoc = Lex.getLoc(); 1624 if (ParseUInt64(Bytes)) return true; 1625 ParenLoc = Lex.getLoc(); 1626 if (!EatIfPresent(lltok::rparen)) 1627 return Error(ParenLoc, "expected ')'"); 1628 if (!Bytes) 1629 return Error(DerefLoc, "dereferenceable bytes must be non-zero"); 1630 return false; 1631 } 1632 1633 /// ParseOptionalCommaAlign 1634 /// ::= 1635 /// ::= ',' align 4 1636 /// 1637 /// This returns with AteExtraComma set to true if it ate an excess comma at the 1638 /// end. 1639 bool LLParser::ParseOptionalCommaAlign(unsigned &Alignment, 1640 bool &AteExtraComma) { 1641 AteExtraComma = false; 1642 while (EatIfPresent(lltok::comma)) { 1643 // Metadata at the end is an early exit. 1644 if (Lex.getKind() == lltok::MetadataVar) { 1645 AteExtraComma = true; 1646 return false; 1647 } 1648 1649 if (Lex.getKind() != lltok::kw_align) 1650 return Error(Lex.getLoc(), "expected metadata or 'align'"); 1651 1652 if (ParseOptionalAlignment(Alignment)) return true; 1653 } 1654 1655 return false; 1656 } 1657 1658 /// ParseScopeAndOrdering 1659 /// if isAtomic: ::= 'singlethread'? AtomicOrdering 1660 /// else: ::= 1661 /// 1662 /// This sets Scope and Ordering to the parsed values. 1663 bool LLParser::ParseScopeAndOrdering(bool isAtomic, SynchronizationScope &Scope, 1664 AtomicOrdering &Ordering) { 1665 if (!isAtomic) 1666 return false; 1667 1668 Scope = CrossThread; 1669 if (EatIfPresent(lltok::kw_singlethread)) 1670 Scope = SingleThread; 1671 1672 return ParseOrdering(Ordering); 1673 } 1674 1675 /// ParseOrdering 1676 /// ::= AtomicOrdering 1677 /// 1678 /// This sets Ordering to the parsed value. 1679 bool LLParser::ParseOrdering(AtomicOrdering &Ordering) { 1680 switch (Lex.getKind()) { 1681 default: return TokError("Expected ordering on atomic instruction"); 1682 case lltok::kw_unordered: Ordering = Unordered; break; 1683 case lltok::kw_monotonic: Ordering = Monotonic; break; 1684 case lltok::kw_acquire: Ordering = Acquire; break; 1685 case lltok::kw_release: Ordering = Release; break; 1686 case lltok::kw_acq_rel: Ordering = AcquireRelease; break; 1687 case lltok::kw_seq_cst: Ordering = SequentiallyConsistent; break; 1688 } 1689 Lex.Lex(); 1690 return false; 1691 } 1692 1693 /// ParseOptionalStackAlignment 1694 /// ::= /* empty */ 1695 /// ::= 'alignstack' '(' 4 ')' 1696 bool LLParser::ParseOptionalStackAlignment(unsigned &Alignment) { 1697 Alignment = 0; 1698 if (!EatIfPresent(lltok::kw_alignstack)) 1699 return false; 1700 LocTy ParenLoc = Lex.getLoc(); 1701 if (!EatIfPresent(lltok::lparen)) 1702 return Error(ParenLoc, "expected '('"); 1703 LocTy AlignLoc = Lex.getLoc(); 1704 if (ParseUInt32(Alignment)) return true; 1705 ParenLoc = Lex.getLoc(); 1706 if (!EatIfPresent(lltok::rparen)) 1707 return Error(ParenLoc, "expected ')'"); 1708 if (!isPowerOf2_32(Alignment)) 1709 return Error(AlignLoc, "stack alignment is not a power of two"); 1710 return false; 1711 } 1712 1713 /// ParseIndexList - This parses the index list for an insert/extractvalue 1714 /// instruction. This sets AteExtraComma in the case where we eat an extra 1715 /// comma at the end of the line and find that it is followed by metadata. 1716 /// Clients that don't allow metadata can call the version of this function that 1717 /// only takes one argument. 1718 /// 1719 /// ParseIndexList 1720 /// ::= (',' uint32)+ 1721 /// 1722 bool LLParser::ParseIndexList(SmallVectorImpl<unsigned> &Indices, 1723 bool &AteExtraComma) { 1724 AteExtraComma = false; 1725 1726 if (Lex.getKind() != lltok::comma) 1727 return TokError("expected ',' as start of index list"); 1728 1729 while (EatIfPresent(lltok::comma)) { 1730 if (Lex.getKind() == lltok::MetadataVar) { 1731 if (Indices.empty()) return TokError("expected index"); 1732 AteExtraComma = true; 1733 return false; 1734 } 1735 unsigned Idx = 0; 1736 if (ParseUInt32(Idx)) return true; 1737 Indices.push_back(Idx); 1738 } 1739 1740 return false; 1741 } 1742 1743 //===----------------------------------------------------------------------===// 1744 // Type Parsing. 1745 //===----------------------------------------------------------------------===// 1746 1747 /// ParseType - Parse a type. 1748 bool LLParser::ParseType(Type *&Result, const Twine &Msg, bool AllowVoid) { 1749 SMLoc TypeLoc = Lex.getLoc(); 1750 switch (Lex.getKind()) { 1751 default: 1752 return TokError(Msg); 1753 case lltok::Type: 1754 // Type ::= 'float' | 'void' (etc) 1755 Result = Lex.getTyVal(); 1756 Lex.Lex(); 1757 break; 1758 case lltok::lbrace: 1759 // Type ::= StructType 1760 if (ParseAnonStructType(Result, false)) 1761 return true; 1762 break; 1763 case lltok::lsquare: 1764 // Type ::= '[' ... ']' 1765 Lex.Lex(); // eat the lsquare. 1766 if (ParseArrayVectorType(Result, false)) 1767 return true; 1768 break; 1769 case lltok::less: // Either vector or packed struct. 1770 // Type ::= '<' ... '>' 1771 Lex.Lex(); 1772 if (Lex.getKind() == lltok::lbrace) { 1773 if (ParseAnonStructType(Result, true) || 1774 ParseToken(lltok::greater, "expected '>' at end of packed struct")) 1775 return true; 1776 } else if (ParseArrayVectorType(Result, true)) 1777 return true; 1778 break; 1779 case lltok::LocalVar: { 1780 // Type ::= %foo 1781 std::pair<Type*, LocTy> &Entry = NamedTypes[Lex.getStrVal()]; 1782 1783 // If the type hasn't been defined yet, create a forward definition and 1784 // remember where that forward def'n was seen (in case it never is defined). 1785 if (!Entry.first) { 1786 Entry.first = StructType::create(Context, Lex.getStrVal()); 1787 Entry.second = Lex.getLoc(); 1788 } 1789 Result = Entry.first; 1790 Lex.Lex(); 1791 break; 1792 } 1793 1794 case lltok::LocalVarID: { 1795 // Type ::= %4 1796 std::pair<Type*, LocTy> &Entry = NumberedTypes[Lex.getUIntVal()]; 1797 1798 // If the type hasn't been defined yet, create a forward definition and 1799 // remember where that forward def'n was seen (in case it never is defined). 1800 if (!Entry.first) { 1801 Entry.first = StructType::create(Context); 1802 Entry.second = Lex.getLoc(); 1803 } 1804 Result = Entry.first; 1805 Lex.Lex(); 1806 break; 1807 } 1808 } 1809 1810 // Parse the type suffixes. 1811 while (1) { 1812 switch (Lex.getKind()) { 1813 // End of type. 1814 default: 1815 if (!AllowVoid && Result->isVoidTy()) 1816 return Error(TypeLoc, "void type only allowed for function results"); 1817 return false; 1818 1819 // Type ::= Type '*' 1820 case lltok::star: 1821 if (Result->isLabelTy()) 1822 return TokError("basic block pointers are invalid"); 1823 if (Result->isVoidTy()) 1824 return TokError("pointers to void are invalid - use i8* instead"); 1825 if (!PointerType::isValidElementType(Result)) 1826 return TokError("pointer to this type is invalid"); 1827 Result = PointerType::getUnqual(Result); 1828 Lex.Lex(); 1829 break; 1830 1831 // Type ::= Type 'addrspace' '(' uint32 ')' '*' 1832 case lltok::kw_addrspace: { 1833 if (Result->isLabelTy()) 1834 return TokError("basic block pointers are invalid"); 1835 if (Result->isVoidTy()) 1836 return TokError("pointers to void are invalid; use i8* instead"); 1837 if (!PointerType::isValidElementType(Result)) 1838 return TokError("pointer to this type is invalid"); 1839 unsigned AddrSpace; 1840 if (ParseOptionalAddrSpace(AddrSpace) || 1841 ParseToken(lltok::star, "expected '*' in address space")) 1842 return true; 1843 1844 Result = PointerType::get(Result, AddrSpace); 1845 break; 1846 } 1847 1848 /// Types '(' ArgTypeListI ')' OptFuncAttrs 1849 case lltok::lparen: 1850 if (ParseFunctionType(Result)) 1851 return true; 1852 break; 1853 } 1854 } 1855 } 1856 1857 /// ParseParameterList 1858 /// ::= '(' ')' 1859 /// ::= '(' Arg (',' Arg)* ')' 1860 /// Arg 1861 /// ::= Type OptionalAttributes Value OptionalAttributes 1862 bool LLParser::ParseParameterList(SmallVectorImpl<ParamInfo> &ArgList, 1863 PerFunctionState &PFS, bool IsMustTailCall, 1864 bool InVarArgsFunc) { 1865 if (ParseToken(lltok::lparen, "expected '(' in call")) 1866 return true; 1867 1868 unsigned AttrIndex = 1; 1869 while (Lex.getKind() != lltok::rparen) { 1870 // If this isn't the first argument, we need a comma. 1871 if (!ArgList.empty() && 1872 ParseToken(lltok::comma, "expected ',' in argument list")) 1873 return true; 1874 1875 // Parse an ellipsis if this is a musttail call in a variadic function. 1876 if (Lex.getKind() == lltok::dotdotdot) { 1877 const char *Msg = "unexpected ellipsis in argument list for "; 1878 if (!IsMustTailCall) 1879 return TokError(Twine(Msg) + "non-musttail call"); 1880 if (!InVarArgsFunc) 1881 return TokError(Twine(Msg) + "musttail call in non-varargs function"); 1882 Lex.Lex(); // Lex the '...', it is purely for readability. 1883 return ParseToken(lltok::rparen, "expected ')' at end of argument list"); 1884 } 1885 1886 // Parse the argument. 1887 LocTy ArgLoc; 1888 Type *ArgTy = nullptr; 1889 AttrBuilder ArgAttrs; 1890 Value *V; 1891 if (ParseType(ArgTy, ArgLoc)) 1892 return true; 1893 1894 if (ArgTy->isMetadataTy()) { 1895 if (ParseMetadataAsValue(V, PFS)) 1896 return true; 1897 } else { 1898 // Otherwise, handle normal operands. 1899 if (ParseOptionalParamAttrs(ArgAttrs) || ParseValue(ArgTy, V, PFS)) 1900 return true; 1901 } 1902 ArgList.push_back(ParamInfo(ArgLoc, V, AttributeSet::get(V->getContext(), 1903 AttrIndex++, 1904 ArgAttrs))); 1905 } 1906 1907 if (IsMustTailCall && InVarArgsFunc) 1908 return TokError("expected '...' at end of argument list for musttail call " 1909 "in varargs function"); 1910 1911 Lex.Lex(); // Lex the ')'. 1912 return false; 1913 } 1914 1915 1916 1917 /// ParseArgumentList - Parse the argument list for a function type or function 1918 /// prototype. 1919 /// ::= '(' ArgTypeListI ')' 1920 /// ArgTypeListI 1921 /// ::= /*empty*/ 1922 /// ::= '...' 1923 /// ::= ArgTypeList ',' '...' 1924 /// ::= ArgType (',' ArgType)* 1925 /// 1926 bool LLParser::ParseArgumentList(SmallVectorImpl<ArgInfo> &ArgList, 1927 bool &isVarArg){ 1928 isVarArg = false; 1929 assert(Lex.getKind() == lltok::lparen); 1930 Lex.Lex(); // eat the (. 1931 1932 if (Lex.getKind() == lltok::rparen) { 1933 // empty 1934 } else if (Lex.getKind() == lltok::dotdotdot) { 1935 isVarArg = true; 1936 Lex.Lex(); 1937 } else { 1938 LocTy TypeLoc = Lex.getLoc(); 1939 Type *ArgTy = nullptr; 1940 AttrBuilder Attrs; 1941 std::string Name; 1942 1943 if (ParseType(ArgTy) || 1944 ParseOptionalParamAttrs(Attrs)) return true; 1945 1946 if (ArgTy->isVoidTy()) 1947 return Error(TypeLoc, "argument can not have void type"); 1948 1949 if (Lex.getKind() == lltok::LocalVar) { 1950 Name = Lex.getStrVal(); 1951 Lex.Lex(); 1952 } 1953 1954 if (!FunctionType::isValidArgumentType(ArgTy)) 1955 return Error(TypeLoc, "invalid type for function argument"); 1956 1957 unsigned AttrIndex = 1; 1958 ArgList.emplace_back(TypeLoc, ArgTy, AttributeSet::get(ArgTy->getContext(), 1959 AttrIndex++, Attrs), 1960 std::move(Name)); 1961 1962 while (EatIfPresent(lltok::comma)) { 1963 // Handle ... at end of arg list. 1964 if (EatIfPresent(lltok::dotdotdot)) { 1965 isVarArg = true; 1966 break; 1967 } 1968 1969 // Otherwise must be an argument type. 1970 TypeLoc = Lex.getLoc(); 1971 if (ParseType(ArgTy) || ParseOptionalParamAttrs(Attrs)) return true; 1972 1973 if (ArgTy->isVoidTy()) 1974 return Error(TypeLoc, "argument can not have void type"); 1975 1976 if (Lex.getKind() == lltok::LocalVar) { 1977 Name = Lex.getStrVal(); 1978 Lex.Lex(); 1979 } else { 1980 Name = ""; 1981 } 1982 1983 if (!ArgTy->isFirstClassType()) 1984 return Error(TypeLoc, "invalid type for function argument"); 1985 1986 ArgList.emplace_back( 1987 TypeLoc, ArgTy, 1988 AttributeSet::get(ArgTy->getContext(), AttrIndex++, Attrs), 1989 std::move(Name)); 1990 } 1991 } 1992 1993 return ParseToken(lltok::rparen, "expected ')' at end of argument list"); 1994 } 1995 1996 /// ParseFunctionType 1997 /// ::= Type ArgumentList OptionalAttrs 1998 bool LLParser::ParseFunctionType(Type *&Result) { 1999 assert(Lex.getKind() == lltok::lparen); 2000 2001 if (!FunctionType::isValidReturnType(Result)) 2002 return TokError("invalid function return type"); 2003 2004 SmallVector<ArgInfo, 8> ArgList; 2005 bool isVarArg; 2006 if (ParseArgumentList(ArgList, isVarArg)) 2007 return true; 2008 2009 // Reject names on the arguments lists. 2010 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) { 2011 if (!ArgList[i].Name.empty()) 2012 return Error(ArgList[i].Loc, "argument name invalid in function type"); 2013 if (ArgList[i].Attrs.hasAttributes(i + 1)) 2014 return Error(ArgList[i].Loc, 2015 "argument attributes invalid in function type"); 2016 } 2017 2018 SmallVector<Type*, 16> ArgListTy; 2019 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) 2020 ArgListTy.push_back(ArgList[i].Ty); 2021 2022 Result = FunctionType::get(Result, ArgListTy, isVarArg); 2023 return false; 2024 } 2025 2026 /// ParseAnonStructType - Parse an anonymous struct type, which is inlined into 2027 /// other structs. 2028 bool LLParser::ParseAnonStructType(Type *&Result, bool Packed) { 2029 SmallVector<Type*, 8> Elts; 2030 if (ParseStructBody(Elts)) return true; 2031 2032 Result = StructType::get(Context, Elts, Packed); 2033 return false; 2034 } 2035 2036 /// ParseStructDefinition - Parse a struct in a 'type' definition. 2037 bool LLParser::ParseStructDefinition(SMLoc TypeLoc, StringRef Name, 2038 std::pair<Type*, LocTy> &Entry, 2039 Type *&ResultTy) { 2040 // If the type was already defined, diagnose the redefinition. 2041 if (Entry.first && !Entry.second.isValid()) 2042 return Error(TypeLoc, "redefinition of type"); 2043 2044 // If we have opaque, just return without filling in the definition for the 2045 // struct. This counts as a definition as far as the .ll file goes. 2046 if (EatIfPresent(lltok::kw_opaque)) { 2047 // This type is being defined, so clear the location to indicate this. 2048 Entry.second = SMLoc(); 2049 2050 // If this type number has never been uttered, create it. 2051 if (!Entry.first) 2052 Entry.first = StructType::create(Context, Name); 2053 ResultTy = Entry.first; 2054 return false; 2055 } 2056 2057 // If the type starts with '<', then it is either a packed struct or a vector. 2058 bool isPacked = EatIfPresent(lltok::less); 2059 2060 // If we don't have a struct, then we have a random type alias, which we 2061 // accept for compatibility with old files. These types are not allowed to be 2062 // forward referenced and not allowed to be recursive. 2063 if (Lex.getKind() != lltok::lbrace) { 2064 if (Entry.first) 2065 return Error(TypeLoc, "forward references to non-struct type"); 2066 2067 ResultTy = nullptr; 2068 if (isPacked) 2069 return ParseArrayVectorType(ResultTy, true); 2070 return ParseType(ResultTy); 2071 } 2072 2073 // This type is being defined, so clear the location to indicate this. 2074 Entry.second = SMLoc(); 2075 2076 // If this type number has never been uttered, create it. 2077 if (!Entry.first) 2078 Entry.first = StructType::create(Context, Name); 2079 2080 StructType *STy = cast<StructType>(Entry.first); 2081 2082 SmallVector<Type*, 8> Body; 2083 if (ParseStructBody(Body) || 2084 (isPacked && ParseToken(lltok::greater, "expected '>' in packed struct"))) 2085 return true; 2086 2087 STy->setBody(Body, isPacked); 2088 ResultTy = STy; 2089 return false; 2090 } 2091 2092 2093 /// ParseStructType: Handles packed and unpacked types. </> parsed elsewhere. 2094 /// StructType 2095 /// ::= '{' '}' 2096 /// ::= '{' Type (',' Type)* '}' 2097 /// ::= '<' '{' '}' '>' 2098 /// ::= '<' '{' Type (',' Type)* '}' '>' 2099 bool LLParser::ParseStructBody(SmallVectorImpl<Type*> &Body) { 2100 assert(Lex.getKind() == lltok::lbrace); 2101 Lex.Lex(); // Consume the '{' 2102 2103 // Handle the empty struct. 2104 if (EatIfPresent(lltok::rbrace)) 2105 return false; 2106 2107 LocTy EltTyLoc = Lex.getLoc(); 2108 Type *Ty = nullptr; 2109 if (ParseType(Ty)) return true; 2110 Body.push_back(Ty); 2111 2112 if (!StructType::isValidElementType(Ty)) 2113 return Error(EltTyLoc, "invalid element type for struct"); 2114 2115 while (EatIfPresent(lltok::comma)) { 2116 EltTyLoc = Lex.getLoc(); 2117 if (ParseType(Ty)) return true; 2118 2119 if (!StructType::isValidElementType(Ty)) 2120 return Error(EltTyLoc, "invalid element type for struct"); 2121 2122 Body.push_back(Ty); 2123 } 2124 2125 return ParseToken(lltok::rbrace, "expected '}' at end of struct"); 2126 } 2127 2128 /// ParseArrayVectorType - Parse an array or vector type, assuming the first 2129 /// token has already been consumed. 2130 /// Type 2131 /// ::= '[' APSINTVAL 'x' Types ']' 2132 /// ::= '<' APSINTVAL 'x' Types '>' 2133 bool LLParser::ParseArrayVectorType(Type *&Result, bool isVector) { 2134 if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned() || 2135 Lex.getAPSIntVal().getBitWidth() > 64) 2136 return TokError("expected number in address space"); 2137 2138 LocTy SizeLoc = Lex.getLoc(); 2139 uint64_t Size = Lex.getAPSIntVal().getZExtValue(); 2140 Lex.Lex(); 2141 2142 if (ParseToken(lltok::kw_x, "expected 'x' after element count")) 2143 return true; 2144 2145 LocTy TypeLoc = Lex.getLoc(); 2146 Type *EltTy = nullptr; 2147 if (ParseType(EltTy)) return true; 2148 2149 if (ParseToken(isVector ? lltok::greater : lltok::rsquare, 2150 "expected end of sequential type")) 2151 return true; 2152 2153 if (isVector) { 2154 if (Size == 0) 2155 return Error(SizeLoc, "zero element vector is illegal"); 2156 if ((unsigned)Size != Size) 2157 return Error(SizeLoc, "size too large for vector"); 2158 if (!VectorType::isValidElementType(EltTy)) 2159 return Error(TypeLoc, "invalid vector element type"); 2160 Result = VectorType::get(EltTy, unsigned(Size)); 2161 } else { 2162 if (!ArrayType::isValidElementType(EltTy)) 2163 return Error(TypeLoc, "invalid array element type"); 2164 Result = ArrayType::get(EltTy, Size); 2165 } 2166 return false; 2167 } 2168 2169 //===----------------------------------------------------------------------===// 2170 // Function Semantic Analysis. 2171 //===----------------------------------------------------------------------===// 2172 2173 LLParser::PerFunctionState::PerFunctionState(LLParser &p, Function &f, 2174 int functionNumber) 2175 : P(p), F(f), FunctionNumber(functionNumber) { 2176 2177 // Insert unnamed arguments into the NumberedVals list. 2178 for (Function::arg_iterator AI = F.arg_begin(), E = F.arg_end(); 2179 AI != E; ++AI) 2180 if (!AI->hasName()) 2181 NumberedVals.push_back(AI); 2182 } 2183 2184 LLParser::PerFunctionState::~PerFunctionState() { 2185 // If there were any forward referenced non-basicblock values, delete them. 2186 for (std::map<std::string, std::pair<Value*, LocTy> >::iterator 2187 I = ForwardRefVals.begin(), E = ForwardRefVals.end(); I != E; ++I) 2188 if (!isa<BasicBlock>(I->second.first)) { 2189 I->second.first->replaceAllUsesWith( 2190 UndefValue::get(I->second.first->getType())); 2191 delete I->second.first; 2192 I->second.first = nullptr; 2193 } 2194 2195 for (std::map<unsigned, std::pair<Value*, LocTy> >::iterator 2196 I = ForwardRefValIDs.begin(), E = ForwardRefValIDs.end(); I != E; ++I) 2197 if (!isa<BasicBlock>(I->second.first)) { 2198 I->second.first->replaceAllUsesWith( 2199 UndefValue::get(I->second.first->getType())); 2200 delete I->second.first; 2201 I->second.first = nullptr; 2202 } 2203 } 2204 2205 bool LLParser::PerFunctionState::FinishFunction() { 2206 if (!ForwardRefVals.empty()) 2207 return P.Error(ForwardRefVals.begin()->second.second, 2208 "use of undefined value '%" + ForwardRefVals.begin()->first + 2209 "'"); 2210 if (!ForwardRefValIDs.empty()) 2211 return P.Error(ForwardRefValIDs.begin()->second.second, 2212 "use of undefined value '%" + 2213 Twine(ForwardRefValIDs.begin()->first) + "'"); 2214 return false; 2215 } 2216 2217 2218 /// GetVal - Get a value with the specified name or ID, creating a 2219 /// forward reference record if needed. This can return null if the value 2220 /// exists but does not have the right type. 2221 Value *LLParser::PerFunctionState::GetVal(const std::string &Name, 2222 Type *Ty, LocTy Loc) { 2223 // Look this name up in the normal function symbol table. 2224 Value *Val = F.getValueSymbolTable().lookup(Name); 2225 2226 // If this is a forward reference for the value, see if we already created a 2227 // forward ref record. 2228 if (!Val) { 2229 std::map<std::string, std::pair<Value*, LocTy> >::iterator 2230 I = ForwardRefVals.find(Name); 2231 if (I != ForwardRefVals.end()) 2232 Val = I->second.first; 2233 } 2234 2235 // If we have the value in the symbol table or fwd-ref table, return it. 2236 if (Val) { 2237 if (Val->getType() == Ty) return Val; 2238 if (Ty->isLabelTy()) 2239 P.Error(Loc, "'%" + Name + "' is not a basic block"); 2240 else 2241 P.Error(Loc, "'%" + Name + "' defined with type '" + 2242 getTypeString(Val->getType()) + "'"); 2243 return nullptr; 2244 } 2245 2246 // Don't make placeholders with invalid type. 2247 if (!Ty->isFirstClassType()) { 2248 P.Error(Loc, "invalid use of a non-first-class type"); 2249 return nullptr; 2250 } 2251 2252 // Otherwise, create a new forward reference for this value and remember it. 2253 Value *FwdVal; 2254 if (Ty->isLabelTy()) 2255 FwdVal = BasicBlock::Create(F.getContext(), Name, &F); 2256 else 2257 FwdVal = new Argument(Ty, Name); 2258 2259 ForwardRefVals[Name] = std::make_pair(FwdVal, Loc); 2260 return FwdVal; 2261 } 2262 2263 Value *LLParser::PerFunctionState::GetVal(unsigned ID, Type *Ty, 2264 LocTy Loc) { 2265 // Look this name up in the normal function symbol table. 2266 Value *Val = ID < NumberedVals.size() ? NumberedVals[ID] : nullptr; 2267 2268 // If this is a forward reference for the value, see if we already created a 2269 // forward ref record. 2270 if (!Val) { 2271 std::map<unsigned, std::pair<Value*, LocTy> >::iterator 2272 I = ForwardRefValIDs.find(ID); 2273 if (I != ForwardRefValIDs.end()) 2274 Val = I->second.first; 2275 } 2276 2277 // If we have the value in the symbol table or fwd-ref table, return it. 2278 if (Val) { 2279 if (Val->getType() == Ty) return Val; 2280 if (Ty->isLabelTy()) 2281 P.Error(Loc, "'%" + Twine(ID) + "' is not a basic block"); 2282 else 2283 P.Error(Loc, "'%" + Twine(ID) + "' defined with type '" + 2284 getTypeString(Val->getType()) + "'"); 2285 return nullptr; 2286 } 2287 2288 if (!Ty->isFirstClassType()) { 2289 P.Error(Loc, "invalid use of a non-first-class type"); 2290 return nullptr; 2291 } 2292 2293 // Otherwise, create a new forward reference for this value and remember it. 2294 Value *FwdVal; 2295 if (Ty->isLabelTy()) 2296 FwdVal = BasicBlock::Create(F.getContext(), "", &F); 2297 else 2298 FwdVal = new Argument(Ty); 2299 2300 ForwardRefValIDs[ID] = std::make_pair(FwdVal, Loc); 2301 return FwdVal; 2302 } 2303 2304 /// SetInstName - After an instruction is parsed and inserted into its 2305 /// basic block, this installs its name. 2306 bool LLParser::PerFunctionState::SetInstName(int NameID, 2307 const std::string &NameStr, 2308 LocTy NameLoc, Instruction *Inst) { 2309 // If this instruction has void type, it cannot have a name or ID specified. 2310 if (Inst->getType()->isVoidTy()) { 2311 if (NameID != -1 || !NameStr.empty()) 2312 return P.Error(NameLoc, "instructions returning void cannot have a name"); 2313 return false; 2314 } 2315 2316 // If this was a numbered instruction, verify that the instruction is the 2317 // expected value and resolve any forward references. 2318 if (NameStr.empty()) { 2319 // If neither a name nor an ID was specified, just use the next ID. 2320 if (NameID == -1) 2321 NameID = NumberedVals.size(); 2322 2323 if (unsigned(NameID) != NumberedVals.size()) 2324 return P.Error(NameLoc, "instruction expected to be numbered '%" + 2325 Twine(NumberedVals.size()) + "'"); 2326 2327 std::map<unsigned, std::pair<Value*, LocTy> >::iterator FI = 2328 ForwardRefValIDs.find(NameID); 2329 if (FI != ForwardRefValIDs.end()) { 2330 if (FI->second.first->getType() != Inst->getType()) 2331 return P.Error(NameLoc, "instruction forward referenced with type '" + 2332 getTypeString(FI->second.first->getType()) + "'"); 2333 FI->second.first->replaceAllUsesWith(Inst); 2334 delete FI->second.first; 2335 ForwardRefValIDs.erase(FI); 2336 } 2337 2338 NumberedVals.push_back(Inst); 2339 return false; 2340 } 2341 2342 // Otherwise, the instruction had a name. Resolve forward refs and set it. 2343 std::map<std::string, std::pair<Value*, LocTy> >::iterator 2344 FI = ForwardRefVals.find(NameStr); 2345 if (FI != ForwardRefVals.end()) { 2346 if (FI->second.first->getType() != Inst->getType()) 2347 return P.Error(NameLoc, "instruction forward referenced with type '" + 2348 getTypeString(FI->second.first->getType()) + "'"); 2349 FI->second.first->replaceAllUsesWith(Inst); 2350 delete FI->second.first; 2351 ForwardRefVals.erase(FI); 2352 } 2353 2354 // Set the name on the instruction. 2355 Inst->setName(NameStr); 2356 2357 if (Inst->getName() != NameStr) 2358 return P.Error(NameLoc, "multiple definition of local value named '" + 2359 NameStr + "'"); 2360 return false; 2361 } 2362 2363 /// GetBB - Get a basic block with the specified name or ID, creating a 2364 /// forward reference record if needed. 2365 BasicBlock *LLParser::PerFunctionState::GetBB(const std::string &Name, 2366 LocTy Loc) { 2367 return dyn_cast_or_null<BasicBlock>(GetVal(Name, 2368 Type::getLabelTy(F.getContext()), Loc)); 2369 } 2370 2371 BasicBlock *LLParser::PerFunctionState::GetBB(unsigned ID, LocTy Loc) { 2372 return dyn_cast_or_null<BasicBlock>(GetVal(ID, 2373 Type::getLabelTy(F.getContext()), Loc)); 2374 } 2375 2376 /// DefineBB - Define the specified basic block, which is either named or 2377 /// unnamed. If there is an error, this returns null otherwise it returns 2378 /// the block being defined. 2379 BasicBlock *LLParser::PerFunctionState::DefineBB(const std::string &Name, 2380 LocTy Loc) { 2381 BasicBlock *BB; 2382 if (Name.empty()) 2383 BB = GetBB(NumberedVals.size(), Loc); 2384 else 2385 BB = GetBB(Name, Loc); 2386 if (!BB) return nullptr; // Already diagnosed error. 2387 2388 // Move the block to the end of the function. Forward ref'd blocks are 2389 // inserted wherever they happen to be referenced. 2390 F.getBasicBlockList().splice(F.end(), F.getBasicBlockList(), BB); 2391 2392 // Remove the block from forward ref sets. 2393 if (Name.empty()) { 2394 ForwardRefValIDs.erase(NumberedVals.size()); 2395 NumberedVals.push_back(BB); 2396 } else { 2397 // BB forward references are already in the function symbol table. 2398 ForwardRefVals.erase(Name); 2399 } 2400 2401 return BB; 2402 } 2403 2404 //===----------------------------------------------------------------------===// 2405 // Constants. 2406 //===----------------------------------------------------------------------===// 2407 2408 /// ParseValID - Parse an abstract value that doesn't necessarily have a 2409 /// type implied. For example, if we parse "4" we don't know what integer type 2410 /// it has. The value will later be combined with its type and checked for 2411 /// sanity. PFS is used to convert function-local operands of metadata (since 2412 /// metadata operands are not just parsed here but also converted to values). 2413 /// PFS can be null when we are not parsing metadata values inside a function. 2414 bool LLParser::ParseValID(ValID &ID, PerFunctionState *PFS) { 2415 ID.Loc = Lex.getLoc(); 2416 switch (Lex.getKind()) { 2417 default: return TokError("expected value token"); 2418 case lltok::GlobalID: // @42 2419 ID.UIntVal = Lex.getUIntVal(); 2420 ID.Kind = ValID::t_GlobalID; 2421 break; 2422 case lltok::GlobalVar: // @foo 2423 ID.StrVal = Lex.getStrVal(); 2424 ID.Kind = ValID::t_GlobalName; 2425 break; 2426 case lltok::LocalVarID: // %42 2427 ID.UIntVal = Lex.getUIntVal(); 2428 ID.Kind = ValID::t_LocalID; 2429 break; 2430 case lltok::LocalVar: // %foo 2431 ID.StrVal = Lex.getStrVal(); 2432 ID.Kind = ValID::t_LocalName; 2433 break; 2434 case lltok::APSInt: 2435 ID.APSIntVal = Lex.getAPSIntVal(); 2436 ID.Kind = ValID::t_APSInt; 2437 break; 2438 case lltok::APFloat: 2439 ID.APFloatVal = Lex.getAPFloatVal(); 2440 ID.Kind = ValID::t_APFloat; 2441 break; 2442 case lltok::kw_true: 2443 ID.ConstantVal = ConstantInt::getTrue(Context); 2444 ID.Kind = ValID::t_Constant; 2445 break; 2446 case lltok::kw_false: 2447 ID.ConstantVal = ConstantInt::getFalse(Context); 2448 ID.Kind = ValID::t_Constant; 2449 break; 2450 case lltok::kw_null: ID.Kind = ValID::t_Null; break; 2451 case lltok::kw_undef: ID.Kind = ValID::t_Undef; break; 2452 case lltok::kw_zeroinitializer: ID.Kind = ValID::t_Zero; break; 2453 2454 case lltok::lbrace: { 2455 // ValID ::= '{' ConstVector '}' 2456 Lex.Lex(); 2457 SmallVector<Constant*, 16> Elts; 2458 if (ParseGlobalValueVector(Elts) || 2459 ParseToken(lltok::rbrace, "expected end of struct constant")) 2460 return true; 2461 2462 ID.ConstantStructElts = make_unique<Constant *[]>(Elts.size()); 2463 ID.UIntVal = Elts.size(); 2464 memcpy(ID.ConstantStructElts.get(), Elts.data(), 2465 Elts.size() * sizeof(Elts[0])); 2466 ID.Kind = ValID::t_ConstantStruct; 2467 return false; 2468 } 2469 case lltok::less: { 2470 // ValID ::= '<' ConstVector '>' --> Vector. 2471 // ValID ::= '<' '{' ConstVector '}' '>' --> Packed Struct. 2472 Lex.Lex(); 2473 bool isPackedStruct = EatIfPresent(lltok::lbrace); 2474 2475 SmallVector<Constant*, 16> Elts; 2476 LocTy FirstEltLoc = Lex.getLoc(); 2477 if (ParseGlobalValueVector(Elts) || 2478 (isPackedStruct && 2479 ParseToken(lltok::rbrace, "expected end of packed struct")) || 2480 ParseToken(lltok::greater, "expected end of constant")) 2481 return true; 2482 2483 if (isPackedStruct) { 2484 ID.ConstantStructElts = make_unique<Constant *[]>(Elts.size()); 2485 memcpy(ID.ConstantStructElts.get(), Elts.data(), 2486 Elts.size() * sizeof(Elts[0])); 2487 ID.UIntVal = Elts.size(); 2488 ID.Kind = ValID::t_PackedConstantStruct; 2489 return false; 2490 } 2491 2492 if (Elts.empty()) 2493 return Error(ID.Loc, "constant vector must not be empty"); 2494 2495 if (!Elts[0]->getType()->isIntegerTy() && 2496 !Elts[0]->getType()->isFloatingPointTy() && 2497 !Elts[0]->getType()->isPointerTy()) 2498 return Error(FirstEltLoc, 2499 "vector elements must have integer, pointer or floating point type"); 2500 2501 // Verify that all the vector elements have the same type. 2502 for (unsigned i = 1, e = Elts.size(); i != e; ++i) 2503 if (Elts[i]->getType() != Elts[0]->getType()) 2504 return Error(FirstEltLoc, 2505 "vector element #" + Twine(i) + 2506 " is not of type '" + getTypeString(Elts[0]->getType())); 2507 2508 ID.ConstantVal = ConstantVector::get(Elts); 2509 ID.Kind = ValID::t_Constant; 2510 return false; 2511 } 2512 case lltok::lsquare: { // Array Constant 2513 Lex.Lex(); 2514 SmallVector<Constant*, 16> Elts; 2515 LocTy FirstEltLoc = Lex.getLoc(); 2516 if (ParseGlobalValueVector(Elts) || 2517 ParseToken(lltok::rsquare, "expected end of array constant")) 2518 return true; 2519 2520 // Handle empty element. 2521 if (Elts.empty()) { 2522 // Use undef instead of an array because it's inconvenient to determine 2523 // the element type at this point, there being no elements to examine. 2524 ID.Kind = ValID::t_EmptyArray; 2525 return false; 2526 } 2527 2528 if (!Elts[0]->getType()->isFirstClassType()) 2529 return Error(FirstEltLoc, "invalid array element type: " + 2530 getTypeString(Elts[0]->getType())); 2531 2532 ArrayType *ATy = ArrayType::get(Elts[0]->getType(), Elts.size()); 2533 2534 // Verify all elements are correct type! 2535 for (unsigned i = 0, e = Elts.size(); i != e; ++i) { 2536 if (Elts[i]->getType() != Elts[0]->getType()) 2537 return Error(FirstEltLoc, 2538 "array element #" + Twine(i) + 2539 " is not of type '" + getTypeString(Elts[0]->getType())); 2540 } 2541 2542 ID.ConstantVal = ConstantArray::get(ATy, Elts); 2543 ID.Kind = ValID::t_Constant; 2544 return false; 2545 } 2546 case lltok::kw_c: // c "foo" 2547 Lex.Lex(); 2548 ID.ConstantVal = ConstantDataArray::getString(Context, Lex.getStrVal(), 2549 false); 2550 if (ParseToken(lltok::StringConstant, "expected string")) return true; 2551 ID.Kind = ValID::t_Constant; 2552 return false; 2553 2554 case lltok::kw_asm: { 2555 // ValID ::= 'asm' SideEffect? AlignStack? IntelDialect? STRINGCONSTANT ',' 2556 // STRINGCONSTANT 2557 bool HasSideEffect, AlignStack, AsmDialect; 2558 Lex.Lex(); 2559 if (ParseOptionalToken(lltok::kw_sideeffect, HasSideEffect) || 2560 ParseOptionalToken(lltok::kw_alignstack, AlignStack) || 2561 ParseOptionalToken(lltok::kw_inteldialect, AsmDialect) || 2562 ParseStringConstant(ID.StrVal) || 2563 ParseToken(lltok::comma, "expected comma in inline asm expression") || 2564 ParseToken(lltok::StringConstant, "expected constraint string")) 2565 return true; 2566 ID.StrVal2 = Lex.getStrVal(); 2567 ID.UIntVal = unsigned(HasSideEffect) | (unsigned(AlignStack)<<1) | 2568 (unsigned(AsmDialect)<<2); 2569 ID.Kind = ValID::t_InlineAsm; 2570 return false; 2571 } 2572 2573 case lltok::kw_blockaddress: { 2574 // ValID ::= 'blockaddress' '(' @foo ',' %bar ')' 2575 Lex.Lex(); 2576 2577 ValID Fn, Label; 2578 2579 if (ParseToken(lltok::lparen, "expected '(' in block address expression") || 2580 ParseValID(Fn) || 2581 ParseToken(lltok::comma, "expected comma in block address expression")|| 2582 ParseValID(Label) || 2583 ParseToken(lltok::rparen, "expected ')' in block address expression")) 2584 return true; 2585 2586 if (Fn.Kind != ValID::t_GlobalID && Fn.Kind != ValID::t_GlobalName) 2587 return Error(Fn.Loc, "expected function name in blockaddress"); 2588 if (Label.Kind != ValID::t_LocalID && Label.Kind != ValID::t_LocalName) 2589 return Error(Label.Loc, "expected basic block name in blockaddress"); 2590 2591 // Try to find the function (but skip it if it's forward-referenced). 2592 GlobalValue *GV = nullptr; 2593 if (Fn.Kind == ValID::t_GlobalID) { 2594 if (Fn.UIntVal < NumberedVals.size()) 2595 GV = NumberedVals[Fn.UIntVal]; 2596 } else if (!ForwardRefVals.count(Fn.StrVal)) { 2597 GV = M->getNamedValue(Fn.StrVal); 2598 } 2599 Function *F = nullptr; 2600 if (GV) { 2601 // Confirm that it's actually a function with a definition. 2602 if (!isa<Function>(GV)) 2603 return Error(Fn.Loc, "expected function name in blockaddress"); 2604 F = cast<Function>(GV); 2605 if (F->isDeclaration()) 2606 return Error(Fn.Loc, "cannot take blockaddress inside a declaration"); 2607 } 2608 2609 if (!F) { 2610 // Make a global variable as a placeholder for this reference. 2611 GlobalValue *&FwdRef = 2612 ForwardRefBlockAddresses.insert(std::make_pair( 2613 std::move(Fn), 2614 std::map<ValID, GlobalValue *>())) 2615 .first->second.insert(std::make_pair(std::move(Label), nullptr)) 2616 .first->second; 2617 if (!FwdRef) 2618 FwdRef = new GlobalVariable(*M, Type::getInt8Ty(Context), false, 2619 GlobalValue::InternalLinkage, nullptr, ""); 2620 ID.ConstantVal = FwdRef; 2621 ID.Kind = ValID::t_Constant; 2622 return false; 2623 } 2624 2625 // We found the function; now find the basic block. Don't use PFS, since we 2626 // might be inside a constant expression. 2627 BasicBlock *BB; 2628 if (BlockAddressPFS && F == &BlockAddressPFS->getFunction()) { 2629 if (Label.Kind == ValID::t_LocalID) 2630 BB = BlockAddressPFS->GetBB(Label.UIntVal, Label.Loc); 2631 else 2632 BB = BlockAddressPFS->GetBB(Label.StrVal, Label.Loc); 2633 if (!BB) 2634 return Error(Label.Loc, "referenced value is not a basic block"); 2635 } else { 2636 if (Label.Kind == ValID::t_LocalID) 2637 return Error(Label.Loc, "cannot take address of numeric label after " 2638 "the function is defined"); 2639 BB = dyn_cast_or_null<BasicBlock>( 2640 F->getValueSymbolTable().lookup(Label.StrVal)); 2641 if (!BB) 2642 return Error(Label.Loc, "referenced value is not a basic block"); 2643 } 2644 2645 ID.ConstantVal = BlockAddress::get(F, BB); 2646 ID.Kind = ValID::t_Constant; 2647 return false; 2648 } 2649 2650 case lltok::kw_trunc: 2651 case lltok::kw_zext: 2652 case lltok::kw_sext: 2653 case lltok::kw_fptrunc: 2654 case lltok::kw_fpext: 2655 case lltok::kw_bitcast: 2656 case lltok::kw_addrspacecast: 2657 case lltok::kw_uitofp: 2658 case lltok::kw_sitofp: 2659 case lltok::kw_fptoui: 2660 case lltok::kw_fptosi: 2661 case lltok::kw_inttoptr: 2662 case lltok::kw_ptrtoint: { 2663 unsigned Opc = Lex.getUIntVal(); 2664 Type *DestTy = nullptr; 2665 Constant *SrcVal; 2666 Lex.Lex(); 2667 if (ParseToken(lltok::lparen, "expected '(' after constantexpr cast") || 2668 ParseGlobalTypeAndValue(SrcVal) || 2669 ParseToken(lltok::kw_to, "expected 'to' in constantexpr cast") || 2670 ParseType(DestTy) || 2671 ParseToken(lltok::rparen, "expected ')' at end of constantexpr cast")) 2672 return true; 2673 if (!CastInst::castIsValid((Instruction::CastOps)Opc, SrcVal, DestTy)) 2674 return Error(ID.Loc, "invalid cast opcode for cast from '" + 2675 getTypeString(SrcVal->getType()) + "' to '" + 2676 getTypeString(DestTy) + "'"); 2677 ID.ConstantVal = ConstantExpr::getCast((Instruction::CastOps)Opc, 2678 SrcVal, DestTy); 2679 ID.Kind = ValID::t_Constant; 2680 return false; 2681 } 2682 case lltok::kw_extractvalue: { 2683 Lex.Lex(); 2684 Constant *Val; 2685 SmallVector<unsigned, 4> Indices; 2686 if (ParseToken(lltok::lparen, "expected '(' in extractvalue constantexpr")|| 2687 ParseGlobalTypeAndValue(Val) || 2688 ParseIndexList(Indices) || 2689 ParseToken(lltok::rparen, "expected ')' in extractvalue constantexpr")) 2690 return true; 2691 2692 if (!Val->getType()->isAggregateType()) 2693 return Error(ID.Loc, "extractvalue operand must be aggregate type"); 2694 if (!ExtractValueInst::getIndexedType(Val->getType(), Indices)) 2695 return Error(ID.Loc, "invalid indices for extractvalue"); 2696 ID.ConstantVal = ConstantExpr::getExtractValue(Val, Indices); 2697 ID.Kind = ValID::t_Constant; 2698 return false; 2699 } 2700 case lltok::kw_insertvalue: { 2701 Lex.Lex(); 2702 Constant *Val0, *Val1; 2703 SmallVector<unsigned, 4> Indices; 2704 if (ParseToken(lltok::lparen, "expected '(' in insertvalue constantexpr")|| 2705 ParseGlobalTypeAndValue(Val0) || 2706 ParseToken(lltok::comma, "expected comma in insertvalue constantexpr")|| 2707 ParseGlobalTypeAndValue(Val1) || 2708 ParseIndexList(Indices) || 2709 ParseToken(lltok::rparen, "expected ')' in insertvalue constantexpr")) 2710 return true; 2711 if (!Val0->getType()->isAggregateType()) 2712 return Error(ID.Loc, "insertvalue operand must be aggregate type"); 2713 Type *IndexedType = 2714 ExtractValueInst::getIndexedType(Val0->getType(), Indices); 2715 if (!IndexedType) 2716 return Error(ID.Loc, "invalid indices for insertvalue"); 2717 if (IndexedType != Val1->getType()) 2718 return Error(ID.Loc, "insertvalue operand and field disagree in type: '" + 2719 getTypeString(Val1->getType()) + 2720 "' instead of '" + getTypeString(IndexedType) + 2721 "'"); 2722 ID.ConstantVal = ConstantExpr::getInsertValue(Val0, Val1, Indices); 2723 ID.Kind = ValID::t_Constant; 2724 return false; 2725 } 2726 case lltok::kw_icmp: 2727 case lltok::kw_fcmp: { 2728 unsigned PredVal, Opc = Lex.getUIntVal(); 2729 Constant *Val0, *Val1; 2730 Lex.Lex(); 2731 if (ParseCmpPredicate(PredVal, Opc) || 2732 ParseToken(lltok::lparen, "expected '(' in compare constantexpr") || 2733 ParseGlobalTypeAndValue(Val0) || 2734 ParseToken(lltok::comma, "expected comma in compare constantexpr") || 2735 ParseGlobalTypeAndValue(Val1) || 2736 ParseToken(lltok::rparen, "expected ')' in compare constantexpr")) 2737 return true; 2738 2739 if (Val0->getType() != Val1->getType()) 2740 return Error(ID.Loc, "compare operands must have the same type"); 2741 2742 CmpInst::Predicate Pred = (CmpInst::Predicate)PredVal; 2743 2744 if (Opc == Instruction::FCmp) { 2745 if (!Val0->getType()->isFPOrFPVectorTy()) 2746 return Error(ID.Loc, "fcmp requires floating point operands"); 2747 ID.ConstantVal = ConstantExpr::getFCmp(Pred, Val0, Val1); 2748 } else { 2749 assert(Opc == Instruction::ICmp && "Unexpected opcode for CmpInst!"); 2750 if (!Val0->getType()->isIntOrIntVectorTy() && 2751 !Val0->getType()->getScalarType()->isPointerTy()) 2752 return Error(ID.Loc, "icmp requires pointer or integer operands"); 2753 ID.ConstantVal = ConstantExpr::getICmp(Pred, Val0, Val1); 2754 } 2755 ID.Kind = ValID::t_Constant; 2756 return false; 2757 } 2758 2759 // Binary Operators. 2760 case lltok::kw_add: 2761 case lltok::kw_fadd: 2762 case lltok::kw_sub: 2763 case lltok::kw_fsub: 2764 case lltok::kw_mul: 2765 case lltok::kw_fmul: 2766 case lltok::kw_udiv: 2767 case lltok::kw_sdiv: 2768 case lltok::kw_fdiv: 2769 case lltok::kw_urem: 2770 case lltok::kw_srem: 2771 case lltok::kw_frem: 2772 case lltok::kw_shl: 2773 case lltok::kw_lshr: 2774 case lltok::kw_ashr: { 2775 bool NUW = false; 2776 bool NSW = false; 2777 bool Exact = false; 2778 unsigned Opc = Lex.getUIntVal(); 2779 Constant *Val0, *Val1; 2780 Lex.Lex(); 2781 LocTy ModifierLoc = Lex.getLoc(); 2782 if (Opc == Instruction::Add || Opc == Instruction::Sub || 2783 Opc == Instruction::Mul || Opc == Instruction::Shl) { 2784 if (EatIfPresent(lltok::kw_nuw)) 2785 NUW = true; 2786 if (EatIfPresent(lltok::kw_nsw)) { 2787 NSW = true; 2788 if (EatIfPresent(lltok::kw_nuw)) 2789 NUW = true; 2790 } 2791 } else if (Opc == Instruction::SDiv || Opc == Instruction::UDiv || 2792 Opc == Instruction::LShr || Opc == Instruction::AShr) { 2793 if (EatIfPresent(lltok::kw_exact)) 2794 Exact = true; 2795 } 2796 if (ParseToken(lltok::lparen, "expected '(' in binary constantexpr") || 2797 ParseGlobalTypeAndValue(Val0) || 2798 ParseToken(lltok::comma, "expected comma in binary constantexpr") || 2799 ParseGlobalTypeAndValue(Val1) || 2800 ParseToken(lltok::rparen, "expected ')' in binary constantexpr")) 2801 return true; 2802 if (Val0->getType() != Val1->getType()) 2803 return Error(ID.Loc, "operands of constexpr must have same type"); 2804 if (!Val0->getType()->isIntOrIntVectorTy()) { 2805 if (NUW) 2806 return Error(ModifierLoc, "nuw only applies to integer operations"); 2807 if (NSW) 2808 return Error(ModifierLoc, "nsw only applies to integer operations"); 2809 } 2810 // Check that the type is valid for the operator. 2811 switch (Opc) { 2812 case Instruction::Add: 2813 case Instruction::Sub: 2814 case Instruction::Mul: 2815 case Instruction::UDiv: 2816 case Instruction::SDiv: 2817 case Instruction::URem: 2818 case Instruction::SRem: 2819 case Instruction::Shl: 2820 case Instruction::AShr: 2821 case Instruction::LShr: 2822 if (!Val0->getType()->isIntOrIntVectorTy()) 2823 return Error(ID.Loc, "constexpr requires integer operands"); 2824 break; 2825 case Instruction::FAdd: 2826 case Instruction::FSub: 2827 case Instruction::FMul: 2828 case Instruction::FDiv: 2829 case Instruction::FRem: 2830 if (!Val0->getType()->isFPOrFPVectorTy()) 2831 return Error(ID.Loc, "constexpr requires fp operands"); 2832 break; 2833 default: llvm_unreachable("Unknown binary operator!"); 2834 } 2835 unsigned Flags = 0; 2836 if (NUW) Flags |= OverflowingBinaryOperator::NoUnsignedWrap; 2837 if (NSW) Flags |= OverflowingBinaryOperator::NoSignedWrap; 2838 if (Exact) Flags |= PossiblyExactOperator::IsExact; 2839 Constant *C = ConstantExpr::get(Opc, Val0, Val1, Flags); 2840 ID.ConstantVal = C; 2841 ID.Kind = ValID::t_Constant; 2842 return false; 2843 } 2844 2845 // Logical Operations 2846 case lltok::kw_and: 2847 case lltok::kw_or: 2848 case lltok::kw_xor: { 2849 unsigned Opc = Lex.getUIntVal(); 2850 Constant *Val0, *Val1; 2851 Lex.Lex(); 2852 if (ParseToken(lltok::lparen, "expected '(' in logical constantexpr") || 2853 ParseGlobalTypeAndValue(Val0) || 2854 ParseToken(lltok::comma, "expected comma in logical constantexpr") || 2855 ParseGlobalTypeAndValue(Val1) || 2856 ParseToken(lltok::rparen, "expected ')' in logical constantexpr")) 2857 return true; 2858 if (Val0->getType() != Val1->getType()) 2859 return Error(ID.Loc, "operands of constexpr must have same type"); 2860 if (!Val0->getType()->isIntOrIntVectorTy()) 2861 return Error(ID.Loc, 2862 "constexpr requires integer or integer vector operands"); 2863 ID.ConstantVal = ConstantExpr::get(Opc, Val0, Val1); 2864 ID.Kind = ValID::t_Constant; 2865 return false; 2866 } 2867 2868 case lltok::kw_getelementptr: 2869 case lltok::kw_shufflevector: 2870 case lltok::kw_insertelement: 2871 case lltok::kw_extractelement: 2872 case lltok::kw_select: { 2873 unsigned Opc = Lex.getUIntVal(); 2874 SmallVector<Constant*, 16> Elts; 2875 bool InBounds = false; 2876 Type *Ty; 2877 Lex.Lex(); 2878 2879 if (Opc == Instruction::GetElementPtr) 2880 InBounds = EatIfPresent(lltok::kw_inbounds); 2881 2882 if (ParseToken(lltok::lparen, "expected '(' in constantexpr")) 2883 return true; 2884 2885 LocTy ExplicitTypeLoc = Lex.getLoc(); 2886 if (Opc == Instruction::GetElementPtr) { 2887 if (ParseType(Ty) || 2888 ParseToken(lltok::comma, "expected comma after getelementptr's type")) 2889 return true; 2890 } 2891 2892 if (ParseGlobalValueVector(Elts) || 2893 ParseToken(lltok::rparen, "expected ')' in constantexpr")) 2894 return true; 2895 2896 if (Opc == Instruction::GetElementPtr) { 2897 if (Elts.size() == 0 || 2898 !Elts[0]->getType()->getScalarType()->isPointerTy()) 2899 return Error(ID.Loc, "base of getelementptr must be a pointer"); 2900 2901 Type *BaseType = Elts[0]->getType(); 2902 auto *BasePointerType = cast<PointerType>(BaseType->getScalarType()); 2903 if (Ty != BasePointerType->getElementType()) 2904 return Error( 2905 ExplicitTypeLoc, 2906 "explicit pointee type doesn't match operand's pointee type"); 2907 2908 ArrayRef<Constant *> Indices(Elts.begin() + 1, Elts.end()); 2909 for (Constant *Val : Indices) { 2910 Type *ValTy = Val->getType(); 2911 if (!ValTy->getScalarType()->isIntegerTy()) 2912 return Error(ID.Loc, "getelementptr index must be an integer"); 2913 if (ValTy->isVectorTy() != BaseType->isVectorTy()) 2914 return Error(ID.Loc, "getelementptr index type missmatch"); 2915 if (ValTy->isVectorTy()) { 2916 unsigned ValNumEl = ValTy->getVectorNumElements(); 2917 unsigned PtrNumEl = BaseType->getVectorNumElements(); 2918 if (ValNumEl != PtrNumEl) 2919 return Error( 2920 ID.Loc, 2921 "getelementptr vector index has a wrong number of elements"); 2922 } 2923 } 2924 2925 SmallPtrSet<Type*, 4> Visited; 2926 if (!Indices.empty() && !Ty->isSized(&Visited)) 2927 return Error(ID.Loc, "base element of getelementptr must be sized"); 2928 2929 if (!GetElementPtrInst::getIndexedType(Ty, Indices)) 2930 return Error(ID.Loc, "invalid getelementptr indices"); 2931 ID.ConstantVal = 2932 ConstantExpr::getGetElementPtr(Ty, Elts[0], Indices, InBounds); 2933 } else if (Opc == Instruction::Select) { 2934 if (Elts.size() != 3) 2935 return Error(ID.Loc, "expected three operands to select"); 2936 if (const char *Reason = SelectInst::areInvalidOperands(Elts[0], Elts[1], 2937 Elts[2])) 2938 return Error(ID.Loc, Reason); 2939 ID.ConstantVal = ConstantExpr::getSelect(Elts[0], Elts[1], Elts[2]); 2940 } else if (Opc == Instruction::ShuffleVector) { 2941 if (Elts.size() != 3) 2942 return Error(ID.Loc, "expected three operands to shufflevector"); 2943 if (!ShuffleVectorInst::isValidOperands(Elts[0], Elts[1], Elts[2])) 2944 return Error(ID.Loc, "invalid operands to shufflevector"); 2945 ID.ConstantVal = 2946 ConstantExpr::getShuffleVector(Elts[0], Elts[1],Elts[2]); 2947 } else if (Opc == Instruction::ExtractElement) { 2948 if (Elts.size() != 2) 2949 return Error(ID.Loc, "expected two operands to extractelement"); 2950 if (!ExtractElementInst::isValidOperands(Elts[0], Elts[1])) 2951 return Error(ID.Loc, "invalid extractelement operands"); 2952 ID.ConstantVal = ConstantExpr::getExtractElement(Elts[0], Elts[1]); 2953 } else { 2954 assert(Opc == Instruction::InsertElement && "Unknown opcode"); 2955 if (Elts.size() != 3) 2956 return Error(ID.Loc, "expected three operands to insertelement"); 2957 if (!InsertElementInst::isValidOperands(Elts[0], Elts[1], Elts[2])) 2958 return Error(ID.Loc, "invalid insertelement operands"); 2959 ID.ConstantVal = 2960 ConstantExpr::getInsertElement(Elts[0], Elts[1],Elts[2]); 2961 } 2962 2963 ID.Kind = ValID::t_Constant; 2964 return false; 2965 } 2966 } 2967 2968 Lex.Lex(); 2969 return false; 2970 } 2971 2972 /// ParseGlobalValue - Parse a global value with the specified type. 2973 bool LLParser::ParseGlobalValue(Type *Ty, Constant *&C) { 2974 C = nullptr; 2975 ValID ID; 2976 Value *V = nullptr; 2977 bool Parsed = ParseValID(ID) || 2978 ConvertValIDToValue(Ty, ID, V, nullptr); 2979 if (V && !(C = dyn_cast<Constant>(V))) 2980 return Error(ID.Loc, "global values must be constants"); 2981 return Parsed; 2982 } 2983 2984 bool LLParser::ParseGlobalTypeAndValue(Constant *&V) { 2985 Type *Ty = nullptr; 2986 return ParseType(Ty) || 2987 ParseGlobalValue(Ty, V); 2988 } 2989 2990 bool LLParser::parseOptionalComdat(StringRef GlobalName, Comdat *&C) { 2991 C = nullptr; 2992 2993 LocTy KwLoc = Lex.getLoc(); 2994 if (!EatIfPresent(lltok::kw_comdat)) 2995 return false; 2996 2997 if (EatIfPresent(lltok::lparen)) { 2998 if (Lex.getKind() != lltok::ComdatVar) 2999 return TokError("expected comdat variable"); 3000 C = getComdat(Lex.getStrVal(), Lex.getLoc()); 3001 Lex.Lex(); 3002 if (ParseToken(lltok::rparen, "expected ')' after comdat var")) 3003 return true; 3004 } else { 3005 if (GlobalName.empty()) 3006 return TokError("comdat cannot be unnamed"); 3007 C = getComdat(GlobalName, KwLoc); 3008 } 3009 3010 return false; 3011 } 3012 3013 /// ParseGlobalValueVector 3014 /// ::= /*empty*/ 3015 /// ::= TypeAndValue (',' TypeAndValue)* 3016 bool LLParser::ParseGlobalValueVector(SmallVectorImpl<Constant *> &Elts) { 3017 // Empty list. 3018 if (Lex.getKind() == lltok::rbrace || 3019 Lex.getKind() == lltok::rsquare || 3020 Lex.getKind() == lltok::greater || 3021 Lex.getKind() == lltok::rparen) 3022 return false; 3023 3024 Constant *C; 3025 if (ParseGlobalTypeAndValue(C)) return true; 3026 Elts.push_back(C); 3027 3028 while (EatIfPresent(lltok::comma)) { 3029 if (ParseGlobalTypeAndValue(C)) return true; 3030 Elts.push_back(C); 3031 } 3032 3033 return false; 3034 } 3035 3036 bool LLParser::ParseMDTuple(MDNode *&MD, bool IsDistinct) { 3037 SmallVector<Metadata *, 16> Elts; 3038 if (ParseMDNodeVector(Elts)) 3039 return true; 3040 3041 MD = (IsDistinct ? MDTuple::getDistinct : MDTuple::get)(Context, Elts); 3042 return false; 3043 } 3044 3045 /// MDNode: 3046 /// ::= !{ ... } 3047 /// ::= !7 3048 /// ::= !DILocation(...) 3049 bool LLParser::ParseMDNode(MDNode *&N) { 3050 if (Lex.getKind() == lltok::MetadataVar) 3051 return ParseSpecializedMDNode(N); 3052 3053 return ParseToken(lltok::exclaim, "expected '!' here") || 3054 ParseMDNodeTail(N); 3055 } 3056 3057 bool LLParser::ParseMDNodeTail(MDNode *&N) { 3058 // !{ ... } 3059 if (Lex.getKind() == lltok::lbrace) 3060 return ParseMDTuple(N); 3061 3062 // !42 3063 return ParseMDNodeID(N); 3064 } 3065 3066 namespace { 3067 3068 /// Structure to represent an optional metadata field. 3069 template <class FieldTy> struct MDFieldImpl { 3070 typedef MDFieldImpl ImplTy; 3071 FieldTy Val; 3072 bool Seen; 3073 3074 void assign(FieldTy Val) { 3075 Seen = true; 3076 this->Val = std::move(Val); 3077 } 3078 3079 explicit MDFieldImpl(FieldTy Default) 3080 : Val(std::move(Default)), Seen(false) {} 3081 }; 3082 3083 struct MDUnsignedField : public MDFieldImpl<uint64_t> { 3084 uint64_t Max; 3085 3086 MDUnsignedField(uint64_t Default = 0, uint64_t Max = UINT64_MAX) 3087 : ImplTy(Default), Max(Max) {} 3088 }; 3089 struct LineField : public MDUnsignedField { 3090 LineField() : MDUnsignedField(0, UINT32_MAX) {} 3091 }; 3092 struct ColumnField : public MDUnsignedField { 3093 ColumnField() : MDUnsignedField(0, UINT16_MAX) {} 3094 }; 3095 struct DwarfTagField : public MDUnsignedField { 3096 DwarfTagField() : MDUnsignedField(0, dwarf::DW_TAG_hi_user) {} 3097 DwarfTagField(dwarf::Tag DefaultTag) 3098 : MDUnsignedField(DefaultTag, dwarf::DW_TAG_hi_user) {} 3099 }; 3100 struct DwarfAttEncodingField : public MDUnsignedField { 3101 DwarfAttEncodingField() : MDUnsignedField(0, dwarf::DW_ATE_hi_user) {} 3102 }; 3103 struct DwarfVirtualityField : public MDUnsignedField { 3104 DwarfVirtualityField() : MDUnsignedField(0, dwarf::DW_VIRTUALITY_max) {} 3105 }; 3106 struct DwarfLangField : public MDUnsignedField { 3107 DwarfLangField() : MDUnsignedField(0, dwarf::DW_LANG_hi_user) {} 3108 }; 3109 3110 struct DIFlagField : public MDUnsignedField { 3111 DIFlagField() : MDUnsignedField(0, UINT32_MAX) {} 3112 }; 3113 3114 struct MDSignedField : public MDFieldImpl<int64_t> { 3115 int64_t Min; 3116 int64_t Max; 3117 3118 MDSignedField(int64_t Default = 0) 3119 : ImplTy(Default), Min(INT64_MIN), Max(INT64_MAX) {} 3120 MDSignedField(int64_t Default, int64_t Min, int64_t Max) 3121 : ImplTy(Default), Min(Min), Max(Max) {} 3122 }; 3123 3124 struct MDBoolField : public MDFieldImpl<bool> { 3125 MDBoolField(bool Default = false) : ImplTy(Default) {} 3126 }; 3127 struct MDField : public MDFieldImpl<Metadata *> { 3128 bool AllowNull; 3129 3130 MDField(bool AllowNull = true) : ImplTy(nullptr), AllowNull(AllowNull) {} 3131 }; 3132 struct MDConstant : public MDFieldImpl<ConstantAsMetadata *> { 3133 MDConstant() : ImplTy(nullptr) {} 3134 }; 3135 struct MDStringField : public MDFieldImpl<MDString *> { 3136 bool AllowEmpty; 3137 MDStringField(bool AllowEmpty = true) 3138 : ImplTy(nullptr), AllowEmpty(AllowEmpty) {} 3139 }; 3140 struct MDFieldList : public MDFieldImpl<SmallVector<Metadata *, 4>> { 3141 MDFieldList() : ImplTy(SmallVector<Metadata *, 4>()) {} 3142 }; 3143 3144 } // end namespace 3145 3146 namespace llvm { 3147 3148 template <> 3149 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, 3150 MDUnsignedField &Result) { 3151 if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned()) 3152 return TokError("expected unsigned integer"); 3153 3154 auto &U = Lex.getAPSIntVal(); 3155 if (U.ugt(Result.Max)) 3156 return TokError("value for '" + Name + "' too large, limit is " + 3157 Twine(Result.Max)); 3158 Result.assign(U.getZExtValue()); 3159 assert(Result.Val <= Result.Max && "Expected value in range"); 3160 Lex.Lex(); 3161 return false; 3162 } 3163 3164 template <> 3165 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, LineField &Result) { 3166 return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); 3167 } 3168 template <> 3169 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, ColumnField &Result) { 3170 return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); 3171 } 3172 3173 template <> 3174 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) { 3175 if (Lex.getKind() == lltok::APSInt) 3176 return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); 3177 3178 if (Lex.getKind() != lltok::DwarfTag) 3179 return TokError("expected DWARF tag"); 3180 3181 unsigned Tag = dwarf::getTag(Lex.getStrVal()); 3182 if (Tag == dwarf::DW_TAG_invalid) 3183 return TokError("invalid DWARF tag" + Twine(" '") + Lex.getStrVal() + "'"); 3184 assert(Tag <= Result.Max && "Expected valid DWARF tag"); 3185 3186 Result.assign(Tag); 3187 Lex.Lex(); 3188 return false; 3189 } 3190 3191 template <> 3192 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, 3193 DwarfVirtualityField &Result) { 3194 if (Lex.getKind() == lltok::APSInt) 3195 return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); 3196 3197 if (Lex.getKind() != lltok::DwarfVirtuality) 3198 return TokError("expected DWARF virtuality code"); 3199 3200 unsigned Virtuality = dwarf::getVirtuality(Lex.getStrVal()); 3201 if (!Virtuality) 3202 return TokError("invalid DWARF virtuality code" + Twine(" '") + 3203 Lex.getStrVal() + "'"); 3204 assert(Virtuality <= Result.Max && "Expected valid DWARF virtuality code"); 3205 Result.assign(Virtuality); 3206 Lex.Lex(); 3207 return false; 3208 } 3209 3210 template <> 3211 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfLangField &Result) { 3212 if (Lex.getKind() == lltok::APSInt) 3213 return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); 3214 3215 if (Lex.getKind() != lltok::DwarfLang) 3216 return TokError("expected DWARF language"); 3217 3218 unsigned Lang = dwarf::getLanguage(Lex.getStrVal()); 3219 if (!Lang) 3220 return TokError("invalid DWARF language" + Twine(" '") + Lex.getStrVal() + 3221 "'"); 3222 assert(Lang <= Result.Max && "Expected valid DWARF language"); 3223 Result.assign(Lang); 3224 Lex.Lex(); 3225 return false; 3226 } 3227 3228 template <> 3229 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, 3230 DwarfAttEncodingField &Result) { 3231 if (Lex.getKind() == lltok::APSInt) 3232 return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); 3233 3234 if (Lex.getKind() != lltok::DwarfAttEncoding) 3235 return TokError("expected DWARF type attribute encoding"); 3236 3237 unsigned Encoding = dwarf::getAttributeEncoding(Lex.getStrVal()); 3238 if (!Encoding) 3239 return TokError("invalid DWARF type attribute encoding" + Twine(" '") + 3240 Lex.getStrVal() + "'"); 3241 assert(Encoding <= Result.Max && "Expected valid DWARF language"); 3242 Result.assign(Encoding); 3243 Lex.Lex(); 3244 return false; 3245 } 3246 3247 /// DIFlagField 3248 /// ::= uint32 3249 /// ::= DIFlagVector 3250 /// ::= DIFlagVector '|' DIFlagFwdDecl '|' uint32 '|' DIFlagPublic 3251 template <> 3252 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DIFlagField &Result) { 3253 assert(Result.Max == UINT32_MAX && "Expected only 32-bits"); 3254 3255 // Parser for a single flag. 3256 auto parseFlag = [&](unsigned &Val) { 3257 if (Lex.getKind() == lltok::APSInt && !Lex.getAPSIntVal().isSigned()) 3258 return ParseUInt32(Val); 3259 3260 if (Lex.getKind() != lltok::DIFlag) 3261 return TokError("expected debug info flag"); 3262 3263 Val = DINode::getFlag(Lex.getStrVal()); 3264 if (!Val) 3265 return TokError(Twine("invalid debug info flag flag '") + 3266 Lex.getStrVal() + "'"); 3267 Lex.Lex(); 3268 return false; 3269 }; 3270 3271 // Parse the flags and combine them together. 3272 unsigned Combined = 0; 3273 do { 3274 unsigned Val; 3275 if (parseFlag(Val)) 3276 return true; 3277 Combined |= Val; 3278 } while (EatIfPresent(lltok::bar)); 3279 3280 Result.assign(Combined); 3281 return false; 3282 } 3283 3284 template <> 3285 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, 3286 MDSignedField &Result) { 3287 if (Lex.getKind() != lltok::APSInt) 3288 return TokError("expected signed integer"); 3289 3290 auto &S = Lex.getAPSIntVal(); 3291 if (S < Result.Min) 3292 return TokError("value for '" + Name + "' too small, limit is " + 3293 Twine(Result.Min)); 3294 if (S > Result.Max) 3295 return TokError("value for '" + Name + "' too large, limit is " + 3296 Twine(Result.Max)); 3297 Result.assign(S.getExtValue()); 3298 assert(Result.Val >= Result.Min && "Expected value in range"); 3299 assert(Result.Val <= Result.Max && "Expected value in range"); 3300 Lex.Lex(); 3301 return false; 3302 } 3303 3304 template <> 3305 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDBoolField &Result) { 3306 switch (Lex.getKind()) { 3307 default: 3308 return TokError("expected 'true' or 'false'"); 3309 case lltok::kw_true: 3310 Result.assign(true); 3311 break; 3312 case lltok::kw_false: 3313 Result.assign(false); 3314 break; 3315 } 3316 Lex.Lex(); 3317 return false; 3318 } 3319 3320 template <> 3321 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDField &Result) { 3322 if (Lex.getKind() == lltok::kw_null) { 3323 if (!Result.AllowNull) 3324 return TokError("'" + Name + "' cannot be null"); 3325 Lex.Lex(); 3326 Result.assign(nullptr); 3327 return false; 3328 } 3329 3330 Metadata *MD; 3331 if (ParseMetadata(MD, nullptr)) 3332 return true; 3333 3334 Result.assign(MD); 3335 return false; 3336 } 3337 3338 template <> 3339 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDConstant &Result) { 3340 Metadata *MD; 3341 if (ParseValueAsMetadata(MD, "expected constant", nullptr)) 3342 return true; 3343 3344 Result.assign(cast<ConstantAsMetadata>(MD)); 3345 return false; 3346 } 3347 3348 template <> 3349 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result) { 3350 LocTy ValueLoc = Lex.getLoc(); 3351 std::string S; 3352 if (ParseStringConstant(S)) 3353 return true; 3354 3355 if (!Result.AllowEmpty && S.empty()) 3356 return Error(ValueLoc, "'" + Name + "' cannot be empty"); 3357 3358 Result.assign(S.empty() ? nullptr : MDString::get(Context, S)); 3359 return false; 3360 } 3361 3362 template <> 3363 bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDFieldList &Result) { 3364 SmallVector<Metadata *, 4> MDs; 3365 if (ParseMDNodeVector(MDs)) 3366 return true; 3367 3368 Result.assign(std::move(MDs)); 3369 return false; 3370 } 3371 3372 } // end namespace llvm 3373 3374 template <class ParserTy> 3375 bool LLParser::ParseMDFieldsImplBody(ParserTy parseField) { 3376 do { 3377 if (Lex.getKind() != lltok::LabelStr) 3378 return TokError("expected field label here"); 3379 3380 if (parseField()) 3381 return true; 3382 } while (EatIfPresent(lltok::comma)); 3383 3384 return false; 3385 } 3386 3387 template <class ParserTy> 3388 bool LLParser::ParseMDFieldsImpl(ParserTy parseField, LocTy &ClosingLoc) { 3389 assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata type name"); 3390 Lex.Lex(); 3391 3392 if (ParseToken(lltok::lparen, "expected '(' here")) 3393 return true; 3394 if (Lex.getKind() != lltok::rparen) 3395 if (ParseMDFieldsImplBody(parseField)) 3396 return true; 3397 3398 ClosingLoc = Lex.getLoc(); 3399 return ParseToken(lltok::rparen, "expected ')' here"); 3400 } 3401 3402 template <class FieldTy> 3403 bool LLParser::ParseMDField(StringRef Name, FieldTy &Result) { 3404 if (Result.Seen) 3405 return TokError("field '" + Name + "' cannot be specified more than once"); 3406 3407 LocTy Loc = Lex.getLoc(); 3408 Lex.Lex(); 3409 return ParseMDField(Loc, Name, Result); 3410 } 3411 3412 bool LLParser::ParseSpecializedMDNode(MDNode *&N, bool IsDistinct) { 3413 assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata type name"); 3414 3415 #define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS) \ 3416 if (Lex.getStrVal() == #CLASS) \ 3417 return Parse##CLASS(N, IsDistinct); 3418 #include "llvm/IR/Metadata.def" 3419 3420 return TokError("expected metadata type"); 3421 } 3422 3423 #define DECLARE_FIELD(NAME, TYPE, INIT) TYPE NAME INIT 3424 #define NOP_FIELD(NAME, TYPE, INIT) 3425 #define REQUIRE_FIELD(NAME, TYPE, INIT) \ 3426 if (!NAME.Seen) \ 3427 return Error(ClosingLoc, "missing required field '" #NAME "'"); 3428 #define PARSE_MD_FIELD(NAME, TYPE, DEFAULT) \ 3429 if (Lex.getStrVal() == #NAME) \ 3430 return ParseMDField(#NAME, NAME); 3431 #define PARSE_MD_FIELDS() \ 3432 VISIT_MD_FIELDS(DECLARE_FIELD, DECLARE_FIELD) \ 3433 do { \ 3434 LocTy ClosingLoc; \ 3435 if (ParseMDFieldsImpl([&]() -> bool { \ 3436 VISIT_MD_FIELDS(PARSE_MD_FIELD, PARSE_MD_FIELD) \ 3437 return TokError(Twine("invalid field '") + Lex.getStrVal() + "'"); \ 3438 }, ClosingLoc)) \ 3439 return true; \ 3440 VISIT_MD_FIELDS(NOP_FIELD, REQUIRE_FIELD) \ 3441 } while (false) 3442 #define GET_OR_DISTINCT(CLASS, ARGS) \ 3443 (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS) 3444 3445 /// ParseDILocationFields: 3446 /// ::= !DILocation(line: 43, column: 8, scope: !5, inlinedAt: !6) 3447 bool LLParser::ParseDILocation(MDNode *&Result, bool IsDistinct) { 3448 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3449 OPTIONAL(line, LineField, ); \ 3450 OPTIONAL(column, ColumnField, ); \ 3451 REQUIRED(scope, MDField, (/* AllowNull */ false)); \ 3452 OPTIONAL(inlinedAt, MDField, ); 3453 PARSE_MD_FIELDS(); 3454 #undef VISIT_MD_FIELDS 3455 3456 Result = GET_OR_DISTINCT( 3457 DILocation, (Context, line.Val, column.Val, scope.Val, inlinedAt.Val)); 3458 return false; 3459 } 3460 3461 /// ParseGenericDINode: 3462 /// ::= !GenericDINode(tag: 15, header: "...", operands: {...}) 3463 bool LLParser::ParseGenericDINode(MDNode *&Result, bool IsDistinct) { 3464 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3465 REQUIRED(tag, DwarfTagField, ); \ 3466 OPTIONAL(header, MDStringField, ); \ 3467 OPTIONAL(operands, MDFieldList, ); 3468 PARSE_MD_FIELDS(); 3469 #undef VISIT_MD_FIELDS 3470 3471 Result = GET_OR_DISTINCT(GenericDINode, 3472 (Context, tag.Val, header.Val, operands.Val)); 3473 return false; 3474 } 3475 3476 /// ParseDISubrange: 3477 /// ::= !DISubrange(count: 30, lowerBound: 2) 3478 bool LLParser::ParseDISubrange(MDNode *&Result, bool IsDistinct) { 3479 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3480 REQUIRED(count, MDSignedField, (-1, -1, INT64_MAX)); \ 3481 OPTIONAL(lowerBound, MDSignedField, ); 3482 PARSE_MD_FIELDS(); 3483 #undef VISIT_MD_FIELDS 3484 3485 Result = GET_OR_DISTINCT(DISubrange, (Context, count.Val, lowerBound.Val)); 3486 return false; 3487 } 3488 3489 /// ParseDIEnumerator: 3490 /// ::= !DIEnumerator(value: 30, name: "SomeKind") 3491 bool LLParser::ParseDIEnumerator(MDNode *&Result, bool IsDistinct) { 3492 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3493 REQUIRED(name, MDStringField, ); \ 3494 REQUIRED(value, MDSignedField, ); 3495 PARSE_MD_FIELDS(); 3496 #undef VISIT_MD_FIELDS 3497 3498 Result = GET_OR_DISTINCT(DIEnumerator, (Context, value.Val, name.Val)); 3499 return false; 3500 } 3501 3502 /// ParseDIBasicType: 3503 /// ::= !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32) 3504 bool LLParser::ParseDIBasicType(MDNode *&Result, bool IsDistinct) { 3505 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3506 OPTIONAL(tag, DwarfTagField, (dwarf::DW_TAG_base_type)); \ 3507 OPTIONAL(name, MDStringField, ); \ 3508 OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \ 3509 OPTIONAL(align, MDUnsignedField, (0, UINT64_MAX)); \ 3510 OPTIONAL(encoding, DwarfAttEncodingField, ); 3511 PARSE_MD_FIELDS(); 3512 #undef VISIT_MD_FIELDS 3513 3514 Result = GET_OR_DISTINCT(DIBasicType, (Context, tag.Val, name.Val, size.Val, 3515 align.Val, encoding.Val)); 3516 return false; 3517 } 3518 3519 /// ParseDIDerivedType: 3520 /// ::= !DIDerivedType(tag: DW_TAG_pointer_type, name: "int", file: !0, 3521 /// line: 7, scope: !1, baseType: !2, size: 32, 3522 /// align: 32, offset: 0, flags: 0, extraData: !3) 3523 bool LLParser::ParseDIDerivedType(MDNode *&Result, bool IsDistinct) { 3524 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3525 REQUIRED(tag, DwarfTagField, ); \ 3526 OPTIONAL(name, MDStringField, ); \ 3527 OPTIONAL(file, MDField, ); \ 3528 OPTIONAL(line, LineField, ); \ 3529 OPTIONAL(scope, MDField, ); \ 3530 REQUIRED(baseType, MDField, ); \ 3531 OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \ 3532 OPTIONAL(align, MDUnsignedField, (0, UINT64_MAX)); \ 3533 OPTIONAL(offset, MDUnsignedField, (0, UINT64_MAX)); \ 3534 OPTIONAL(flags, DIFlagField, ); \ 3535 OPTIONAL(extraData, MDField, ); 3536 PARSE_MD_FIELDS(); 3537 #undef VISIT_MD_FIELDS 3538 3539 Result = GET_OR_DISTINCT(DIDerivedType, 3540 (Context, tag.Val, name.Val, file.Val, line.Val, 3541 scope.Val, baseType.Val, size.Val, align.Val, 3542 offset.Val, flags.Val, extraData.Val)); 3543 return false; 3544 } 3545 3546 bool LLParser::ParseDICompositeType(MDNode *&Result, bool IsDistinct) { 3547 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3548 REQUIRED(tag, DwarfTagField, ); \ 3549 OPTIONAL(name, MDStringField, ); \ 3550 OPTIONAL(file, MDField, ); \ 3551 OPTIONAL(line, LineField, ); \ 3552 OPTIONAL(scope, MDField, ); \ 3553 OPTIONAL(baseType, MDField, ); \ 3554 OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \ 3555 OPTIONAL(align, MDUnsignedField, (0, UINT64_MAX)); \ 3556 OPTIONAL(offset, MDUnsignedField, (0, UINT64_MAX)); \ 3557 OPTIONAL(flags, DIFlagField, ); \ 3558 OPTIONAL(elements, MDField, ); \ 3559 OPTIONAL(runtimeLang, DwarfLangField, ); \ 3560 OPTIONAL(vtableHolder, MDField, ); \ 3561 OPTIONAL(templateParams, MDField, ); \ 3562 OPTIONAL(identifier, MDStringField, ); 3563 PARSE_MD_FIELDS(); 3564 #undef VISIT_MD_FIELDS 3565 3566 Result = GET_OR_DISTINCT( 3567 DICompositeType, 3568 (Context, tag.Val, name.Val, file.Val, line.Val, scope.Val, baseType.Val, 3569 size.Val, align.Val, offset.Val, flags.Val, elements.Val, 3570 runtimeLang.Val, vtableHolder.Val, templateParams.Val, identifier.Val)); 3571 return false; 3572 } 3573 3574 bool LLParser::ParseDISubroutineType(MDNode *&Result, bool IsDistinct) { 3575 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3576 OPTIONAL(flags, DIFlagField, ); \ 3577 REQUIRED(types, MDField, ); 3578 PARSE_MD_FIELDS(); 3579 #undef VISIT_MD_FIELDS 3580 3581 Result = GET_OR_DISTINCT(DISubroutineType, (Context, flags.Val, types.Val)); 3582 return false; 3583 } 3584 3585 /// ParseDIFileType: 3586 /// ::= !DIFileType(filename: "path/to/file", directory: "/path/to/dir") 3587 bool LLParser::ParseDIFile(MDNode *&Result, bool IsDistinct) { 3588 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3589 REQUIRED(filename, MDStringField, ); \ 3590 REQUIRED(directory, MDStringField, ); 3591 PARSE_MD_FIELDS(); 3592 #undef VISIT_MD_FIELDS 3593 3594 Result = GET_OR_DISTINCT(DIFile, (Context, filename.Val, directory.Val)); 3595 return false; 3596 } 3597 3598 /// ParseDICompileUnit: 3599 /// ::= !DICompileUnit(language: DW_LANG_C99, file: !0, producer: "clang", 3600 /// isOptimized: true, flags: "-O2", runtimeVersion: 1, 3601 /// splitDebugFilename: "abc.debug", emissionKind: 1, 3602 /// enums: !1, retainedTypes: !2, subprograms: !3, 3603 /// globals: !4, imports: !5, dwoId: 0x0abcd) 3604 bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { 3605 if (!IsDistinct) 3606 return Lex.Error("missing 'distinct', required for !DICompileUnit"); 3607 3608 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3609 REQUIRED(language, DwarfLangField, ); \ 3610 REQUIRED(file, MDField, (/* AllowNull */ false)); \ 3611 OPTIONAL(producer, MDStringField, ); \ 3612 OPTIONAL(isOptimized, MDBoolField, ); \ 3613 OPTIONAL(flags, MDStringField, ); \ 3614 OPTIONAL(runtimeVersion, MDUnsignedField, (0, UINT32_MAX)); \ 3615 OPTIONAL(splitDebugFilename, MDStringField, ); \ 3616 OPTIONAL(emissionKind, MDUnsignedField, (0, UINT32_MAX)); \ 3617 OPTIONAL(enums, MDField, ); \ 3618 OPTIONAL(retainedTypes, MDField, ); \ 3619 OPTIONAL(subprograms, MDField, ); \ 3620 OPTIONAL(globals, MDField, ); \ 3621 OPTIONAL(imports, MDField, ); \ 3622 OPTIONAL(dwoId, MDUnsignedField, ); 3623 PARSE_MD_FIELDS(); 3624 #undef VISIT_MD_FIELDS 3625 3626 Result = DICompileUnit::getDistinct( 3627 Context, language.Val, file.Val, producer.Val, isOptimized.Val, flags.Val, 3628 runtimeVersion.Val, splitDebugFilename.Val, emissionKind.Val, enums.Val, 3629 retainedTypes.Val, subprograms.Val, globals.Val, imports.Val, dwoId.Val); 3630 return false; 3631 } 3632 3633 /// ParseDISubprogram: 3634 /// ::= !DISubprogram(scope: !0, name: "foo", linkageName: "_Zfoo", 3635 /// file: !1, line: 7, type: !2, isLocal: false, 3636 /// isDefinition: true, scopeLine: 8, containingType: !3, 3637 /// virtuality: DW_VIRTUALTIY_pure_virtual, 3638 /// virtualIndex: 10, flags: 11, 3639 /// isOptimized: false, function: void ()* @_Z3foov, 3640 /// templateParams: !4, declaration: !5, variables: !6) 3641 bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) { 3642 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3643 OPTIONAL(scope, MDField, ); \ 3644 OPTIONAL(name, MDStringField, ); \ 3645 OPTIONAL(linkageName, MDStringField, ); \ 3646 OPTIONAL(file, MDField, ); \ 3647 OPTIONAL(line, LineField, ); \ 3648 OPTIONAL(type, MDField, ); \ 3649 OPTIONAL(isLocal, MDBoolField, ); \ 3650 OPTIONAL(isDefinition, MDBoolField, (true)); \ 3651 OPTIONAL(scopeLine, LineField, ); \ 3652 OPTIONAL(containingType, MDField, ); \ 3653 OPTIONAL(virtuality, DwarfVirtualityField, ); \ 3654 OPTIONAL(virtualIndex, MDUnsignedField, (0, UINT32_MAX)); \ 3655 OPTIONAL(flags, DIFlagField, ); \ 3656 OPTIONAL(isOptimized, MDBoolField, ); \ 3657 OPTIONAL(function, MDConstant, ); \ 3658 OPTIONAL(templateParams, MDField, ); \ 3659 OPTIONAL(declaration, MDField, ); \ 3660 OPTIONAL(variables, MDField, ); 3661 PARSE_MD_FIELDS(); 3662 #undef VISIT_MD_FIELDS 3663 3664 Result = GET_OR_DISTINCT( 3665 DISubprogram, (Context, scope.Val, name.Val, linkageName.Val, file.Val, 3666 line.Val, type.Val, isLocal.Val, isDefinition.Val, 3667 scopeLine.Val, containingType.Val, virtuality.Val, 3668 virtualIndex.Val, flags.Val, isOptimized.Val, function.Val, 3669 templateParams.Val, declaration.Val, variables.Val)); 3670 return false; 3671 } 3672 3673 /// ParseDILexicalBlock: 3674 /// ::= !DILexicalBlock(scope: !0, file: !2, line: 7, column: 9) 3675 bool LLParser::ParseDILexicalBlock(MDNode *&Result, bool IsDistinct) { 3676 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3677 REQUIRED(scope, MDField, (/* AllowNull */ false)); \ 3678 OPTIONAL(file, MDField, ); \ 3679 OPTIONAL(line, LineField, ); \ 3680 OPTIONAL(column, ColumnField, ); 3681 PARSE_MD_FIELDS(); 3682 #undef VISIT_MD_FIELDS 3683 3684 Result = GET_OR_DISTINCT( 3685 DILexicalBlock, (Context, scope.Val, file.Val, line.Val, column.Val)); 3686 return false; 3687 } 3688 3689 /// ParseDILexicalBlockFile: 3690 /// ::= !DILexicalBlockFile(scope: !0, file: !2, discriminator: 9) 3691 bool LLParser::ParseDILexicalBlockFile(MDNode *&Result, bool IsDistinct) { 3692 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3693 REQUIRED(scope, MDField, (/* AllowNull */ false)); \ 3694 OPTIONAL(file, MDField, ); \ 3695 REQUIRED(discriminator, MDUnsignedField, (0, UINT32_MAX)); 3696 PARSE_MD_FIELDS(); 3697 #undef VISIT_MD_FIELDS 3698 3699 Result = GET_OR_DISTINCT(DILexicalBlockFile, 3700 (Context, scope.Val, file.Val, discriminator.Val)); 3701 return false; 3702 } 3703 3704 /// ParseDINamespace: 3705 /// ::= !DINamespace(scope: !0, file: !2, name: "SomeNamespace", line: 9) 3706 bool LLParser::ParseDINamespace(MDNode *&Result, bool IsDistinct) { 3707 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3708 REQUIRED(scope, MDField, ); \ 3709 OPTIONAL(file, MDField, ); \ 3710 OPTIONAL(name, MDStringField, ); \ 3711 OPTIONAL(line, LineField, ); 3712 PARSE_MD_FIELDS(); 3713 #undef VISIT_MD_FIELDS 3714 3715 Result = GET_OR_DISTINCT(DINamespace, 3716 (Context, scope.Val, file.Val, name.Val, line.Val)); 3717 return false; 3718 } 3719 3720 /// ParseDIModule: 3721 /// ::= !DIModule(scope: !0, name: "SomeModule", configMacros: "-DNDEBUG", 3722 /// includePath: "/usr/include", isysroot: "/") 3723 bool LLParser::ParseDIModule(MDNode *&Result, bool IsDistinct) { 3724 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3725 REQUIRED(scope, MDField, ); \ 3726 REQUIRED(name, MDStringField, ); \ 3727 OPTIONAL(configMacros, MDStringField, ); \ 3728 OPTIONAL(includePath, MDStringField, ); \ 3729 OPTIONAL(isysroot, MDStringField, ); 3730 PARSE_MD_FIELDS(); 3731 #undef VISIT_MD_FIELDS 3732 3733 Result = GET_OR_DISTINCT(DIModule, (Context, scope.Val, name.Val, 3734 configMacros.Val, includePath.Val, isysroot.Val)); 3735 return false; 3736 } 3737 3738 /// ParseDITemplateTypeParameter: 3739 /// ::= !DITemplateTypeParameter(name: "Ty", type: !1) 3740 bool LLParser::ParseDITemplateTypeParameter(MDNode *&Result, bool IsDistinct) { 3741 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3742 OPTIONAL(name, MDStringField, ); \ 3743 REQUIRED(type, MDField, ); 3744 PARSE_MD_FIELDS(); 3745 #undef VISIT_MD_FIELDS 3746 3747 Result = 3748 GET_OR_DISTINCT(DITemplateTypeParameter, (Context, name.Val, type.Val)); 3749 return false; 3750 } 3751 3752 /// ParseDITemplateValueParameter: 3753 /// ::= !DITemplateValueParameter(tag: DW_TAG_template_value_parameter, 3754 /// name: "V", type: !1, value: i32 7) 3755 bool LLParser::ParseDITemplateValueParameter(MDNode *&Result, bool IsDistinct) { 3756 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3757 OPTIONAL(tag, DwarfTagField, (dwarf::DW_TAG_template_value_parameter)); \ 3758 OPTIONAL(name, MDStringField, ); \ 3759 OPTIONAL(type, MDField, ); \ 3760 REQUIRED(value, MDField, ); 3761 PARSE_MD_FIELDS(); 3762 #undef VISIT_MD_FIELDS 3763 3764 Result = GET_OR_DISTINCT(DITemplateValueParameter, 3765 (Context, tag.Val, name.Val, type.Val, value.Val)); 3766 return false; 3767 } 3768 3769 /// ParseDIGlobalVariable: 3770 /// ::= !DIGlobalVariable(scope: !0, name: "foo", linkageName: "foo", 3771 /// file: !1, line: 7, type: !2, isLocal: false, 3772 /// isDefinition: true, variable: i32* @foo, 3773 /// declaration: !3) 3774 bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) { 3775 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3776 REQUIRED(name, MDStringField, (/* AllowEmpty */ false)); \ 3777 OPTIONAL(scope, MDField, ); \ 3778 OPTIONAL(linkageName, MDStringField, ); \ 3779 OPTIONAL(file, MDField, ); \ 3780 OPTIONAL(line, LineField, ); \ 3781 OPTIONAL(type, MDField, ); \ 3782 OPTIONAL(isLocal, MDBoolField, ); \ 3783 OPTIONAL(isDefinition, MDBoolField, (true)); \ 3784 OPTIONAL(variable, MDConstant, ); \ 3785 OPTIONAL(declaration, MDField, ); 3786 PARSE_MD_FIELDS(); 3787 #undef VISIT_MD_FIELDS 3788 3789 Result = GET_OR_DISTINCT(DIGlobalVariable, 3790 (Context, scope.Val, name.Val, linkageName.Val, 3791 file.Val, line.Val, type.Val, isLocal.Val, 3792 isDefinition.Val, variable.Val, declaration.Val)); 3793 return false; 3794 } 3795 3796 /// ParseDILocalVariable: 3797 /// ::= !DILocalVariable(arg: 7, scope: !0, name: "foo", 3798 /// file: !1, line: 7, type: !2, arg: 2, flags: 7) 3799 /// ::= !DILocalVariable(scope: !0, name: "foo", 3800 /// file: !1, line: 7, type: !2, arg: 2, flags: 7) 3801 bool LLParser::ParseDILocalVariable(MDNode *&Result, bool IsDistinct) { 3802 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3803 REQUIRED(scope, MDField, (/* AllowNull */ false)); \ 3804 OPTIONAL(name, MDStringField, ); \ 3805 OPTIONAL(arg, MDUnsignedField, (0, UINT16_MAX)); \ 3806 OPTIONAL(file, MDField, ); \ 3807 OPTIONAL(line, LineField, ); \ 3808 OPTIONAL(type, MDField, ); \ 3809 OPTIONAL(flags, DIFlagField, ); 3810 PARSE_MD_FIELDS(); 3811 #undef VISIT_MD_FIELDS 3812 3813 Result = GET_OR_DISTINCT(DILocalVariable, 3814 (Context, scope.Val, name.Val, file.Val, line.Val, 3815 type.Val, arg.Val, flags.Val)); 3816 return false; 3817 } 3818 3819 /// ParseDIExpression: 3820 /// ::= !DIExpression(0, 7, -1) 3821 bool LLParser::ParseDIExpression(MDNode *&Result, bool IsDistinct) { 3822 assert(Lex.getKind() == lltok::MetadataVar && "Expected metadata type name"); 3823 Lex.Lex(); 3824 3825 if (ParseToken(lltok::lparen, "expected '(' here")) 3826 return true; 3827 3828 SmallVector<uint64_t, 8> Elements; 3829 if (Lex.getKind() != lltok::rparen) 3830 do { 3831 if (Lex.getKind() == lltok::DwarfOp) { 3832 if (unsigned Op = dwarf::getOperationEncoding(Lex.getStrVal())) { 3833 Lex.Lex(); 3834 Elements.push_back(Op); 3835 continue; 3836 } 3837 return TokError(Twine("invalid DWARF op '") + Lex.getStrVal() + "'"); 3838 } 3839 3840 if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned()) 3841 return TokError("expected unsigned integer"); 3842 3843 auto &U = Lex.getAPSIntVal(); 3844 if (U.ugt(UINT64_MAX)) 3845 return TokError("element too large, limit is " + Twine(UINT64_MAX)); 3846 Elements.push_back(U.getZExtValue()); 3847 Lex.Lex(); 3848 } while (EatIfPresent(lltok::comma)); 3849 3850 if (ParseToken(lltok::rparen, "expected ')' here")) 3851 return true; 3852 3853 Result = GET_OR_DISTINCT(DIExpression, (Context, Elements)); 3854 return false; 3855 } 3856 3857 /// ParseDIObjCProperty: 3858 /// ::= !DIObjCProperty(name: "foo", file: !1, line: 7, setter: "setFoo", 3859 /// getter: "getFoo", attributes: 7, type: !2) 3860 bool LLParser::ParseDIObjCProperty(MDNode *&Result, bool IsDistinct) { 3861 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3862 OPTIONAL(name, MDStringField, ); \ 3863 OPTIONAL(file, MDField, ); \ 3864 OPTIONAL(line, LineField, ); \ 3865 OPTIONAL(setter, MDStringField, ); \ 3866 OPTIONAL(getter, MDStringField, ); \ 3867 OPTIONAL(attributes, MDUnsignedField, (0, UINT32_MAX)); \ 3868 OPTIONAL(type, MDField, ); 3869 PARSE_MD_FIELDS(); 3870 #undef VISIT_MD_FIELDS 3871 3872 Result = GET_OR_DISTINCT(DIObjCProperty, 3873 (Context, name.Val, file.Val, line.Val, setter.Val, 3874 getter.Val, attributes.Val, type.Val)); 3875 return false; 3876 } 3877 3878 /// ParseDIImportedEntity: 3879 /// ::= !DIImportedEntity(tag: DW_TAG_imported_module, scope: !0, entity: !1, 3880 /// line: 7, name: "foo") 3881 bool LLParser::ParseDIImportedEntity(MDNode *&Result, bool IsDistinct) { 3882 #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ 3883 REQUIRED(tag, DwarfTagField, ); \ 3884 REQUIRED(scope, MDField, ); \ 3885 OPTIONAL(entity, MDField, ); \ 3886 OPTIONAL(line, LineField, ); \ 3887 OPTIONAL(name, MDStringField, ); 3888 PARSE_MD_FIELDS(); 3889 #undef VISIT_MD_FIELDS 3890 3891 Result = GET_OR_DISTINCT(DIImportedEntity, (Context, tag.Val, scope.Val, 3892 entity.Val, line.Val, name.Val)); 3893 return false; 3894 } 3895 3896 #undef PARSE_MD_FIELD 3897 #undef NOP_FIELD 3898 #undef REQUIRE_FIELD 3899 #undef DECLARE_FIELD 3900 3901 /// ParseMetadataAsValue 3902 /// ::= metadata i32 %local 3903 /// ::= metadata i32 @global 3904 /// ::= metadata i32 7 3905 /// ::= metadata !0 3906 /// ::= metadata !{...} 3907 /// ::= metadata !"string" 3908 bool LLParser::ParseMetadataAsValue(Value *&V, PerFunctionState &PFS) { 3909 // Note: the type 'metadata' has already been parsed. 3910 Metadata *MD; 3911 if (ParseMetadata(MD, &PFS)) 3912 return true; 3913 3914 V = MetadataAsValue::get(Context, MD); 3915 return false; 3916 } 3917 3918 /// ParseValueAsMetadata 3919 /// ::= i32 %local 3920 /// ::= i32 @global 3921 /// ::= i32 7 3922 bool LLParser::ParseValueAsMetadata(Metadata *&MD, const Twine &TypeMsg, 3923 PerFunctionState *PFS) { 3924 Type *Ty; 3925 LocTy Loc; 3926 if (ParseType(Ty, TypeMsg, Loc)) 3927 return true; 3928 if (Ty->isMetadataTy()) 3929 return Error(Loc, "invalid metadata-value-metadata roundtrip"); 3930 3931 Value *V; 3932 if (ParseValue(Ty, V, PFS)) 3933 return true; 3934 3935 MD = ValueAsMetadata::get(V); 3936 return false; 3937 } 3938 3939 /// ParseMetadata 3940 /// ::= i32 %local 3941 /// ::= i32 @global 3942 /// ::= i32 7 3943 /// ::= !42 3944 /// ::= !{...} 3945 /// ::= !"string" 3946 /// ::= !DILocation(...) 3947 bool LLParser::ParseMetadata(Metadata *&MD, PerFunctionState *PFS) { 3948 if (Lex.getKind() == lltok::MetadataVar) { 3949 MDNode *N; 3950 if (ParseSpecializedMDNode(N)) 3951 return true; 3952 MD = N; 3953 return false; 3954 } 3955 3956 // ValueAsMetadata: 3957 // <type> <value> 3958 if (Lex.getKind() != lltok::exclaim) 3959 return ParseValueAsMetadata(MD, "expected metadata operand", PFS); 3960 3961 // '!'. 3962 assert(Lex.getKind() == lltok::exclaim && "Expected '!' here"); 3963 Lex.Lex(); 3964 3965 // MDString: 3966 // ::= '!' STRINGCONSTANT 3967 if (Lex.getKind() == lltok::StringConstant) { 3968 MDString *S; 3969 if (ParseMDString(S)) 3970 return true; 3971 MD = S; 3972 return false; 3973 } 3974 3975 // MDNode: 3976 // !{ ... } 3977 // !7 3978 MDNode *N; 3979 if (ParseMDNodeTail(N)) 3980 return true; 3981 MD = N; 3982 return false; 3983 } 3984 3985 3986 //===----------------------------------------------------------------------===// 3987 // Function Parsing. 3988 //===----------------------------------------------------------------------===// 3989 3990 bool LLParser::ConvertValIDToValue(Type *Ty, ValID &ID, Value *&V, 3991 PerFunctionState *PFS) { 3992 if (Ty->isFunctionTy()) 3993 return Error(ID.Loc, "functions are not values, refer to them as pointers"); 3994 3995 switch (ID.Kind) { 3996 case ValID::t_LocalID: 3997 if (!PFS) return Error(ID.Loc, "invalid use of function-local name"); 3998 V = PFS->GetVal(ID.UIntVal, Ty, ID.Loc); 3999 return V == nullptr; 4000 case ValID::t_LocalName: 4001 if (!PFS) return Error(ID.Loc, "invalid use of function-local name"); 4002 V = PFS->GetVal(ID.StrVal, Ty, ID.Loc); 4003 return V == nullptr; 4004 case ValID::t_InlineAsm: { 4005 assert(ID.FTy); 4006 if (!InlineAsm::Verify(ID.FTy, ID.StrVal2)) 4007 return Error(ID.Loc, "invalid type for inline asm constraint string"); 4008 V = InlineAsm::get(ID.FTy, ID.StrVal, ID.StrVal2, ID.UIntVal & 1, 4009 (ID.UIntVal >> 1) & 1, 4010 (InlineAsm::AsmDialect(ID.UIntVal >> 2))); 4011 return false; 4012 } 4013 case ValID::t_GlobalName: 4014 V = GetGlobalVal(ID.StrVal, Ty, ID.Loc); 4015 return V == nullptr; 4016 case ValID::t_GlobalID: 4017 V = GetGlobalVal(ID.UIntVal, Ty, ID.Loc); 4018 return V == nullptr; 4019 case ValID::t_APSInt: 4020 if (!Ty->isIntegerTy()) 4021 return Error(ID.Loc, "integer constant must have integer type"); 4022 ID.APSIntVal = ID.APSIntVal.extOrTrunc(Ty->getPrimitiveSizeInBits()); 4023 V = ConstantInt::get(Context, ID.APSIntVal); 4024 return false; 4025 case ValID::t_APFloat: 4026 if (!Ty->isFloatingPointTy() || 4027 !ConstantFP::isValueValidForType(Ty, ID.APFloatVal)) 4028 return Error(ID.Loc, "floating point constant invalid for type"); 4029 4030 // The lexer has no type info, so builds all half, float, and double FP 4031 // constants as double. Fix this here. Long double does not need this. 4032 if (&ID.APFloatVal.getSemantics() == &APFloat::IEEEdouble) { 4033 bool Ignored; 4034 if (Ty->isHalfTy()) 4035 ID.APFloatVal.convert(APFloat::IEEEhalf, APFloat::rmNearestTiesToEven, 4036 &Ignored); 4037 else if (Ty->isFloatTy()) 4038 ID.APFloatVal.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven, 4039 &Ignored); 4040 } 4041 V = ConstantFP::get(Context, ID.APFloatVal); 4042 4043 if (V->getType() != Ty) 4044 return Error(ID.Loc, "floating point constant does not have type '" + 4045 getTypeString(Ty) + "'"); 4046 4047 return false; 4048 case ValID::t_Null: 4049 if (!Ty->isPointerTy()) 4050 return Error(ID.Loc, "null must be a pointer type"); 4051 V = ConstantPointerNull::get(cast<PointerType>(Ty)); 4052 return false; 4053 case ValID::t_Undef: 4054 // FIXME: LabelTy should not be a first-class type. 4055 if (!Ty->isFirstClassType() || Ty->isLabelTy()) 4056 return Error(ID.Loc, "invalid type for undef constant"); 4057 V = UndefValue::get(Ty); 4058 return false; 4059 case ValID::t_EmptyArray: 4060 if (!Ty->isArrayTy() || cast<ArrayType>(Ty)->getNumElements() != 0) 4061 return Error(ID.Loc, "invalid empty array initializer"); 4062 V = UndefValue::get(Ty); 4063 return false; 4064 case ValID::t_Zero: 4065 // FIXME: LabelTy should not be a first-class type. 4066 if (!Ty->isFirstClassType() || Ty->isLabelTy()) 4067 return Error(ID.Loc, "invalid type for null constant"); 4068 V = Constant::getNullValue(Ty); 4069 return false; 4070 case ValID::t_Constant: 4071 if (ID.ConstantVal->getType() != Ty) 4072 return Error(ID.Loc, "constant expression type mismatch"); 4073 4074 V = ID.ConstantVal; 4075 return false; 4076 case ValID::t_ConstantStruct: 4077 case ValID::t_PackedConstantStruct: 4078 if (StructType *ST = dyn_cast<StructType>(Ty)) { 4079 if (ST->getNumElements() != ID.UIntVal) 4080 return Error(ID.Loc, 4081 "initializer with struct type has wrong # elements"); 4082 if (ST->isPacked() != (ID.Kind == ValID::t_PackedConstantStruct)) 4083 return Error(ID.Loc, "packed'ness of initializer and type don't match"); 4084 4085 // Verify that the elements are compatible with the structtype. 4086 for (unsigned i = 0, e = ID.UIntVal; i != e; ++i) 4087 if (ID.ConstantStructElts[i]->getType() != ST->getElementType(i)) 4088 return Error(ID.Loc, "element " + Twine(i) + 4089 " of struct initializer doesn't match struct element type"); 4090 4091 V = ConstantStruct::get( 4092 ST, makeArrayRef(ID.ConstantStructElts.get(), ID.UIntVal)); 4093 } else 4094 return Error(ID.Loc, "constant expression type mismatch"); 4095 return false; 4096 } 4097 llvm_unreachable("Invalid ValID"); 4098 } 4099 4100 bool LLParser::parseConstantValue(Type *Ty, Constant *&C) { 4101 C = nullptr; 4102 ValID ID; 4103 auto Loc = Lex.getLoc(); 4104 if (ParseValID(ID, /*PFS=*/nullptr)) 4105 return true; 4106 switch (ID.Kind) { 4107 case ValID::t_APSInt: 4108 case ValID::t_APFloat: 4109 case ValID::t_Constant: 4110 case ValID::t_ConstantStruct: 4111 case ValID::t_PackedConstantStruct: { 4112 Value *V; 4113 if (ConvertValIDToValue(Ty, ID, V, /*PFS=*/nullptr)) 4114 return true; 4115 assert(isa<Constant>(V) && "Expected a constant value"); 4116 C = cast<Constant>(V); 4117 return false; 4118 } 4119 default: 4120 return Error(Loc, "expected a constant value"); 4121 } 4122 } 4123 4124 bool LLParser::ParseValue(Type *Ty, Value *&V, PerFunctionState *PFS) { 4125 V = nullptr; 4126 ValID ID; 4127 return ParseValID(ID, PFS) || 4128 ConvertValIDToValue(Ty, ID, V, PFS); 4129 } 4130 4131 bool LLParser::ParseTypeAndValue(Value *&V, PerFunctionState *PFS) { 4132 Type *Ty = nullptr; 4133 return ParseType(Ty) || 4134 ParseValue(Ty, V, PFS); 4135 } 4136 4137 bool LLParser::ParseTypeAndBasicBlock(BasicBlock *&BB, LocTy &Loc, 4138 PerFunctionState &PFS) { 4139 Value *V; 4140 Loc = Lex.getLoc(); 4141 if (ParseTypeAndValue(V, PFS)) return true; 4142 if (!isa<BasicBlock>(V)) 4143 return Error(Loc, "expected a basic block"); 4144 BB = cast<BasicBlock>(V); 4145 return false; 4146 } 4147 4148 4149 /// FunctionHeader 4150 /// ::= OptionalLinkage OptionalVisibility OptionalCallingConv OptRetAttrs 4151 /// OptUnnamedAddr Type GlobalName '(' ArgList ')' OptFuncAttrs OptSection 4152 /// OptionalAlign OptGC OptionalPrefix OptionalPrologue OptPersonalityFn 4153 bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) { 4154 // Parse the linkage. 4155 LocTy LinkageLoc = Lex.getLoc(); 4156 unsigned Linkage; 4157 4158 unsigned Visibility; 4159 unsigned DLLStorageClass; 4160 AttrBuilder RetAttrs; 4161 unsigned CC; 4162 Type *RetType = nullptr; 4163 LocTy RetTypeLoc = Lex.getLoc(); 4164 if (ParseOptionalLinkage(Linkage) || 4165 ParseOptionalVisibility(Visibility) || 4166 ParseOptionalDLLStorageClass(DLLStorageClass) || 4167 ParseOptionalCallingConv(CC) || 4168 ParseOptionalReturnAttrs(RetAttrs) || 4169 ParseType(RetType, RetTypeLoc, true /*void allowed*/)) 4170 return true; 4171 4172 // Verify that the linkage is ok. 4173 switch ((GlobalValue::LinkageTypes)Linkage) { 4174 case GlobalValue::ExternalLinkage: 4175 break; // always ok. 4176 case GlobalValue::ExternalWeakLinkage: 4177 if (isDefine) 4178 return Error(LinkageLoc, "invalid linkage for function definition"); 4179 break; 4180 case GlobalValue::PrivateLinkage: 4181 case GlobalValue::InternalLinkage: 4182 case GlobalValue::AvailableExternallyLinkage: 4183 case GlobalValue::LinkOnceAnyLinkage: 4184 case GlobalValue::LinkOnceODRLinkage: 4185 case GlobalValue::WeakAnyLinkage: 4186 case GlobalValue::WeakODRLinkage: 4187 if (!isDefine) 4188 return Error(LinkageLoc, "invalid linkage for function declaration"); 4189 break; 4190 case GlobalValue::AppendingLinkage: 4191 case GlobalValue::CommonLinkage: 4192 return Error(LinkageLoc, "invalid function linkage type"); 4193 } 4194 4195 if (!isValidVisibilityForLinkage(Visibility, Linkage)) 4196 return Error(LinkageLoc, 4197 "symbol with local linkage must have default visibility"); 4198 4199 if (!FunctionType::isValidReturnType(RetType)) 4200 return Error(RetTypeLoc, "invalid function return type"); 4201 4202 LocTy NameLoc = Lex.getLoc(); 4203 4204 std::string FunctionName; 4205 if (Lex.getKind() == lltok::GlobalVar) { 4206 FunctionName = Lex.getStrVal(); 4207 } else if (Lex.getKind() == lltok::GlobalID) { // @42 is ok. 4208 unsigned NameID = Lex.getUIntVal(); 4209 4210 if (NameID != NumberedVals.size()) 4211 return TokError("function expected to be numbered '%" + 4212 Twine(NumberedVals.size()) + "'"); 4213 } else { 4214 return TokError("expected function name"); 4215 } 4216 4217 Lex.Lex(); 4218 4219 if (Lex.getKind() != lltok::lparen) 4220 return TokError("expected '(' in function argument list"); 4221 4222 SmallVector<ArgInfo, 8> ArgList; 4223 bool isVarArg; 4224 AttrBuilder FuncAttrs; 4225 std::vector<unsigned> FwdRefAttrGrps; 4226 LocTy BuiltinLoc; 4227 std::string Section; 4228 unsigned Alignment; 4229 std::string GC; 4230 bool UnnamedAddr; 4231 LocTy UnnamedAddrLoc; 4232 Constant *Prefix = nullptr; 4233 Constant *Prologue = nullptr; 4234 Constant *PersonalityFn = nullptr; 4235 Comdat *C; 4236 4237 if (ParseArgumentList(ArgList, isVarArg) || 4238 ParseOptionalToken(lltok::kw_unnamed_addr, UnnamedAddr, 4239 &UnnamedAddrLoc) || 4240 ParseFnAttributeValuePairs(FuncAttrs, FwdRefAttrGrps, false, 4241 BuiltinLoc) || 4242 (EatIfPresent(lltok::kw_section) && 4243 ParseStringConstant(Section)) || 4244 parseOptionalComdat(FunctionName, C) || 4245 ParseOptionalAlignment(Alignment) || 4246 (EatIfPresent(lltok::kw_gc) && 4247 ParseStringConstant(GC)) || 4248 (EatIfPresent(lltok::kw_prefix) && 4249 ParseGlobalTypeAndValue(Prefix)) || 4250 (EatIfPresent(lltok::kw_prologue) && 4251 ParseGlobalTypeAndValue(Prologue)) || 4252 (EatIfPresent(lltok::kw_personality) && 4253 ParseGlobalTypeAndValue(PersonalityFn))) 4254 return true; 4255 4256 if (FuncAttrs.contains(Attribute::Builtin)) 4257 return Error(BuiltinLoc, "'builtin' attribute not valid on function"); 4258 4259 // If the alignment was parsed as an attribute, move to the alignment field. 4260 if (FuncAttrs.hasAlignmentAttr()) { 4261 Alignment = FuncAttrs.getAlignment(); 4262 FuncAttrs.removeAttribute(Attribute::Alignment); 4263 } 4264 4265 // Okay, if we got here, the function is syntactically valid. Convert types 4266 // and do semantic checks. 4267 std::vector<Type*> ParamTypeList; 4268 SmallVector<AttributeSet, 8> Attrs; 4269 4270 if (RetAttrs.hasAttributes()) 4271 Attrs.push_back(AttributeSet::get(RetType->getContext(), 4272 AttributeSet::ReturnIndex, 4273 RetAttrs)); 4274 4275 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) { 4276 ParamTypeList.push_back(ArgList[i].Ty); 4277 if (ArgList[i].Attrs.hasAttributes(i + 1)) { 4278 AttrBuilder B(ArgList[i].Attrs, i + 1); 4279 Attrs.push_back(AttributeSet::get(RetType->getContext(), i + 1, B)); 4280 } 4281 } 4282 4283 if (FuncAttrs.hasAttributes()) 4284 Attrs.push_back(AttributeSet::get(RetType->getContext(), 4285 AttributeSet::FunctionIndex, 4286 FuncAttrs)); 4287 4288 AttributeSet PAL = AttributeSet::get(Context, Attrs); 4289 4290 if (PAL.hasAttribute(1, Attribute::StructRet) && !RetType->isVoidTy()) 4291 return Error(RetTypeLoc, "functions with 'sret' argument must return void"); 4292 4293 FunctionType *FT = 4294 FunctionType::get(RetType, ParamTypeList, isVarArg); 4295 PointerType *PFT = PointerType::getUnqual(FT); 4296 4297 Fn = nullptr; 4298 if (!FunctionName.empty()) { 4299 // If this was a definition of a forward reference, remove the definition 4300 // from the forward reference table and fill in the forward ref. 4301 std::map<std::string, std::pair<GlobalValue*, LocTy> >::iterator FRVI = 4302 ForwardRefVals.find(FunctionName); 4303 if (FRVI != ForwardRefVals.end()) { 4304 Fn = M->getFunction(FunctionName); 4305 if (!Fn) 4306 return Error(FRVI->second.second, "invalid forward reference to " 4307 "function as global value!"); 4308 if (Fn->getType() != PFT) 4309 return Error(FRVI->second.second, "invalid forward reference to " 4310 "function '" + FunctionName + "' with wrong type!"); 4311 4312 ForwardRefVals.erase(FRVI); 4313 } else if ((Fn = M->getFunction(FunctionName))) { 4314 // Reject redefinitions. 4315 return Error(NameLoc, "invalid redefinition of function '" + 4316 FunctionName + "'"); 4317 } else if (M->getNamedValue(FunctionName)) { 4318 return Error(NameLoc, "redefinition of function '@" + FunctionName + "'"); 4319 } 4320 4321 } else { 4322 // If this is a definition of a forward referenced function, make sure the 4323 // types agree. 4324 std::map<unsigned, std::pair<GlobalValue*, LocTy> >::iterator I 4325 = ForwardRefValIDs.find(NumberedVals.size()); 4326 if (I != ForwardRefValIDs.end()) { 4327 Fn = cast<Function>(I->second.first); 4328 if (Fn->getType() != PFT) 4329 return Error(NameLoc, "type of definition and forward reference of '@" + 4330 Twine(NumberedVals.size()) + "' disagree"); 4331 ForwardRefValIDs.erase(I); 4332 } 4333 } 4334 4335 if (!Fn) 4336 Fn = Function::Create(FT, GlobalValue::ExternalLinkage, FunctionName, M); 4337 else // Move the forward-reference to the correct spot in the module. 4338 M->getFunctionList().splice(M->end(), M->getFunctionList(), Fn); 4339 4340 if (FunctionName.empty()) 4341 NumberedVals.push_back(Fn); 4342 4343 Fn->setLinkage((GlobalValue::LinkageTypes)Linkage); 4344 Fn->setVisibility((GlobalValue::VisibilityTypes)Visibility); 4345 Fn->setDLLStorageClass((GlobalValue::DLLStorageClassTypes)DLLStorageClass); 4346 Fn->setCallingConv(CC); 4347 Fn->setAttributes(PAL); 4348 Fn->setUnnamedAddr(UnnamedAddr); 4349 Fn->setAlignment(Alignment); 4350 Fn->setSection(Section); 4351 Fn->setComdat(C); 4352 Fn->setPersonalityFn(PersonalityFn); 4353 if (!GC.empty()) Fn->setGC(GC.c_str()); 4354 Fn->setPrefixData(Prefix); 4355 Fn->setPrologueData(Prologue); 4356 ForwardRefAttrGroups[Fn] = FwdRefAttrGrps; 4357 4358 // Add all of the arguments we parsed to the function. 4359 Function::arg_iterator ArgIt = Fn->arg_begin(); 4360 for (unsigned i = 0, e = ArgList.size(); i != e; ++i, ++ArgIt) { 4361 // If the argument has a name, insert it into the argument symbol table. 4362 if (ArgList[i].Name.empty()) continue; 4363 4364 // Set the name, if it conflicted, it will be auto-renamed. 4365 ArgIt->setName(ArgList[i].Name); 4366 4367 if (ArgIt->getName() != ArgList[i].Name) 4368 return Error(ArgList[i].Loc, "redefinition of argument '%" + 4369 ArgList[i].Name + "'"); 4370 } 4371 4372 if (isDefine) 4373 return false; 4374 4375 // Check the declaration has no block address forward references. 4376 ValID ID; 4377 if (FunctionName.empty()) { 4378 ID.Kind = ValID::t_GlobalID; 4379 ID.UIntVal = NumberedVals.size() - 1; 4380 } else { 4381 ID.Kind = ValID::t_GlobalName; 4382 ID.StrVal = FunctionName; 4383 } 4384 auto Blocks = ForwardRefBlockAddresses.find(ID); 4385 if (Blocks != ForwardRefBlockAddresses.end()) 4386 return Error(Blocks->first.Loc, 4387 "cannot take blockaddress inside a declaration"); 4388 return false; 4389 } 4390 4391 bool LLParser::PerFunctionState::resolveForwardRefBlockAddresses() { 4392 ValID ID; 4393 if (FunctionNumber == -1) { 4394 ID.Kind = ValID::t_GlobalName; 4395 ID.StrVal = F.getName(); 4396 } else { 4397 ID.Kind = ValID::t_GlobalID; 4398 ID.UIntVal = FunctionNumber; 4399 } 4400 4401 auto Blocks = P.ForwardRefBlockAddresses.find(ID); 4402 if (Blocks == P.ForwardRefBlockAddresses.end()) 4403 return false; 4404 4405 for (const auto &I : Blocks->second) { 4406 const ValID &BBID = I.first; 4407 GlobalValue *GV = I.second; 4408 4409 assert((BBID.Kind == ValID::t_LocalID || BBID.Kind == ValID::t_LocalName) && 4410 "Expected local id or name"); 4411 BasicBlock *BB; 4412 if (BBID.Kind == ValID::t_LocalName) 4413 BB = GetBB(BBID.StrVal, BBID.Loc); 4414 else 4415 BB = GetBB(BBID.UIntVal, BBID.Loc); 4416 if (!BB) 4417 return P.Error(BBID.Loc, "referenced value is not a basic block"); 4418 4419 GV->replaceAllUsesWith(BlockAddress::get(&F, BB)); 4420 GV->eraseFromParent(); 4421 } 4422 4423 P.ForwardRefBlockAddresses.erase(Blocks); 4424 return false; 4425 } 4426 4427 /// ParseFunctionBody 4428 /// ::= '{' BasicBlock+ UseListOrderDirective* '}' 4429 bool LLParser::ParseFunctionBody(Function &Fn) { 4430 if (Lex.getKind() != lltok::lbrace) 4431 return TokError("expected '{' in function body"); 4432 Lex.Lex(); // eat the {. 4433 4434 int FunctionNumber = -1; 4435 if (!Fn.hasName()) FunctionNumber = NumberedVals.size()-1; 4436 4437 PerFunctionState PFS(*this, Fn, FunctionNumber); 4438 4439 // Resolve block addresses and allow basic blocks to be forward-declared 4440 // within this function. 4441 if (PFS.resolveForwardRefBlockAddresses()) 4442 return true; 4443 SaveAndRestore<PerFunctionState *> ScopeExit(BlockAddressPFS, &PFS); 4444 4445 // We need at least one basic block. 4446 if (Lex.getKind() == lltok::rbrace || Lex.getKind() == lltok::kw_uselistorder) 4447 return TokError("function body requires at least one basic block"); 4448 4449 while (Lex.getKind() != lltok::rbrace && 4450 Lex.getKind() != lltok::kw_uselistorder) 4451 if (ParseBasicBlock(PFS)) return true; 4452 4453 while (Lex.getKind() != lltok::rbrace) 4454 if (ParseUseListOrder(&PFS)) 4455 return true; 4456 4457 // Eat the }. 4458 Lex.Lex(); 4459 4460 // Verify function is ok. 4461 return PFS.FinishFunction(); 4462 } 4463 4464 /// ParseBasicBlock 4465 /// ::= LabelStr? Instruction* 4466 bool LLParser::ParseBasicBlock(PerFunctionState &PFS) { 4467 // If this basic block starts out with a name, remember it. 4468 std::string Name; 4469 LocTy NameLoc = Lex.getLoc(); 4470 if (Lex.getKind() == lltok::LabelStr) { 4471 Name = Lex.getStrVal(); 4472 Lex.Lex(); 4473 } 4474 4475 BasicBlock *BB = PFS.DefineBB(Name, NameLoc); 4476 if (!BB) 4477 return Error(NameLoc, 4478 "unable to create block named '" + Name + "'"); 4479 4480 std::string NameStr; 4481 4482 // Parse the instructions in this block until we get a terminator. 4483 Instruction *Inst; 4484 do { 4485 // This instruction may have three possibilities for a name: a) none 4486 // specified, b) name specified "%foo =", c) number specified: "%4 =". 4487 LocTy NameLoc = Lex.getLoc(); 4488 int NameID = -1; 4489 NameStr = ""; 4490 4491 if (Lex.getKind() == lltok::LocalVarID) { 4492 NameID = Lex.getUIntVal(); 4493 Lex.Lex(); 4494 if (ParseToken(lltok::equal, "expected '=' after instruction id")) 4495 return true; 4496 } else if (Lex.getKind() == lltok::LocalVar) { 4497 NameStr = Lex.getStrVal(); 4498 Lex.Lex(); 4499 if (ParseToken(lltok::equal, "expected '=' after instruction name")) 4500 return true; 4501 } 4502 4503 switch (ParseInstruction(Inst, BB, PFS)) { 4504 default: llvm_unreachable("Unknown ParseInstruction result!"); 4505 case InstError: return true; 4506 case InstNormal: 4507 BB->getInstList().push_back(Inst); 4508 4509 // With a normal result, we check to see if the instruction is followed by 4510 // a comma and metadata. 4511 if (EatIfPresent(lltok::comma)) 4512 if (ParseInstructionMetadata(*Inst)) 4513 return true; 4514 break; 4515 case InstExtraComma: 4516 BB->getInstList().push_back(Inst); 4517 4518 // If the instruction parser ate an extra comma at the end of it, it 4519 // *must* be followed by metadata. 4520 if (ParseInstructionMetadata(*Inst)) 4521 return true; 4522 break; 4523 } 4524 4525 // Set the name on the instruction. 4526 if (PFS.SetInstName(NameID, NameStr, NameLoc, Inst)) return true; 4527 } while (!isa<TerminatorInst>(Inst)); 4528 4529 return false; 4530 } 4531 4532 //===----------------------------------------------------------------------===// 4533 // Instruction Parsing. 4534 //===----------------------------------------------------------------------===// 4535 4536 /// ParseInstruction - Parse one of the many different instructions. 4537 /// 4538 int LLParser::ParseInstruction(Instruction *&Inst, BasicBlock *BB, 4539 PerFunctionState &PFS) { 4540 lltok::Kind Token = Lex.getKind(); 4541 if (Token == lltok::Eof) 4542 return TokError("found end of file when expecting more instructions"); 4543 LocTy Loc = Lex.getLoc(); 4544 unsigned KeywordVal = Lex.getUIntVal(); 4545 Lex.Lex(); // Eat the keyword. 4546 4547 switch (Token) { 4548 default: return Error(Loc, "expected instruction opcode"); 4549 // Terminator Instructions. 4550 case lltok::kw_unreachable: Inst = new UnreachableInst(Context); return false; 4551 case lltok::kw_ret: return ParseRet(Inst, BB, PFS); 4552 case lltok::kw_br: return ParseBr(Inst, PFS); 4553 case lltok::kw_switch: return ParseSwitch(Inst, PFS); 4554 case lltok::kw_indirectbr: return ParseIndirectBr(Inst, PFS); 4555 case lltok::kw_invoke: return ParseInvoke(Inst, PFS); 4556 case lltok::kw_resume: return ParseResume(Inst, PFS); 4557 case lltok::kw_cleanupret: return ParseCleanupRet(Inst, PFS); 4558 case lltok::kw_catchret: return ParseCatchRet(Inst, PFS); 4559 case lltok::kw_catchpad: return ParseCatchPad(Inst, PFS); 4560 case lltok::kw_terminatepad: return ParseTerminatePad(Inst, PFS); 4561 case lltok::kw_cleanuppad: return ParseCleanupPad(Inst, PFS); 4562 case lltok::kw_catchendpad: return ParseCatchEndPad(Inst, PFS); 4563 // Binary Operators. 4564 case lltok::kw_add: 4565 case lltok::kw_sub: 4566 case lltok::kw_mul: 4567 case lltok::kw_shl: { 4568 bool NUW = EatIfPresent(lltok::kw_nuw); 4569 bool NSW = EatIfPresent(lltok::kw_nsw); 4570 if (!NUW) NUW = EatIfPresent(lltok::kw_nuw); 4571 4572 if (ParseArithmetic(Inst, PFS, KeywordVal, 1)) return true; 4573 4574 if (NUW) cast<BinaryOperator>(Inst)->setHasNoUnsignedWrap(true); 4575 if (NSW) cast<BinaryOperator>(Inst)->setHasNoSignedWrap(true); 4576 return false; 4577 } 4578 case lltok::kw_fadd: 4579 case lltok::kw_fsub: 4580 case lltok::kw_fmul: 4581 case lltok::kw_fdiv: 4582 case lltok::kw_frem: { 4583 FastMathFlags FMF = EatFastMathFlagsIfPresent(); 4584 int Res = ParseArithmetic(Inst, PFS, KeywordVal, 2); 4585 if (Res != 0) 4586 return Res; 4587 if (FMF.any()) 4588 Inst->setFastMathFlags(FMF); 4589 return 0; 4590 } 4591 4592 case lltok::kw_sdiv: 4593 case lltok::kw_udiv: 4594 case lltok::kw_lshr: 4595 case lltok::kw_ashr: { 4596 bool Exact = EatIfPresent(lltok::kw_exact); 4597 4598 if (ParseArithmetic(Inst, PFS, KeywordVal, 1)) return true; 4599 if (Exact) cast<BinaryOperator>(Inst)->setIsExact(true); 4600 return false; 4601 } 4602 4603 case lltok::kw_urem: 4604 case lltok::kw_srem: return ParseArithmetic(Inst, PFS, KeywordVal, 1); 4605 case lltok::kw_and: 4606 case lltok::kw_or: 4607 case lltok::kw_xor: return ParseLogical(Inst, PFS, KeywordVal); 4608 case lltok::kw_icmp: return ParseCompare(Inst, PFS, KeywordVal); 4609 case lltok::kw_fcmp: { 4610 FastMathFlags FMF = EatFastMathFlagsIfPresent(); 4611 int Res = ParseCompare(Inst, PFS, KeywordVal); 4612 if (Res != 0) 4613 return Res; 4614 if (FMF.any()) 4615 Inst->setFastMathFlags(FMF); 4616 return 0; 4617 } 4618 4619 // Casts. 4620 case lltok::kw_trunc: 4621 case lltok::kw_zext: 4622 case lltok::kw_sext: 4623 case lltok::kw_fptrunc: 4624 case lltok::kw_fpext: 4625 case lltok::kw_bitcast: 4626 case lltok::kw_addrspacecast: 4627 case lltok::kw_uitofp: 4628 case lltok::kw_sitofp: 4629 case lltok::kw_fptoui: 4630 case lltok::kw_fptosi: 4631 case lltok::kw_inttoptr: 4632 case lltok::kw_ptrtoint: return ParseCast(Inst, PFS, KeywordVal); 4633 // Other. 4634 case lltok::kw_select: return ParseSelect(Inst, PFS); 4635 case lltok::kw_va_arg: return ParseVA_Arg(Inst, PFS); 4636 case lltok::kw_extractelement: return ParseExtractElement(Inst, PFS); 4637 case lltok::kw_insertelement: return ParseInsertElement(Inst, PFS); 4638 case lltok::kw_shufflevector: return ParseShuffleVector(Inst, PFS); 4639 case lltok::kw_phi: return ParsePHI(Inst, PFS); 4640 case lltok::kw_landingpad: return ParseLandingPad(Inst, PFS); 4641 // Call. 4642 case lltok::kw_call: return ParseCall(Inst, PFS, CallInst::TCK_None); 4643 case lltok::kw_tail: return ParseCall(Inst, PFS, CallInst::TCK_Tail); 4644 case lltok::kw_musttail: return ParseCall(Inst, PFS, CallInst::TCK_MustTail); 4645 // Memory. 4646 case lltok::kw_alloca: return ParseAlloc(Inst, PFS); 4647 case lltok::kw_load: return ParseLoad(Inst, PFS); 4648 case lltok::kw_store: return ParseStore(Inst, PFS); 4649 case lltok::kw_cmpxchg: return ParseCmpXchg(Inst, PFS); 4650 case lltok::kw_atomicrmw: return ParseAtomicRMW(Inst, PFS); 4651 case lltok::kw_fence: return ParseFence(Inst, PFS); 4652 case lltok::kw_getelementptr: return ParseGetElementPtr(Inst, PFS); 4653 case lltok::kw_extractvalue: return ParseExtractValue(Inst, PFS); 4654 case lltok::kw_insertvalue: return ParseInsertValue(Inst, PFS); 4655 } 4656 } 4657 4658 /// ParseCmpPredicate - Parse an integer or fp predicate, based on Kind. 4659 bool LLParser::ParseCmpPredicate(unsigned &P, unsigned Opc) { 4660 if (Opc == Instruction::FCmp) { 4661 switch (Lex.getKind()) { 4662 default: return TokError("expected fcmp predicate (e.g. 'oeq')"); 4663 case lltok::kw_oeq: P = CmpInst::FCMP_OEQ; break; 4664 case lltok::kw_one: P = CmpInst::FCMP_ONE; break; 4665 case lltok::kw_olt: P = CmpInst::FCMP_OLT; break; 4666 case lltok::kw_ogt: P = CmpInst::FCMP_OGT; break; 4667 case lltok::kw_ole: P = CmpInst::FCMP_OLE; break; 4668 case lltok::kw_oge: P = CmpInst::FCMP_OGE; break; 4669 case lltok::kw_ord: P = CmpInst::FCMP_ORD; break; 4670 case lltok::kw_uno: P = CmpInst::FCMP_UNO; break; 4671 case lltok::kw_ueq: P = CmpInst::FCMP_UEQ; break; 4672 case lltok::kw_une: P = CmpInst::FCMP_UNE; break; 4673 case lltok::kw_ult: P = CmpInst::FCMP_ULT; break; 4674 case lltok::kw_ugt: P = CmpInst::FCMP_UGT; break; 4675 case lltok::kw_ule: P = CmpInst::FCMP_ULE; break; 4676 case lltok::kw_uge: P = CmpInst::FCMP_UGE; break; 4677 case lltok::kw_true: P = CmpInst::FCMP_TRUE; break; 4678 case lltok::kw_false: P = CmpInst::FCMP_FALSE; break; 4679 } 4680 } else { 4681 switch (Lex.getKind()) { 4682 default: return TokError("expected icmp predicate (e.g. 'eq')"); 4683 case lltok::kw_eq: P = CmpInst::ICMP_EQ; break; 4684 case lltok::kw_ne: P = CmpInst::ICMP_NE; break; 4685 case lltok::kw_slt: P = CmpInst::ICMP_SLT; break; 4686 case lltok::kw_sgt: P = CmpInst::ICMP_SGT; break; 4687 case lltok::kw_sle: P = CmpInst::ICMP_SLE; break; 4688 case lltok::kw_sge: P = CmpInst::ICMP_SGE; break; 4689 case lltok::kw_ult: P = CmpInst::ICMP_ULT; break; 4690 case lltok::kw_ugt: P = CmpInst::ICMP_UGT; break; 4691 case lltok::kw_ule: P = CmpInst::ICMP_ULE; break; 4692 case lltok::kw_uge: P = CmpInst::ICMP_UGE; break; 4693 } 4694 } 4695 Lex.Lex(); 4696 return false; 4697 } 4698 4699 //===----------------------------------------------------------------------===// 4700 // Terminator Instructions. 4701 //===----------------------------------------------------------------------===// 4702 4703 /// ParseRet - Parse a return instruction. 4704 /// ::= 'ret' void (',' !dbg, !1)* 4705 /// ::= 'ret' TypeAndValue (',' !dbg, !1)* 4706 bool LLParser::ParseRet(Instruction *&Inst, BasicBlock *BB, 4707 PerFunctionState &PFS) { 4708 SMLoc TypeLoc = Lex.getLoc(); 4709 Type *Ty = nullptr; 4710 if (ParseType(Ty, true /*void allowed*/)) return true; 4711 4712 Type *ResType = PFS.getFunction().getReturnType(); 4713 4714 if (Ty->isVoidTy()) { 4715 if (!ResType->isVoidTy()) 4716 return Error(TypeLoc, "value doesn't match function result type '" + 4717 getTypeString(ResType) + "'"); 4718 4719 Inst = ReturnInst::Create(Context); 4720 return false; 4721 } 4722 4723 Value *RV; 4724 if (ParseValue(Ty, RV, PFS)) return true; 4725 4726 if (ResType != RV->getType()) 4727 return Error(TypeLoc, "value doesn't match function result type '" + 4728 getTypeString(ResType) + "'"); 4729 4730 Inst = ReturnInst::Create(Context, RV); 4731 return false; 4732 } 4733 4734 4735 /// ParseBr 4736 /// ::= 'br' TypeAndValue 4737 /// ::= 'br' TypeAndValue ',' TypeAndValue ',' TypeAndValue 4738 bool LLParser::ParseBr(Instruction *&Inst, PerFunctionState &PFS) { 4739 LocTy Loc, Loc2; 4740 Value *Op0; 4741 BasicBlock *Op1, *Op2; 4742 if (ParseTypeAndValue(Op0, Loc, PFS)) return true; 4743 4744 if (BasicBlock *BB = dyn_cast<BasicBlock>(Op0)) { 4745 Inst = BranchInst::Create(BB); 4746 return false; 4747 } 4748 4749 if (Op0->getType() != Type::getInt1Ty(Context)) 4750 return Error(Loc, "branch condition must have 'i1' type"); 4751 4752 if (ParseToken(lltok::comma, "expected ',' after branch condition") || 4753 ParseTypeAndBasicBlock(Op1, Loc, PFS) || 4754 ParseToken(lltok::comma, "expected ',' after true destination") || 4755 ParseTypeAndBasicBlock(Op2, Loc2, PFS)) 4756 return true; 4757 4758 Inst = BranchInst::Create(Op1, Op2, Op0); 4759 return false; 4760 } 4761 4762 /// ParseSwitch 4763 /// Instruction 4764 /// ::= 'switch' TypeAndValue ',' TypeAndValue '[' JumpTable ']' 4765 /// JumpTable 4766 /// ::= (TypeAndValue ',' TypeAndValue)* 4767 bool LLParser::ParseSwitch(Instruction *&Inst, PerFunctionState &PFS) { 4768 LocTy CondLoc, BBLoc; 4769 Value *Cond; 4770 BasicBlock *DefaultBB; 4771 if (ParseTypeAndValue(Cond, CondLoc, PFS) || 4772 ParseToken(lltok::comma, "expected ',' after switch condition") || 4773 ParseTypeAndBasicBlock(DefaultBB, BBLoc, PFS) || 4774 ParseToken(lltok::lsquare, "expected '[' with switch table")) 4775 return true; 4776 4777 if (!Cond->getType()->isIntegerTy()) 4778 return Error(CondLoc, "switch condition must have integer type"); 4779 4780 // Parse the jump table pairs. 4781 SmallPtrSet<Value*, 32> SeenCases; 4782 SmallVector<std::pair<ConstantInt*, BasicBlock*>, 32> Table; 4783 while (Lex.getKind() != lltok::rsquare) { 4784 Value *Constant; 4785 BasicBlock *DestBB; 4786 4787 if (ParseTypeAndValue(Constant, CondLoc, PFS) || 4788 ParseToken(lltok::comma, "expected ',' after case value") || 4789 ParseTypeAndBasicBlock(DestBB, PFS)) 4790 return true; 4791 4792 if (!SeenCases.insert(Constant).second) 4793 return Error(CondLoc, "duplicate case value in switch"); 4794 if (!isa<ConstantInt>(Constant)) 4795 return Error(CondLoc, "case value is not a constant integer"); 4796 4797 Table.push_back(std::make_pair(cast<ConstantInt>(Constant), DestBB)); 4798 } 4799 4800 Lex.Lex(); // Eat the ']'. 4801 4802 SwitchInst *SI = SwitchInst::Create(Cond, DefaultBB, Table.size()); 4803 for (unsigned i = 0, e = Table.size(); i != e; ++i) 4804 SI->addCase(Table[i].first, Table[i].second); 4805 Inst = SI; 4806 return false; 4807 } 4808 4809 /// ParseIndirectBr 4810 /// Instruction 4811 /// ::= 'indirectbr' TypeAndValue ',' '[' LabelList ']' 4812 bool LLParser::ParseIndirectBr(Instruction *&Inst, PerFunctionState &PFS) { 4813 LocTy AddrLoc; 4814 Value *Address; 4815 if (ParseTypeAndValue(Address, AddrLoc, PFS) || 4816 ParseToken(lltok::comma, "expected ',' after indirectbr address") || 4817 ParseToken(lltok::lsquare, "expected '[' with indirectbr")) 4818 return true; 4819 4820 if (!Address->getType()->isPointerTy()) 4821 return Error(AddrLoc, "indirectbr address must have pointer type"); 4822 4823 // Parse the destination list. 4824 SmallVector<BasicBlock*, 16> DestList; 4825 4826 if (Lex.getKind() != lltok::rsquare) { 4827 BasicBlock *DestBB; 4828 if (ParseTypeAndBasicBlock(DestBB, PFS)) 4829 return true; 4830 DestList.push_back(DestBB); 4831 4832 while (EatIfPresent(lltok::comma)) { 4833 if (ParseTypeAndBasicBlock(DestBB, PFS)) 4834 return true; 4835 DestList.push_back(DestBB); 4836 } 4837 } 4838 4839 if (ParseToken(lltok::rsquare, "expected ']' at end of block list")) 4840 return true; 4841 4842 IndirectBrInst *IBI = IndirectBrInst::Create(Address, DestList.size()); 4843 for (unsigned i = 0, e = DestList.size(); i != e; ++i) 4844 IBI->addDestination(DestList[i]); 4845 Inst = IBI; 4846 return false; 4847 } 4848 4849 4850 /// ParseInvoke 4851 /// ::= 'invoke' OptionalCallingConv OptionalAttrs Type Value ParamList 4852 /// OptionalAttrs 'to' TypeAndValue 'unwind' TypeAndValue 4853 bool LLParser::ParseInvoke(Instruction *&Inst, PerFunctionState &PFS) { 4854 LocTy CallLoc = Lex.getLoc(); 4855 AttrBuilder RetAttrs, FnAttrs; 4856 std::vector<unsigned> FwdRefAttrGrps; 4857 LocTy NoBuiltinLoc; 4858 unsigned CC; 4859 Type *RetType = nullptr; 4860 LocTy RetTypeLoc; 4861 ValID CalleeID; 4862 SmallVector<ParamInfo, 16> ArgList; 4863 4864 BasicBlock *NormalBB, *UnwindBB; 4865 if (ParseOptionalCallingConv(CC) || 4866 ParseOptionalReturnAttrs(RetAttrs) || 4867 ParseType(RetType, RetTypeLoc, true /*void allowed*/) || 4868 ParseValID(CalleeID) || 4869 ParseParameterList(ArgList, PFS) || 4870 ParseFnAttributeValuePairs(FnAttrs, FwdRefAttrGrps, false, 4871 NoBuiltinLoc) || 4872 ParseToken(lltok::kw_to, "expected 'to' in invoke") || 4873 ParseTypeAndBasicBlock(NormalBB, PFS) || 4874 ParseToken(lltok::kw_unwind, "expected 'unwind' in invoke") || 4875 ParseTypeAndBasicBlock(UnwindBB, PFS)) 4876 return true; 4877 4878 // If RetType is a non-function pointer type, then this is the short syntax 4879 // for the call, which means that RetType is just the return type. Infer the 4880 // rest of the function argument types from the arguments that are present. 4881 FunctionType *Ty = dyn_cast<FunctionType>(RetType); 4882 if (!Ty) { 4883 // Pull out the types of all of the arguments... 4884 std::vector<Type*> ParamTypes; 4885 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) 4886 ParamTypes.push_back(ArgList[i].V->getType()); 4887 4888 if (!FunctionType::isValidReturnType(RetType)) 4889 return Error(RetTypeLoc, "Invalid result type for LLVM function"); 4890 4891 Ty = FunctionType::get(RetType, ParamTypes, false); 4892 } 4893 4894 CalleeID.FTy = Ty; 4895 4896 // Look up the callee. 4897 Value *Callee; 4898 if (ConvertValIDToValue(PointerType::getUnqual(Ty), CalleeID, Callee, &PFS)) 4899 return true; 4900 4901 // Set up the Attribute for the function. 4902 SmallVector<AttributeSet, 8> Attrs; 4903 if (RetAttrs.hasAttributes()) 4904 Attrs.push_back(AttributeSet::get(RetType->getContext(), 4905 AttributeSet::ReturnIndex, 4906 RetAttrs)); 4907 4908 SmallVector<Value*, 8> Args; 4909 4910 // Loop through FunctionType's arguments and ensure they are specified 4911 // correctly. Also, gather any parameter attributes. 4912 FunctionType::param_iterator I = Ty->param_begin(); 4913 FunctionType::param_iterator E = Ty->param_end(); 4914 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) { 4915 Type *ExpectedTy = nullptr; 4916 if (I != E) { 4917 ExpectedTy = *I++; 4918 } else if (!Ty->isVarArg()) { 4919 return Error(ArgList[i].Loc, "too many arguments specified"); 4920 } 4921 4922 if (ExpectedTy && ExpectedTy != ArgList[i].V->getType()) 4923 return Error(ArgList[i].Loc, "argument is not of expected type '" + 4924 getTypeString(ExpectedTy) + "'"); 4925 Args.push_back(ArgList[i].V); 4926 if (ArgList[i].Attrs.hasAttributes(i + 1)) { 4927 AttrBuilder B(ArgList[i].Attrs, i + 1); 4928 Attrs.push_back(AttributeSet::get(RetType->getContext(), i + 1, B)); 4929 } 4930 } 4931 4932 if (I != E) 4933 return Error(CallLoc, "not enough parameters specified for call"); 4934 4935 if (FnAttrs.hasAttributes()) { 4936 if (FnAttrs.hasAlignmentAttr()) 4937 return Error(CallLoc, "invoke instructions may not have an alignment"); 4938 4939 Attrs.push_back(AttributeSet::get(RetType->getContext(), 4940 AttributeSet::FunctionIndex, 4941 FnAttrs)); 4942 } 4943 4944 // Finish off the Attribute and check them 4945 AttributeSet PAL = AttributeSet::get(Context, Attrs); 4946 4947 InvokeInst *II = InvokeInst::Create(Ty, Callee, NormalBB, UnwindBB, Args); 4948 II->setCallingConv(CC); 4949 II->setAttributes(PAL); 4950 ForwardRefAttrGroups[II] = FwdRefAttrGrps; 4951 Inst = II; 4952 return false; 4953 } 4954 4955 /// ParseResume 4956 /// ::= 'resume' TypeAndValue 4957 bool LLParser::ParseResume(Instruction *&Inst, PerFunctionState &PFS) { 4958 Value *Exn; LocTy ExnLoc; 4959 if (ParseTypeAndValue(Exn, ExnLoc, PFS)) 4960 return true; 4961 4962 ResumeInst *RI = ResumeInst::Create(Exn); 4963 Inst = RI; 4964 return false; 4965 } 4966 4967 bool LLParser::ParseExceptionArgs(SmallVectorImpl<Value *> &Args, 4968 PerFunctionState &PFS) { 4969 if (ParseToken(lltok::lsquare, "expected '[' in cleanuppad")) 4970 return true; 4971 4972 while (Lex.getKind() != lltok::rsquare) { 4973 // If this isn't the first argument, we need a comma. 4974 if (!Args.empty() && 4975 ParseToken(lltok::comma, "expected ',' in argument list")) 4976 return true; 4977 4978 // Parse the argument. 4979 LocTy ArgLoc; 4980 Type *ArgTy = nullptr; 4981 if (ParseType(ArgTy, ArgLoc)) 4982 return true; 4983 4984 Value *V; 4985 if (ArgTy->isMetadataTy()) { 4986 if (ParseMetadataAsValue(V, PFS)) 4987 return true; 4988 } else { 4989 if (ParseValue(ArgTy, V, PFS)) 4990 return true; 4991 } 4992 Args.push_back(V); 4993 } 4994 4995 Lex.Lex(); // Lex the ']'. 4996 return false; 4997 } 4998 4999 /// ParseCleanupRet 5000 /// ::= 'cleanupret' ('void' | TypeAndValue) unwind ('to' 'caller' | TypeAndValue) 5001 bool LLParser::ParseCleanupRet(Instruction *&Inst, PerFunctionState &PFS) { 5002 Type *RetTy = nullptr; 5003 Value *RetVal = nullptr; 5004 if (ParseType(RetTy, /*AllowVoid=*/true)) 5005 return true; 5006 5007 if (!RetTy->isVoidTy()) 5008 if (ParseValue(RetTy, RetVal, PFS)) 5009 return true; 5010 5011 if (ParseToken(lltok::kw_unwind, "expected 'unwind' in cleanupret")) 5012 return true; 5013 5014 BasicBlock *UnwindBB = nullptr; 5015 if (Lex.getKind() == lltok::kw_to) { 5016 Lex.Lex(); 5017 if (ParseToken(lltok::kw_caller, "expected 'caller' in cleanupret")) 5018 return true; 5019 } else { 5020 if (ParseTypeAndBasicBlock(UnwindBB, PFS)) { 5021 return true; 5022 } 5023 } 5024 5025 Inst = CleanupReturnInst::Create(Context, RetVal, UnwindBB); 5026 return false; 5027 } 5028 5029 /// ParseCatchRet 5030 /// ::= 'catchret' TypeAndValue 5031 bool LLParser::ParseCatchRet(Instruction *&Inst, PerFunctionState &PFS) { 5032 BasicBlock *BB; 5033 if (ParseTypeAndBasicBlock(BB, PFS)) 5034 return true; 5035 5036 Inst = CatchReturnInst::Create(BB); 5037 return false; 5038 } 5039 5040 /// ParseCatchPad 5041 /// ::= 'catchpad' Type ParamList 'to' TypeAndValue 'unwind' TypeAndValue 5042 bool LLParser::ParseCatchPad(Instruction *&Inst, PerFunctionState &PFS) { 5043 Type *RetType = nullptr; 5044 5045 SmallVector<Value *, 8> Args; 5046 if (ParseType(RetType, /*AllowVoid=*/true) || ParseExceptionArgs(Args, PFS)) 5047 return true; 5048 5049 BasicBlock *NormalBB, *UnwindBB; 5050 if (ParseToken(lltok::kw_to, "expected 'to' in catchpad") || 5051 ParseTypeAndBasicBlock(NormalBB, PFS) || 5052 ParseToken(lltok::kw_unwind, "expected 'unwind' in catchpad") || 5053 ParseTypeAndBasicBlock(UnwindBB, PFS)) 5054 return true; 5055 5056 Inst = CatchPadInst::Create(RetType, NormalBB, UnwindBB, Args); 5057 return false; 5058 } 5059 5060 /// ParseTerminatePad 5061 /// ::= 'terminatepad' ParamList 'to' TypeAndValue 5062 bool LLParser::ParseTerminatePad(Instruction *&Inst, PerFunctionState &PFS) { 5063 SmallVector<Value *, 8> Args; 5064 if (ParseExceptionArgs(Args, PFS)) 5065 return true; 5066 5067 if (ParseToken(lltok::kw_unwind, "expected 'unwind' in terminatepad")) 5068 return true; 5069 5070 BasicBlock *UnwindBB = nullptr; 5071 if (Lex.getKind() == lltok::kw_to) { 5072 Lex.Lex(); 5073 if (ParseToken(lltok::kw_caller, "expected 'caller' in terminatepad")) 5074 return true; 5075 } else { 5076 if (ParseTypeAndBasicBlock(UnwindBB, PFS)) { 5077 return true; 5078 } 5079 } 5080 5081 Inst = TerminatePadInst::Create(Context, UnwindBB, Args); 5082 return false; 5083 } 5084 5085 /// ParseCleanupPad 5086 /// ::= 'cleanuppad' ParamList 5087 bool LLParser::ParseCleanupPad(Instruction *&Inst, PerFunctionState &PFS) { 5088 Type *RetType = nullptr; 5089 5090 SmallVector<Value *, 8> Args; 5091 if (ParseType(RetType, /*AllowVoid=*/true) || ParseExceptionArgs(Args, PFS)) 5092 return true; 5093 5094 Inst = CleanupPadInst::Create(RetType, Args); 5095 return false; 5096 } 5097 5098 /// ParseCatchEndPad 5099 /// ::= 'catchendpad' unwind ('to' 'caller' | TypeAndValue) 5100 bool LLParser::ParseCatchEndPad(Instruction *&Inst, PerFunctionState &PFS) { 5101 if (ParseToken(lltok::kw_unwind, "expected 'unwind' in catchendpad")) 5102 return true; 5103 5104 BasicBlock *UnwindBB = nullptr; 5105 if (Lex.getKind() == lltok::kw_to) { 5106 Lex.Lex(); 5107 if (Lex.getKind() == lltok::kw_caller) { 5108 Lex.Lex(); 5109 } else { 5110 return true; 5111 } 5112 } else { 5113 if (ParseTypeAndBasicBlock(UnwindBB, PFS)) { 5114 return true; 5115 } 5116 } 5117 5118 Inst = CatchEndPadInst::Create(Context, UnwindBB); 5119 return false; 5120 } 5121 5122 //===----------------------------------------------------------------------===// 5123 // Binary Operators. 5124 //===----------------------------------------------------------------------===// 5125 5126 /// ParseArithmetic 5127 /// ::= ArithmeticOps TypeAndValue ',' Value 5128 /// 5129 /// If OperandType is 0, then any FP or integer operand is allowed. If it is 1, 5130 /// then any integer operand is allowed, if it is 2, any fp operand is allowed. 5131 bool LLParser::ParseArithmetic(Instruction *&Inst, PerFunctionState &PFS, 5132 unsigned Opc, unsigned OperandType) { 5133 LocTy Loc; Value *LHS, *RHS; 5134 if (ParseTypeAndValue(LHS, Loc, PFS) || 5135 ParseToken(lltok::comma, "expected ',' in arithmetic operation") || 5136 ParseValue(LHS->getType(), RHS, PFS)) 5137 return true; 5138 5139 bool Valid; 5140 switch (OperandType) { 5141 default: llvm_unreachable("Unknown operand type!"); 5142 case 0: // int or FP. 5143 Valid = LHS->getType()->isIntOrIntVectorTy() || 5144 LHS->getType()->isFPOrFPVectorTy(); 5145 break; 5146 case 1: Valid = LHS->getType()->isIntOrIntVectorTy(); break; 5147 case 2: Valid = LHS->getType()->isFPOrFPVectorTy(); break; 5148 } 5149 5150 if (!Valid) 5151 return Error(Loc, "invalid operand type for instruction"); 5152 5153 Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS); 5154 return false; 5155 } 5156 5157 /// ParseLogical 5158 /// ::= ArithmeticOps TypeAndValue ',' Value { 5159 bool LLParser::ParseLogical(Instruction *&Inst, PerFunctionState &PFS, 5160 unsigned Opc) { 5161 LocTy Loc; Value *LHS, *RHS; 5162 if (ParseTypeAndValue(LHS, Loc, PFS) || 5163 ParseToken(lltok::comma, "expected ',' in logical operation") || 5164 ParseValue(LHS->getType(), RHS, PFS)) 5165 return true; 5166 5167 if (!LHS->getType()->isIntOrIntVectorTy()) 5168 return Error(Loc,"instruction requires integer or integer vector operands"); 5169 5170 Inst = BinaryOperator::Create((Instruction::BinaryOps)Opc, LHS, RHS); 5171 return false; 5172 } 5173 5174 5175 /// ParseCompare 5176 /// ::= 'icmp' IPredicates TypeAndValue ',' Value 5177 /// ::= 'fcmp' FPredicates TypeAndValue ',' Value 5178 bool LLParser::ParseCompare(Instruction *&Inst, PerFunctionState &PFS, 5179 unsigned Opc) { 5180 // Parse the integer/fp comparison predicate. 5181 LocTy Loc; 5182 unsigned Pred; 5183 Value *LHS, *RHS; 5184 if (ParseCmpPredicate(Pred, Opc) || 5185 ParseTypeAndValue(LHS, Loc, PFS) || 5186 ParseToken(lltok::comma, "expected ',' after compare value") || 5187 ParseValue(LHS->getType(), RHS, PFS)) 5188 return true; 5189 5190 if (Opc == Instruction::FCmp) { 5191 if (!LHS->getType()->isFPOrFPVectorTy()) 5192 return Error(Loc, "fcmp requires floating point operands"); 5193 Inst = new FCmpInst(CmpInst::Predicate(Pred), LHS, RHS); 5194 } else { 5195 assert(Opc == Instruction::ICmp && "Unknown opcode for CmpInst!"); 5196 if (!LHS->getType()->isIntOrIntVectorTy() && 5197 !LHS->getType()->getScalarType()->isPointerTy()) 5198 return Error(Loc, "icmp requires integer operands"); 5199 Inst = new ICmpInst(CmpInst::Predicate(Pred), LHS, RHS); 5200 } 5201 return false; 5202 } 5203 5204 //===----------------------------------------------------------------------===// 5205 // Other Instructions. 5206 //===----------------------------------------------------------------------===// 5207 5208 5209 /// ParseCast 5210 /// ::= CastOpc TypeAndValue 'to' Type 5211 bool LLParser::ParseCast(Instruction *&Inst, PerFunctionState &PFS, 5212 unsigned Opc) { 5213 LocTy Loc; 5214 Value *Op; 5215 Type *DestTy = nullptr; 5216 if (ParseTypeAndValue(Op, Loc, PFS) || 5217 ParseToken(lltok::kw_to, "expected 'to' after cast value") || 5218 ParseType(DestTy)) 5219 return true; 5220 5221 if (!CastInst::castIsValid((Instruction::CastOps)Opc, Op, DestTy)) { 5222 CastInst::castIsValid((Instruction::CastOps)Opc, Op, DestTy); 5223 return Error(Loc, "invalid cast opcode for cast from '" + 5224 getTypeString(Op->getType()) + "' to '" + 5225 getTypeString(DestTy) + "'"); 5226 } 5227 Inst = CastInst::Create((Instruction::CastOps)Opc, Op, DestTy); 5228 return false; 5229 } 5230 5231 /// ParseSelect 5232 /// ::= 'select' TypeAndValue ',' TypeAndValue ',' TypeAndValue 5233 bool LLParser::ParseSelect(Instruction *&Inst, PerFunctionState &PFS) { 5234 LocTy Loc; 5235 Value *Op0, *Op1, *Op2; 5236 if (ParseTypeAndValue(Op0, Loc, PFS) || 5237 ParseToken(lltok::comma, "expected ',' after select condition") || 5238 ParseTypeAndValue(Op1, PFS) || 5239 ParseToken(lltok::comma, "expected ',' after select value") || 5240 ParseTypeAndValue(Op2, PFS)) 5241 return true; 5242 5243 if (const char *Reason = SelectInst::areInvalidOperands(Op0, Op1, Op2)) 5244 return Error(Loc, Reason); 5245 5246 Inst = SelectInst::Create(Op0, Op1, Op2); 5247 return false; 5248 } 5249 5250 /// ParseVA_Arg 5251 /// ::= 'va_arg' TypeAndValue ',' Type 5252 bool LLParser::ParseVA_Arg(Instruction *&Inst, PerFunctionState &PFS) { 5253 Value *Op; 5254 Type *EltTy = nullptr; 5255 LocTy TypeLoc; 5256 if (ParseTypeAndValue(Op, PFS) || 5257 ParseToken(lltok::comma, "expected ',' after vaarg operand") || 5258 ParseType(EltTy, TypeLoc)) 5259 return true; 5260 5261 if (!EltTy->isFirstClassType()) 5262 return Error(TypeLoc, "va_arg requires operand with first class type"); 5263 5264 Inst = new VAArgInst(Op, EltTy); 5265 return false; 5266 } 5267 5268 /// ParseExtractElement 5269 /// ::= 'extractelement' TypeAndValue ',' TypeAndValue 5270 bool LLParser::ParseExtractElement(Instruction *&Inst, PerFunctionState &PFS) { 5271 LocTy Loc; 5272 Value *Op0, *Op1; 5273 if (ParseTypeAndValue(Op0, Loc, PFS) || 5274 ParseToken(lltok::comma, "expected ',' after extract value") || 5275 ParseTypeAndValue(Op1, PFS)) 5276 return true; 5277 5278 if (!ExtractElementInst::isValidOperands(Op0, Op1)) 5279 return Error(Loc, "invalid extractelement operands"); 5280 5281 Inst = ExtractElementInst::Create(Op0, Op1); 5282 return false; 5283 } 5284 5285 /// ParseInsertElement 5286 /// ::= 'insertelement' TypeAndValue ',' TypeAndValue ',' TypeAndValue 5287 bool LLParser::ParseInsertElement(Instruction *&Inst, PerFunctionState &PFS) { 5288 LocTy Loc; 5289 Value *Op0, *Op1, *Op2; 5290 if (ParseTypeAndValue(Op0, Loc, PFS) || 5291 ParseToken(lltok::comma, "expected ',' after insertelement value") || 5292 ParseTypeAndValue(Op1, PFS) || 5293 ParseToken(lltok::comma, "expected ',' after insertelement value") || 5294 ParseTypeAndValue(Op2, PFS)) 5295 return true; 5296 5297 if (!InsertElementInst::isValidOperands(Op0, Op1, Op2)) 5298 return Error(Loc, "invalid insertelement operands"); 5299 5300 Inst = InsertElementInst::Create(Op0, Op1, Op2); 5301 return false; 5302 } 5303 5304 /// ParseShuffleVector 5305 /// ::= 'shufflevector' TypeAndValue ',' TypeAndValue ',' TypeAndValue 5306 bool LLParser::ParseShuffleVector(Instruction *&Inst, PerFunctionState &PFS) { 5307 LocTy Loc; 5308 Value *Op0, *Op1, *Op2; 5309 if (ParseTypeAndValue(Op0, Loc, PFS) || 5310 ParseToken(lltok::comma, "expected ',' after shuffle mask") || 5311 ParseTypeAndValue(Op1, PFS) || 5312 ParseToken(lltok::comma, "expected ',' after shuffle value") || 5313 ParseTypeAndValue(Op2, PFS)) 5314 return true; 5315 5316 if (!ShuffleVectorInst::isValidOperands(Op0, Op1, Op2)) 5317 return Error(Loc, "invalid shufflevector operands"); 5318 5319 Inst = new ShuffleVectorInst(Op0, Op1, Op2); 5320 return false; 5321 } 5322 5323 /// ParsePHI 5324 /// ::= 'phi' Type '[' Value ',' Value ']' (',' '[' Value ',' Value ']')* 5325 int LLParser::ParsePHI(Instruction *&Inst, PerFunctionState &PFS) { 5326 Type *Ty = nullptr; LocTy TypeLoc; 5327 Value *Op0, *Op1; 5328 5329 if (ParseType(Ty, TypeLoc) || 5330 ParseToken(lltok::lsquare, "expected '[' in phi value list") || 5331 ParseValue(Ty, Op0, PFS) || 5332 ParseToken(lltok::comma, "expected ',' after insertelement value") || 5333 ParseValue(Type::getLabelTy(Context), Op1, PFS) || 5334 ParseToken(lltok::rsquare, "expected ']' in phi value list")) 5335 return true; 5336 5337 bool AteExtraComma = false; 5338 SmallVector<std::pair<Value*, BasicBlock*>, 16> PHIVals; 5339 while (1) { 5340 PHIVals.push_back(std::make_pair(Op0, cast<BasicBlock>(Op1))); 5341 5342 if (!EatIfPresent(lltok::comma)) 5343 break; 5344 5345 if (Lex.getKind() == lltok::MetadataVar) { 5346 AteExtraComma = true; 5347 break; 5348 } 5349 5350 if (ParseToken(lltok::lsquare, "expected '[' in phi value list") || 5351 ParseValue(Ty, Op0, PFS) || 5352 ParseToken(lltok::comma, "expected ',' after insertelement value") || 5353 ParseValue(Type::getLabelTy(Context), Op1, PFS) || 5354 ParseToken(lltok::rsquare, "expected ']' in phi value list")) 5355 return true; 5356 } 5357 5358 if (!Ty->isFirstClassType()) 5359 return Error(TypeLoc, "phi node must have first class type"); 5360 5361 PHINode *PN = PHINode::Create(Ty, PHIVals.size()); 5362 for (unsigned i = 0, e = PHIVals.size(); i != e; ++i) 5363 PN->addIncoming(PHIVals[i].first, PHIVals[i].second); 5364 Inst = PN; 5365 return AteExtraComma ? InstExtraComma : InstNormal; 5366 } 5367 5368 /// ParseLandingPad 5369 /// ::= 'landingpad' Type 'personality' TypeAndValue 'cleanup'? Clause+ 5370 /// Clause 5371 /// ::= 'catch' TypeAndValue 5372 /// ::= 'filter' 5373 /// ::= 'filter' TypeAndValue ( ',' TypeAndValue )* 5374 bool LLParser::ParseLandingPad(Instruction *&Inst, PerFunctionState &PFS) { 5375 Type *Ty = nullptr; LocTy TyLoc; 5376 5377 if (ParseType(Ty, TyLoc)) 5378 return true; 5379 5380 std::unique_ptr<LandingPadInst> LP(LandingPadInst::Create(Ty, 0)); 5381 LP->setCleanup(EatIfPresent(lltok::kw_cleanup)); 5382 5383 while (Lex.getKind() == lltok::kw_catch || Lex.getKind() == lltok::kw_filter){ 5384 LandingPadInst::ClauseType CT; 5385 if (EatIfPresent(lltok::kw_catch)) 5386 CT = LandingPadInst::Catch; 5387 else if (EatIfPresent(lltok::kw_filter)) 5388 CT = LandingPadInst::Filter; 5389 else 5390 return TokError("expected 'catch' or 'filter' clause type"); 5391 5392 Value *V; 5393 LocTy VLoc; 5394 if (ParseTypeAndValue(V, VLoc, PFS)) 5395 return true; 5396 5397 // A 'catch' type expects a non-array constant. A filter clause expects an 5398 // array constant. 5399 if (CT == LandingPadInst::Catch) { 5400 if (isa<ArrayType>(V->getType())) 5401 Error(VLoc, "'catch' clause has an invalid type"); 5402 } else { 5403 if (!isa<ArrayType>(V->getType())) 5404 Error(VLoc, "'filter' clause has an invalid type"); 5405 } 5406 5407 Constant *CV = dyn_cast<Constant>(V); 5408 if (!CV) 5409 return Error(VLoc, "clause argument must be a constant"); 5410 LP->addClause(CV); 5411 } 5412 5413 Inst = LP.release(); 5414 return false; 5415 } 5416 5417 /// ParseCall 5418 /// ::= 'call' OptionalCallingConv OptionalAttrs Type Value 5419 /// ParameterList OptionalAttrs 5420 /// ::= 'tail' 'call' OptionalCallingConv OptionalAttrs Type Value 5421 /// ParameterList OptionalAttrs 5422 /// ::= 'musttail' 'call' OptionalCallingConv OptionalAttrs Type Value 5423 /// ParameterList OptionalAttrs 5424 bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS, 5425 CallInst::TailCallKind TCK) { 5426 AttrBuilder RetAttrs, FnAttrs; 5427 std::vector<unsigned> FwdRefAttrGrps; 5428 LocTy BuiltinLoc; 5429 unsigned CC; 5430 Type *RetType = nullptr; 5431 LocTy RetTypeLoc; 5432 ValID CalleeID; 5433 SmallVector<ParamInfo, 16> ArgList; 5434 LocTy CallLoc = Lex.getLoc(); 5435 5436 if ((TCK != CallInst::TCK_None && 5437 ParseToken(lltok::kw_call, "expected 'tail call'")) || 5438 ParseOptionalCallingConv(CC) || 5439 ParseOptionalReturnAttrs(RetAttrs) || 5440 ParseType(RetType, RetTypeLoc, true /*void allowed*/) || 5441 ParseValID(CalleeID) || 5442 ParseParameterList(ArgList, PFS, TCK == CallInst::TCK_MustTail, 5443 PFS.getFunction().isVarArg()) || 5444 ParseFnAttributeValuePairs(FnAttrs, FwdRefAttrGrps, false, 5445 BuiltinLoc)) 5446 return true; 5447 5448 // If RetType is a non-function pointer type, then this is the short syntax 5449 // for the call, which means that RetType is just the return type. Infer the 5450 // rest of the function argument types from the arguments that are present. 5451 FunctionType *Ty = dyn_cast<FunctionType>(RetType); 5452 if (!Ty) { 5453 // Pull out the types of all of the arguments... 5454 std::vector<Type*> ParamTypes; 5455 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) 5456 ParamTypes.push_back(ArgList[i].V->getType()); 5457 5458 if (!FunctionType::isValidReturnType(RetType)) 5459 return Error(RetTypeLoc, "Invalid result type for LLVM function"); 5460 5461 Ty = FunctionType::get(RetType, ParamTypes, false); 5462 } 5463 5464 CalleeID.FTy = Ty; 5465 5466 // Look up the callee. 5467 Value *Callee; 5468 if (ConvertValIDToValue(PointerType::getUnqual(Ty), CalleeID, Callee, &PFS)) 5469 return true; 5470 5471 // Set up the Attribute for the function. 5472 SmallVector<AttributeSet, 8> Attrs; 5473 if (RetAttrs.hasAttributes()) 5474 Attrs.push_back(AttributeSet::get(RetType->getContext(), 5475 AttributeSet::ReturnIndex, 5476 RetAttrs)); 5477 5478 SmallVector<Value*, 8> Args; 5479 5480 // Loop through FunctionType's arguments and ensure they are specified 5481 // correctly. Also, gather any parameter attributes. 5482 FunctionType::param_iterator I = Ty->param_begin(); 5483 FunctionType::param_iterator E = Ty->param_end(); 5484 for (unsigned i = 0, e = ArgList.size(); i != e; ++i) { 5485 Type *ExpectedTy = nullptr; 5486 if (I != E) { 5487 ExpectedTy = *I++; 5488 } else if (!Ty->isVarArg()) { 5489 return Error(ArgList[i].Loc, "too many arguments specified"); 5490 } 5491 5492 if (ExpectedTy && ExpectedTy != ArgList[i].V->getType()) 5493 return Error(ArgList[i].Loc, "argument is not of expected type '" + 5494 getTypeString(ExpectedTy) + "'"); 5495 Args.push_back(ArgList[i].V); 5496 if (ArgList[i].Attrs.hasAttributes(i + 1)) { 5497 AttrBuilder B(ArgList[i].Attrs, i + 1); 5498 Attrs.push_back(AttributeSet::get(RetType->getContext(), i + 1, B)); 5499 } 5500 } 5501 5502 if (I != E) 5503 return Error(CallLoc, "not enough parameters specified for call"); 5504 5505 if (FnAttrs.hasAttributes()) { 5506 if (FnAttrs.hasAlignmentAttr()) 5507 return Error(CallLoc, "call instructions may not have an alignment"); 5508 5509 Attrs.push_back(AttributeSet::get(RetType->getContext(), 5510 AttributeSet::FunctionIndex, 5511 FnAttrs)); 5512 } 5513 5514 // Finish off the Attribute and check them 5515 AttributeSet PAL = AttributeSet::get(Context, Attrs); 5516 5517 CallInst *CI = CallInst::Create(Ty, Callee, Args); 5518 CI->setTailCallKind(TCK); 5519 CI->setCallingConv(CC); 5520 CI->setAttributes(PAL); 5521 ForwardRefAttrGroups[CI] = FwdRefAttrGrps; 5522 Inst = CI; 5523 return false; 5524 } 5525 5526 //===----------------------------------------------------------------------===// 5527 // Memory Instructions. 5528 //===----------------------------------------------------------------------===// 5529 5530 /// ParseAlloc 5531 /// ::= 'alloca' 'inalloca'? Type (',' TypeAndValue)? (',' 'align' i32)? 5532 int LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS) { 5533 Value *Size = nullptr; 5534 LocTy SizeLoc, TyLoc; 5535 unsigned Alignment = 0; 5536 Type *Ty = nullptr; 5537 5538 bool IsInAlloca = EatIfPresent(lltok::kw_inalloca); 5539 5540 if (ParseType(Ty, TyLoc)) return true; 5541 5542 if (Ty->isFunctionTy() || !PointerType::isValidElementType(Ty)) 5543 return Error(TyLoc, "invalid type for alloca"); 5544 5545 bool AteExtraComma = false; 5546 if (EatIfPresent(lltok::comma)) { 5547 if (Lex.getKind() == lltok::kw_align) { 5548 if (ParseOptionalAlignment(Alignment)) return true; 5549 } else if (Lex.getKind() == lltok::MetadataVar) { 5550 AteExtraComma = true; 5551 } else { 5552 if (ParseTypeAndValue(Size, SizeLoc, PFS) || 5553 ParseOptionalCommaAlign(Alignment, AteExtraComma)) 5554 return true; 5555 } 5556 } 5557 5558 if (Size && !Size->getType()->isIntegerTy()) 5559 return Error(SizeLoc, "element count must have integer type"); 5560 5561 AllocaInst *AI = new AllocaInst(Ty, Size, Alignment); 5562 AI->setUsedWithInAlloca(IsInAlloca); 5563 Inst = AI; 5564 return AteExtraComma ? InstExtraComma : InstNormal; 5565 } 5566 5567 /// ParseLoad 5568 /// ::= 'load' 'volatile'? TypeAndValue (',' 'align' i32)? 5569 /// ::= 'load' 'atomic' 'volatile'? TypeAndValue 5570 /// 'singlethread'? AtomicOrdering (',' 'align' i32)? 5571 int LLParser::ParseLoad(Instruction *&Inst, PerFunctionState &PFS) { 5572 Value *Val; LocTy Loc; 5573 unsigned Alignment = 0; 5574 bool AteExtraComma = false; 5575 bool isAtomic = false; 5576 AtomicOrdering Ordering = NotAtomic; 5577 SynchronizationScope Scope = CrossThread; 5578 5579 if (Lex.getKind() == lltok::kw_atomic) { 5580 isAtomic = true; 5581 Lex.Lex(); 5582 } 5583 5584 bool isVolatile = false; 5585 if (Lex.getKind() == lltok::kw_volatile) { 5586 isVolatile = true; 5587 Lex.Lex(); 5588 } 5589 5590 Type *Ty; 5591 LocTy ExplicitTypeLoc = Lex.getLoc(); 5592 if (ParseType(Ty) || 5593 ParseToken(lltok::comma, "expected comma after load's type") || 5594 ParseTypeAndValue(Val, Loc, PFS) || 5595 ParseScopeAndOrdering(isAtomic, Scope, Ordering) || 5596 ParseOptionalCommaAlign(Alignment, AteExtraComma)) 5597 return true; 5598 5599 if (!Val->getType()->isPointerTy() || !Ty->isFirstClassType()) 5600 return Error(Loc, "load operand must be a pointer to a first class type"); 5601 if (isAtomic && !Alignment) 5602 return Error(Loc, "atomic load must have explicit non-zero alignment"); 5603 if (Ordering == Release || Ordering == AcquireRelease) 5604 return Error(Loc, "atomic load cannot use Release ordering"); 5605 5606 if (Ty != cast<PointerType>(Val->getType())->getElementType()) 5607 return Error(ExplicitTypeLoc, 5608 "explicit pointee type doesn't match operand's pointee type"); 5609 5610 Inst = new LoadInst(Ty, Val, "", isVolatile, Alignment, Ordering, Scope); 5611 return AteExtraComma ? InstExtraComma : InstNormal; 5612 } 5613 5614 /// ParseStore 5615 5616 /// ::= 'store' 'volatile'? TypeAndValue ',' TypeAndValue (',' 'align' i32)? 5617 /// ::= 'store' 'atomic' 'volatile'? TypeAndValue ',' TypeAndValue 5618 /// 'singlethread'? AtomicOrdering (',' 'align' i32)? 5619 int LLParser::ParseStore(Instruction *&Inst, PerFunctionState &PFS) { 5620 Value *Val, *Ptr; LocTy Loc, PtrLoc; 5621 unsigned Alignment = 0; 5622 bool AteExtraComma = false; 5623 bool isAtomic = false; 5624 AtomicOrdering Ordering = NotAtomic; 5625 SynchronizationScope Scope = CrossThread; 5626 5627 if (Lex.getKind() == lltok::kw_atomic) { 5628 isAtomic = true; 5629 Lex.Lex(); 5630 } 5631 5632 bool isVolatile = false; 5633 if (Lex.getKind() == lltok::kw_volatile) { 5634 isVolatile = true; 5635 Lex.Lex(); 5636 } 5637 5638 if (ParseTypeAndValue(Val, Loc, PFS) || 5639 ParseToken(lltok::comma, "expected ',' after store operand") || 5640 ParseTypeAndValue(Ptr, PtrLoc, PFS) || 5641 ParseScopeAndOrdering(isAtomic, Scope, Ordering) || 5642 ParseOptionalCommaAlign(Alignment, AteExtraComma)) 5643 return true; 5644 5645 if (!Ptr->getType()->isPointerTy()) 5646 return Error(PtrLoc, "store operand must be a pointer"); 5647 if (!Val->getType()->isFirstClassType()) 5648 return Error(Loc, "store operand must be a first class value"); 5649 if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType()) 5650 return Error(Loc, "stored value and pointer type do not match"); 5651 if (isAtomic && !Alignment) 5652 return Error(Loc, "atomic store must have explicit non-zero alignment"); 5653 if (Ordering == Acquire || Ordering == AcquireRelease) 5654 return Error(Loc, "atomic store cannot use Acquire ordering"); 5655 5656 Inst = new StoreInst(Val, Ptr, isVolatile, Alignment, Ordering, Scope); 5657 return AteExtraComma ? InstExtraComma : InstNormal; 5658 } 5659 5660 /// ParseCmpXchg 5661 /// ::= 'cmpxchg' 'weak'? 'volatile'? TypeAndValue ',' TypeAndValue ',' 5662 /// TypeAndValue 'singlethread'? AtomicOrdering AtomicOrdering 5663 int LLParser::ParseCmpXchg(Instruction *&Inst, PerFunctionState &PFS) { 5664 Value *Ptr, *Cmp, *New; LocTy PtrLoc, CmpLoc, NewLoc; 5665 bool AteExtraComma = false; 5666 AtomicOrdering SuccessOrdering = NotAtomic; 5667 AtomicOrdering FailureOrdering = NotAtomic; 5668 SynchronizationScope Scope = CrossThread; 5669 bool isVolatile = false; 5670 bool isWeak = false; 5671 5672 if (EatIfPresent(lltok::kw_weak)) 5673 isWeak = true; 5674 5675 if (EatIfPresent(lltok::kw_volatile)) 5676 isVolatile = true; 5677 5678 if (ParseTypeAndValue(Ptr, PtrLoc, PFS) || 5679 ParseToken(lltok::comma, "expected ',' after cmpxchg address") || 5680 ParseTypeAndValue(Cmp, CmpLoc, PFS) || 5681 ParseToken(lltok::comma, "expected ',' after cmpxchg cmp operand") || 5682 ParseTypeAndValue(New, NewLoc, PFS) || 5683 ParseScopeAndOrdering(true /*Always atomic*/, Scope, SuccessOrdering) || 5684 ParseOrdering(FailureOrdering)) 5685 return true; 5686 5687 if (SuccessOrdering == Unordered || FailureOrdering == Unordered) 5688 return TokError("cmpxchg cannot be unordered"); 5689 if (SuccessOrdering < FailureOrdering) 5690 return TokError("cmpxchg must be at least as ordered on success as failure"); 5691 if (FailureOrdering == Release || FailureOrdering == AcquireRelease) 5692 return TokError("cmpxchg failure ordering cannot include release semantics"); 5693 if (!Ptr->getType()->isPointerTy()) 5694 return Error(PtrLoc, "cmpxchg operand must be a pointer"); 5695 if (cast<PointerType>(Ptr->getType())->getElementType() != Cmp->getType()) 5696 return Error(CmpLoc, "compare value and pointer type do not match"); 5697 if (cast<PointerType>(Ptr->getType())->getElementType() != New->getType()) 5698 return Error(NewLoc, "new value and pointer type do not match"); 5699 if (!New->getType()->isIntegerTy()) 5700 return Error(NewLoc, "cmpxchg operand must be an integer"); 5701 unsigned Size = New->getType()->getPrimitiveSizeInBits(); 5702 if (Size < 8 || (Size & (Size - 1))) 5703 return Error(NewLoc, "cmpxchg operand must be power-of-two byte-sized" 5704 " integer"); 5705 5706 AtomicCmpXchgInst *CXI = new AtomicCmpXchgInst( 5707 Ptr, Cmp, New, SuccessOrdering, FailureOrdering, Scope); 5708 CXI->setVolatile(isVolatile); 5709 CXI->setWeak(isWeak); 5710 Inst = CXI; 5711 return AteExtraComma ? InstExtraComma : InstNormal; 5712 } 5713 5714 /// ParseAtomicRMW 5715 /// ::= 'atomicrmw' 'volatile'? BinOp TypeAndValue ',' TypeAndValue 5716 /// 'singlethread'? AtomicOrdering 5717 int LLParser::ParseAtomicRMW(Instruction *&Inst, PerFunctionState &PFS) { 5718 Value *Ptr, *Val; LocTy PtrLoc, ValLoc; 5719 bool AteExtraComma = false; 5720 AtomicOrdering Ordering = NotAtomic; 5721 SynchronizationScope Scope = CrossThread; 5722 bool isVolatile = false; 5723 AtomicRMWInst::BinOp Operation; 5724 5725 if (EatIfPresent(lltok::kw_volatile)) 5726 isVolatile = true; 5727 5728 switch (Lex.getKind()) { 5729 default: return TokError("expected binary operation in atomicrmw"); 5730 case lltok::kw_xchg: Operation = AtomicRMWInst::Xchg; break; 5731 case lltok::kw_add: Operation = AtomicRMWInst::Add; break; 5732 case lltok::kw_sub: Operation = AtomicRMWInst::Sub; break; 5733 case lltok::kw_and: Operation = AtomicRMWInst::And; break; 5734 case lltok::kw_nand: Operation = AtomicRMWInst::Nand; break; 5735 case lltok::kw_or: Operation = AtomicRMWInst::Or; break; 5736 case lltok::kw_xor: Operation = AtomicRMWInst::Xor; break; 5737 case lltok::kw_max: Operation = AtomicRMWInst::Max; break; 5738 case lltok::kw_min: Operation = AtomicRMWInst::Min; break; 5739 case lltok::kw_umax: Operation = AtomicRMWInst::UMax; break; 5740 case lltok::kw_umin: Operation = AtomicRMWInst::UMin; break; 5741 } 5742 Lex.Lex(); // Eat the operation. 5743 5744 if (ParseTypeAndValue(Ptr, PtrLoc, PFS) || 5745 ParseToken(lltok::comma, "expected ',' after atomicrmw address") || 5746 ParseTypeAndValue(Val, ValLoc, PFS) || 5747 ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering)) 5748 return true; 5749 5750 if (Ordering == Unordered) 5751 return TokError("atomicrmw cannot be unordered"); 5752 if (!Ptr->getType()->isPointerTy()) 5753 return Error(PtrLoc, "atomicrmw operand must be a pointer"); 5754 if (cast<PointerType>(Ptr->getType())->getElementType() != Val->getType()) 5755 return Error(ValLoc, "atomicrmw value and pointer type do not match"); 5756 if (!Val->getType()->isIntegerTy()) 5757 return Error(ValLoc, "atomicrmw operand must be an integer"); 5758 unsigned Size = Val->getType()->getPrimitiveSizeInBits(); 5759 if (Size < 8 || (Size & (Size - 1))) 5760 return Error(ValLoc, "atomicrmw operand must be power-of-two byte-sized" 5761 " integer"); 5762 5763 AtomicRMWInst *RMWI = 5764 new AtomicRMWInst(Operation, Ptr, Val, Ordering, Scope); 5765 RMWI->setVolatile(isVolatile); 5766 Inst = RMWI; 5767 return AteExtraComma ? InstExtraComma : InstNormal; 5768 } 5769 5770 /// ParseFence 5771 /// ::= 'fence' 'singlethread'? AtomicOrdering 5772 int LLParser::ParseFence(Instruction *&Inst, PerFunctionState &PFS) { 5773 AtomicOrdering Ordering = NotAtomic; 5774 SynchronizationScope Scope = CrossThread; 5775 if (ParseScopeAndOrdering(true /*Always atomic*/, Scope, Ordering)) 5776 return true; 5777 5778 if (Ordering == Unordered) 5779 return TokError("fence cannot be unordered"); 5780 if (Ordering == Monotonic) 5781 return TokError("fence cannot be monotonic"); 5782 5783 Inst = new FenceInst(Context, Ordering, Scope); 5784 return InstNormal; 5785 } 5786 5787 /// ParseGetElementPtr 5788 /// ::= 'getelementptr' 'inbounds'? TypeAndValue (',' TypeAndValue)* 5789 int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) { 5790 Value *Ptr = nullptr; 5791 Value *Val = nullptr; 5792 LocTy Loc, EltLoc; 5793 5794 bool InBounds = EatIfPresent(lltok::kw_inbounds); 5795 5796 Type *Ty = nullptr; 5797 LocTy ExplicitTypeLoc = Lex.getLoc(); 5798 if (ParseType(Ty) || 5799 ParseToken(lltok::comma, "expected comma after getelementptr's type") || 5800 ParseTypeAndValue(Ptr, Loc, PFS)) 5801 return true; 5802 5803 Type *BaseType = Ptr->getType(); 5804 PointerType *BasePointerType = dyn_cast<PointerType>(BaseType->getScalarType()); 5805 if (!BasePointerType) 5806 return Error(Loc, "base of getelementptr must be a pointer"); 5807 5808 if (Ty != BasePointerType->getElementType()) 5809 return Error(ExplicitTypeLoc, 5810 "explicit pointee type doesn't match operand's pointee type"); 5811 5812 SmallVector<Value*, 16> Indices; 5813 bool AteExtraComma = false; 5814 // GEP returns a vector of pointers if at least one of parameters is a vector. 5815 // All vector parameters should have the same vector width. 5816 unsigned GEPWidth = BaseType->isVectorTy() ? 5817 BaseType->getVectorNumElements() : 0; 5818 5819 while (EatIfPresent(lltok::comma)) { 5820 if (Lex.getKind() == lltok::MetadataVar) { 5821 AteExtraComma = true; 5822 break; 5823 } 5824 if (ParseTypeAndValue(Val, EltLoc, PFS)) return true; 5825 if (!Val->getType()->getScalarType()->isIntegerTy()) 5826 return Error(EltLoc, "getelementptr index must be an integer"); 5827 5828 if (Val->getType()->isVectorTy()) { 5829 unsigned ValNumEl = Val->getType()->getVectorNumElements(); 5830 if (GEPWidth && GEPWidth != ValNumEl) 5831 return Error(EltLoc, 5832 "getelementptr vector index has a wrong number of elements"); 5833 GEPWidth = ValNumEl; 5834 } 5835 Indices.push_back(Val); 5836 } 5837 5838 SmallPtrSet<Type*, 4> Visited; 5839 if (!Indices.empty() && !Ty->isSized(&Visited)) 5840 return Error(Loc, "base element of getelementptr must be sized"); 5841 5842 if (!GetElementPtrInst::getIndexedType(Ty, Indices)) 5843 return Error(Loc, "invalid getelementptr indices"); 5844 Inst = GetElementPtrInst::Create(Ty, Ptr, Indices); 5845 if (InBounds) 5846 cast<GetElementPtrInst>(Inst)->setIsInBounds(true); 5847 return AteExtraComma ? InstExtraComma : InstNormal; 5848 } 5849 5850 /// ParseExtractValue 5851 /// ::= 'extractvalue' TypeAndValue (',' uint32)+ 5852 int LLParser::ParseExtractValue(Instruction *&Inst, PerFunctionState &PFS) { 5853 Value *Val; LocTy Loc; 5854 SmallVector<unsigned, 4> Indices; 5855 bool AteExtraComma; 5856 if (ParseTypeAndValue(Val, Loc, PFS) || 5857 ParseIndexList(Indices, AteExtraComma)) 5858 return true; 5859 5860 if (!Val->getType()->isAggregateType()) 5861 return Error(Loc, "extractvalue operand must be aggregate type"); 5862 5863 if (!ExtractValueInst::getIndexedType(Val->getType(), Indices)) 5864 return Error(Loc, "invalid indices for extractvalue"); 5865 Inst = ExtractValueInst::Create(Val, Indices); 5866 return AteExtraComma ? InstExtraComma : InstNormal; 5867 } 5868 5869 /// ParseInsertValue 5870 /// ::= 'insertvalue' TypeAndValue ',' TypeAndValue (',' uint32)+ 5871 int LLParser::ParseInsertValue(Instruction *&Inst, PerFunctionState &PFS) { 5872 Value *Val0, *Val1; LocTy Loc0, Loc1; 5873 SmallVector<unsigned, 4> Indices; 5874 bool AteExtraComma; 5875 if (ParseTypeAndValue(Val0, Loc0, PFS) || 5876 ParseToken(lltok::comma, "expected comma after insertvalue operand") || 5877 ParseTypeAndValue(Val1, Loc1, PFS) || 5878 ParseIndexList(Indices, AteExtraComma)) 5879 return true; 5880 5881 if (!Val0->getType()->isAggregateType()) 5882 return Error(Loc0, "insertvalue operand must be aggregate type"); 5883 5884 Type *IndexedType = ExtractValueInst::getIndexedType(Val0->getType(), Indices); 5885 if (!IndexedType) 5886 return Error(Loc0, "invalid indices for insertvalue"); 5887 if (IndexedType != Val1->getType()) 5888 return Error(Loc1, "insertvalue operand and field disagree in type: '" + 5889 getTypeString(Val1->getType()) + "' instead of '" + 5890 getTypeString(IndexedType) + "'"); 5891 Inst = InsertValueInst::Create(Val0, Val1, Indices); 5892 return AteExtraComma ? InstExtraComma : InstNormal; 5893 } 5894 5895 //===----------------------------------------------------------------------===// 5896 // Embedded metadata. 5897 //===----------------------------------------------------------------------===// 5898 5899 /// ParseMDNodeVector 5900 /// ::= { Element (',' Element)* } 5901 /// Element 5902 /// ::= 'null' | TypeAndValue 5903 bool LLParser::ParseMDNodeVector(SmallVectorImpl<Metadata *> &Elts) { 5904 if (ParseToken(lltok::lbrace, "expected '{' here")) 5905 return true; 5906 5907 // Check for an empty list. 5908 if (EatIfPresent(lltok::rbrace)) 5909 return false; 5910 5911 do { 5912 // Null is a special case since it is typeless. 5913 if (EatIfPresent(lltok::kw_null)) { 5914 Elts.push_back(nullptr); 5915 continue; 5916 } 5917 5918 Metadata *MD; 5919 if (ParseMetadata(MD, nullptr)) 5920 return true; 5921 Elts.push_back(MD); 5922 } while (EatIfPresent(lltok::comma)); 5923 5924 return ParseToken(lltok::rbrace, "expected end of metadata node"); 5925 } 5926 5927 //===----------------------------------------------------------------------===// 5928 // Use-list order directives. 5929 //===----------------------------------------------------------------------===// 5930 bool LLParser::sortUseListOrder(Value *V, ArrayRef<unsigned> Indexes, 5931 SMLoc Loc) { 5932 if (V->use_empty()) 5933 return Error(Loc, "value has no uses"); 5934 5935 unsigned NumUses = 0; 5936 SmallDenseMap<const Use *, unsigned, 16> Order; 5937 for (const Use &U : V->uses()) { 5938 if (++NumUses > Indexes.size()) 5939 break; 5940 Order[&U] = Indexes[NumUses - 1]; 5941 } 5942 if (NumUses < 2) 5943 return Error(Loc, "value only has one use"); 5944 if (Order.size() != Indexes.size() || NumUses > Indexes.size()) 5945 return Error(Loc, "wrong number of indexes, expected " + 5946 Twine(std::distance(V->use_begin(), V->use_end()))); 5947 5948 V->sortUseList([&](const Use &L, const Use &R) { 5949 return Order.lookup(&L) < Order.lookup(&R); 5950 }); 5951 return false; 5952 } 5953 5954 /// ParseUseListOrderIndexes 5955 /// ::= '{' uint32 (',' uint32)+ '}' 5956 bool LLParser::ParseUseListOrderIndexes(SmallVectorImpl<unsigned> &Indexes) { 5957 SMLoc Loc = Lex.getLoc(); 5958 if (ParseToken(lltok::lbrace, "expected '{' here")) 5959 return true; 5960 if (Lex.getKind() == lltok::rbrace) 5961 return Lex.Error("expected non-empty list of uselistorder indexes"); 5962 5963 // Use Offset, Max, and IsOrdered to check consistency of indexes. The 5964 // indexes should be distinct numbers in the range [0, size-1], and should 5965 // not be in order. 5966 unsigned Offset = 0; 5967 unsigned Max = 0; 5968 bool IsOrdered = true; 5969 assert(Indexes.empty() && "Expected empty order vector"); 5970 do { 5971 unsigned Index; 5972 if (ParseUInt32(Index)) 5973 return true; 5974 5975 // Update consistency checks. 5976 Offset += Index - Indexes.size(); 5977 Max = std::max(Max, Index); 5978 IsOrdered &= Index == Indexes.size(); 5979 5980 Indexes.push_back(Index); 5981 } while (EatIfPresent(lltok::comma)); 5982 5983 if (ParseToken(lltok::rbrace, "expected '}' here")) 5984 return true; 5985 5986 if (Indexes.size() < 2) 5987 return Error(Loc, "expected >= 2 uselistorder indexes"); 5988 if (Offset != 0 || Max >= Indexes.size()) 5989 return Error(Loc, "expected distinct uselistorder indexes in range [0, size)"); 5990 if (IsOrdered) 5991 return Error(Loc, "expected uselistorder indexes to change the order"); 5992 5993 return false; 5994 } 5995 5996 /// ParseUseListOrder 5997 /// ::= 'uselistorder' Type Value ',' UseListOrderIndexes 5998 bool LLParser::ParseUseListOrder(PerFunctionState *PFS) { 5999 SMLoc Loc = Lex.getLoc(); 6000 if (ParseToken(lltok::kw_uselistorder, "expected uselistorder directive")) 6001 return true; 6002 6003 Value *V; 6004 SmallVector<unsigned, 16> Indexes; 6005 if (ParseTypeAndValue(V, PFS) || 6006 ParseToken(lltok::comma, "expected comma in uselistorder directive") || 6007 ParseUseListOrderIndexes(Indexes)) 6008 return true; 6009 6010 return sortUseListOrder(V, Indexes, Loc); 6011 } 6012 6013 /// ParseUseListOrderBB 6014 /// ::= 'uselistorder_bb' @foo ',' %bar ',' UseListOrderIndexes 6015 bool LLParser::ParseUseListOrderBB() { 6016 assert(Lex.getKind() == lltok::kw_uselistorder_bb); 6017 SMLoc Loc = Lex.getLoc(); 6018 Lex.Lex(); 6019 6020 ValID Fn, Label; 6021 SmallVector<unsigned, 16> Indexes; 6022 if (ParseValID(Fn) || 6023 ParseToken(lltok::comma, "expected comma in uselistorder_bb directive") || 6024 ParseValID(Label) || 6025 ParseToken(lltok::comma, "expected comma in uselistorder_bb directive") || 6026 ParseUseListOrderIndexes(Indexes)) 6027 return true; 6028 6029 // Check the function. 6030 GlobalValue *GV; 6031 if (Fn.Kind == ValID::t_GlobalName) 6032 GV = M->getNamedValue(Fn.StrVal); 6033 else if (Fn.Kind == ValID::t_GlobalID) 6034 GV = Fn.UIntVal < NumberedVals.size() ? NumberedVals[Fn.UIntVal] : nullptr; 6035 else 6036 return Error(Fn.Loc, "expected function name in uselistorder_bb"); 6037 if (!GV) 6038 return Error(Fn.Loc, "invalid function forward reference in uselistorder_bb"); 6039 auto *F = dyn_cast<Function>(GV); 6040 if (!F) 6041 return Error(Fn.Loc, "expected function name in uselistorder_bb"); 6042 if (F->isDeclaration()) 6043 return Error(Fn.Loc, "invalid declaration in uselistorder_bb"); 6044 6045 // Check the basic block. 6046 if (Label.Kind == ValID::t_LocalID) 6047 return Error(Label.Loc, "invalid numeric label in uselistorder_bb"); 6048 if (Label.Kind != ValID::t_LocalName) 6049 return Error(Label.Loc, "expected basic block name in uselistorder_bb"); 6050 Value *V = F->getValueSymbolTable().lookup(Label.StrVal); 6051 if (!V) 6052 return Error(Label.Loc, "invalid basic block in uselistorder_bb"); 6053 if (!isa<BasicBlock>(V)) 6054 return Error(Label.Loc, "expected basic block in uselistorder_bb"); 6055 6056 return sortUseListOrder(V, Indexes, Loc); 6057 } 6058