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