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