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