diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2007-03-19 18:40:50 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2007-03-19 18:40:50 +0000 |
commit | 93c40036c813a0b569a56aaefef09f5e4c561574 (patch) | |
tree | f7a5817c7004105b14d72d05e82e4fdab6b2d957 /lib/AsmParser/llvmAsmParser.cpp.cvs | |
parent | 186a43f1ad678b130e4f62387b55c136c773f7cf (diff) |
Regenerate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35174 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/llvmAsmParser.cpp.cvs')
-rw-r--r-- | lib/AsmParser/llvmAsmParser.cpp.cvs | 860 |
1 files changed, 437 insertions, 423 deletions
diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs index 9afa42490c..a47b9a59c6 100644 --- a/lib/AsmParser/llvmAsmParser.cpp.cvs +++ b/lib/AsmParser/llvmAsmParser.cpp.cvs @@ -408,13 +408,12 @@ static GlobalVariable *CurGV; typedef std::vector<Value *> ValueList; // Numbered defs static void -ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers, - std::map<const Type *,ValueList> *FutureLateResolvers = 0); +ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0); static struct PerModuleInfo { Module *CurrentModule; - std::map<const Type *, ValueList> Values; // Module level numbered definitions - std::map<const Type *,ValueList> LateResolveValues; + ValueList Values; // Module level numbered definitions + ValueList LateResolveValues; std::vector<PATypeHolder> Types; std::map<ValID, PATypeHolder> LateResolveTypes; @@ -532,17 +531,16 @@ static struct PerModuleInfo { static struct PerFunctionInfo { Function *CurrentFunction; // Pointer to current function being created - std::map<const Type*, ValueList> Values; // Keep track of #'d definitions - std::map<const Type*, ValueList> LateResolveValues; + ValueList Values; // Keep track of #'d definitions + unsigned NextValNum; + ValueList LateResolveValues; bool isDeclare; // Is this function a forward declararation? GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration. GlobalValue::VisibilityTypes Visibility; /// BBForwardRefs - When we see forward references to basic blocks, keep /// track of them here. - std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs; - std::vector<BasicBlock*> NumberedBlocks; - unsigned NextBBNum; + std::map<ValID, BasicBlock*> BBForwardRefs; inline PerFunctionInfo() { CurrentFunction = 0; @@ -553,16 +551,14 @@ static struct PerFunctionInfo { inline void FunctionStart(Function *M) { CurrentFunction = M; - NextBBNum = 0; + NextValNum = 0; } void FunctionDone() { - NumberedBlocks.clear(); - // Any forward referenced blocks left? if (!BBForwardRefs.empty()) { GenerateError("Undefined reference to label " + - BBForwardRefs.begin()->first->getName()); + BBForwardRefs.begin()->second->getName()); return; } @@ -570,6 +566,7 @@ static struct PerFunctionInfo { ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues); Values.clear(); // Clear out function local definitions + BBForwardRefs.clear(); CurrentFunction = 0; isDeclare = false; Linkage = GlobalValue::ExternalLinkage; @@ -584,14 +581,23 @@ static bool inFunctionScope() { return CurFun.CurrentFunction != 0; } // Code to handle definitions of all the types //===----------------------------------------------------------------------===// -static int InsertValue(Value *V, - std::map<const Type*,ValueList> &ValueTab = CurFun.Values) { - if (V->hasName()) return -1; // Is this a numbered definition? +static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) { + // Things that have names or are void typed don't get slot numbers + if (V->hasName() || (V->getType() == Type::VoidTy)) + return; - // Yes, insert the value into the value table... - ValueList &List = ValueTab[V->getType()]; - List.push_back(V); - return List.size()-1; + // In the case of function values, we have to allow for the forward reference + // of basic blocks, which are included in the numbering. Consequently, we keep + // track of the next insertion location with NextValNum. When a BB gets + // inserted, it could change the size of the CurFun.Values vector. + if (&ValueTab == &CurFun.Values) { + if (ValueTab.size() <= CurFun.NextValNum) + ValueTab.resize(CurFun.NextValNum+1); + ValueTab[CurFun.NextValNum++] = V; + return; + } + // For all other lists, its okay to just tack it on the back of the vector. + ValueTab.push_back(V); } static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) { @@ -638,11 +644,11 @@ static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) { return Typ; } -// getValNonImprovising - Look up the value specified by the provided type and +// getExistingVal - Look up the value specified by the provided type and // the provided ValID. If the value exists and has already been defined, return // it. Otherwise return null. // -static Value *getValNonImprovising(const Type *Ty, const ValID &D) { +static Value *getExistingVal(const Type *Ty, const ValID &D) { if (isa<FunctionType>(Ty)) { GenerateError("Functions are not values and " "must be referenced as pointers"); @@ -651,26 +657,29 @@ static Value *getValNonImprovising(const Type *Ty, const ValID &D) { switch (D.Type) { case ValID::LocalID: { // Is it a numbered definition? - // Module constants occupy the lowest numbered slots. - std::map<const Type*,ValueList>::iterator VI = CurFun.Values.find(Ty); - // Make sure that our type is within bounds. - if (VI == CurFun.Values.end()) return 0; - // Check that the number is within bounds. - if (D.Num >= VI->second.size()) return 0; - - return VI->second[D.Num]; + if (D.Num >= CurFun.Values.size()) + return 0; + Value *Result = CurFun.Values[D.Num]; + if (Ty != Result->getType()) { + GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" + + Result->getType()->getDescription() + "' does not match " + "expected type, '" + Ty->getDescription() + "'"); + return 0; + } + return Result; } case ValID::GlobalID: { // Is it a numbered definition? - unsigned Num = D.Num; - - // Module constants occupy the lowest numbered slots... - std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty); - if (VI == CurModule.Values.end()) + if (D.Num >= CurModule.Values.size()) return 0; - if (D.Num >= VI->second.size()) + Value *Result = CurModule.Values[D.Num]; + if (Ty != Result->getType()) { + GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" + + Result->getType()->getDescription() + "' does not match " + "expected type, '" + Ty->getDescription() + "'"); return 0; - return VI->second[Num]; + } + return Result; } case ValID::LocalName: { // Is it a named definition? @@ -771,7 +780,7 @@ static Value *getValNonImprovising(const Type *Ty, const ValID &D) { return 0; } -// getVal - This function is identical to getValNonImprovising, except that if a +// getVal - This function is identical to getExistingVal, except that if a // value is not already defined, it "improvises" by creating a placeholder var // that looks and acts just like the requested variable. When the value is // defined later, all uses of the placeholder variable are replaced with the @@ -784,7 +793,7 @@ static Value *getVal(const Type *Ty, const ValID &ID) { } // See if the value has already been defined. - Value *V = getValNonImprovising(Ty, ID); + Value *V = getExistingVal(Ty, ID); if (V) return V; if (TriggerError) return 0; @@ -811,69 +820,97 @@ static Value *getVal(const Type *Ty, const ValID &ID) { return V; } -/// getBBVal - This is used for two purposes: -/// * If isDefinition is true, a new basic block with the specified ID is being -/// defined. -/// * If isDefinition is true, this is a reference to a basic block, which may -/// or may not be a forward reference. -/// -static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { +/// defineBBVal - This is a definition of a new basic block with the specified +/// identifier which must be the same as CurFun.NextValNum, if its numeric. +static BasicBlock *defineBBVal(const ValID &ID) { assert(inFunctionScope() && "Can't get basic block at global scope!"); - std::string Name; BasicBlock *BB = 0; - switch (ID.Type) { - default: - GenerateError("Illegal label reference " + ID.getName()); - return 0; - case ValID::LocalID: // Is it a numbered definition? - if (ID.Num >= CurFun.NumberedBlocks.size()) - CurFun.NumberedBlocks.resize(ID.Num+1); - BB = CurFun.NumberedBlocks[ID.Num]; - break; - case ValID::LocalName: // Is it a named definition? - Name = ID.Name; - Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name); - if (N && N->getType()->getTypeID() == Type::LabelTyID) - BB = cast<BasicBlock>(N); - break; - } - // See if the block has already been defined. - if (BB) { - // If this is the definition of the block, make sure the existing value was - // just a forward reference. If it was a forward reference, there will be - // an entry for it in the PlaceHolderInfo map. - if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) { - // The existing value was a definition, not a forward reference. - GenerateError("Redefinition of label " + ID.getName()); - return 0; + // First, see if this was forward referenced + + std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID); + if (BBI != CurFun.BBForwardRefs.end()) { + BB = BBI->second; + // The forward declaration could have been inserted anywhere in the + // function: insert it into the correct place now. + CurFun.CurrentFunction->getBasicBlockList().remove(BB); + CurFun.CurrentFunction->getBasicBlockList().push_back(BB); + + // Erase the forward ref from the map as its no longer "forward" + CurFun.BBForwardRefs.erase(ID); + + // If its a numbered definition, bump the number and set the BB value. + if (ID.Type == ValID::LocalID) { + assert(ID.Num == CurFun.NextValNum && "Invalid new block number"); + InsertValue(BB); } - ID.destroy(); // Free strdup'd memory. + ID.destroy(); return BB; + } + + // We haven't seen this BB before and its first mention is a definition. + // Just create it and return it. + std::string Name (ID.Type == ValID::LocalName ? ID.Name : ""); + BB = new BasicBlock(Name, CurFun.CurrentFunction); + if (ID.Type == ValID::LocalID) { + assert(ID.Num == CurFun.NextValNum && "Invalid new block number"); + InsertValue(BB); } - // Otherwise this block has not been seen before. - BB = new BasicBlock("", CurFun.CurrentFunction); - if (ID.Type == ValID::LocalName) { - BB->setName(ID.Name); + ID.destroy(); // Free strdup'd memory + return BB; +} + +/// getBBVal - get an existing BB value or create a forward reference for it. +/// +static BasicBlock *getBBVal(const ValID &ID) { + assert(inFunctionScope() && "Can't get basic block at global scope!"); + + BasicBlock *BB = 0; + + std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID); + if (BBI != CurFun.BBForwardRefs.end()) { + BB = BBI->second; + } if (ID.Type == ValID::LocalName) { + std::string Name = ID.Name; + Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name); + if (N) + if (N->getType()->getTypeID() == Type::LabelTyID) + BB = cast<BasicBlock>(N); + else + GenerateError("Reference to label '" + Name + "' is actually of type '"+ + N->getType()->getDescription() + "'"); + } else if (ID.Type == ValID::LocalID) { + if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) { + if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID) + BB = cast<BasicBlock>(CurFun.Values[ID.Num]); + else + GenerateError("Reference to label '%" + utostr(ID.Num) + + "' is actually of type '"+ + CurFun.Values[ID.Num]->getType()->getDescription() + "'"); + } } else { - CurFun.NumberedBlocks[ID.Num] = BB; + GenerateError("Illegal label reference " + ID.getName()); + return 0; } - // If this is not a definition, keep track of it so we can use it as a forward - // reference. - if (!isDefinition) { - // Remember where this forward reference came from. - CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno); - } else { - // The forward declaration could have been inserted anywhere in the - // function: insert it into the correct place now. - CurFun.CurrentFunction->getBasicBlockList().remove(BB); - CurFun.CurrentFunction->getBasicBlockList().push_back(BB); + // If its already been defined, return it now. + if (BB) { + ID.destroy(); // Free strdup'd memory. + return BB; } - ID.destroy(); + + // Otherwise, this block has not been seen before, create it. + std::string Name; + if (ID.Type == ValID::LocalName) + Name = ID.Name; + BB = new BasicBlock(Name, CurFun.CurrentFunction); + + // Insert it in the forward refs map. + CurFun.BBForwardRefs[ID] = BB; + return BB; } @@ -895,50 +932,44 @@ static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) { // defs now... // static void -ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers, - std::map<const Type*,ValueList> *FutureLateResolvers) { +ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) { // Loop over LateResolveDefs fixing up stuff that couldn't be resolved - for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(), - E = LateResolvers.end(); LRI != E; ++LRI) { - ValueList &List = LRI->second; - while (!List.empty()) { - Value *V = List.back(); - List.pop_back(); + while (!LateResolvers.empty()) { + Value *V = LateResolvers.back(); + LateResolvers.pop_back(); - std::map<Value*, std::pair<ValID, int> >::iterator PHI = - CurModule.PlaceHolderInfo.find(V); - assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!"); + std::map<Value*, std::pair<ValID, int> >::iterator PHI = + CurModule.PlaceHolderInfo.find(V); + assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!"); - ValID &DID = PHI->second.first; + ValID &DID = PHI->second.first; - Value *TheRealValue = getValNonImprovising(LRI->first, DID); - if (TriggerError) + Value *TheRealValue = getExistingVal(V->getType(), DID); + if (TriggerError) + return; + if (TheRealValue) { + V->replaceAllUsesWith(TheRealValue); + delete V; + CurModule.PlaceHolderInfo.erase(PHI); + } else if (FutureLateResolvers) { + // Functions have their unresolved items forwarded to the module late + // resolver table + InsertValue(V, *FutureLateResolvers); + } else { + if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) { + GenerateError("Reference to an invalid definition: '" +DID.getName()+ + "' of type '" + V->getType()->getDescription() + "'", + PHI->second.second); return; - if (TheRealValue) { - V->replaceAllUsesWith(TheRealValue); - delete V; - CurModule.PlaceHolderInfo.erase(PHI); - } else if (FutureLateResolvers) { - // Functions have their unresolved items forwarded to the module late - // resolver table - InsertValue(V, *FutureLateResolvers); } else { - if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) { - GenerateError("Reference to an invalid definition: '" +DID.getName()+ - "' of type '" + V->getType()->getDescription() + "'", - PHI->second.second); - return; - } else { - GenerateError("Reference to an invalid definition: #" + - itostr(DID.Num) + " of type '" + - V->getType()->getDescription() + "'", - PHI->second.second); - return; - } + GenerateError("Reference to an invalid definition: #" + + itostr(DID.Num) + " of type '" + + V->getType()->getDescription() + "'", + PHI->second.second); + return; } } } - LateResolvers.clear(); } @@ -1012,7 +1043,7 @@ ParseGlobalVariable(char *NameStr, if (!Name.empty()) { ID = ValID::createGlobalName((char*)Name.c_str()); } else { - ID = ValID::createGlobalID(CurModule.Values[PTy].size()); + ID = ValID::createGlobalID(CurModule.Values.size()); } if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) { @@ -1241,7 +1272,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) { #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 901 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 932 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -1289,7 +1320,7 @@ typedef union YYSTYPE { llvm::FCmpInst::Predicate FPredicate; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 1293 "llvmAsmParser.tab.c" +#line 1324 "llvmAsmParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -1301,7 +1332,7 @@ typedef union YYSTYPE { /* Line 219 of yacc.c. */ -#line 1305 "llvmAsmParser.tab.c" +#line 1336 "llvmAsmParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -1649,35 +1680,35 @@ static const short int yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, - 1055, 1056, 1056, 1056, 1056, 1056, 1056, 1057, 1057, 1057, - 1057, 1057, 1057, 1058, 1058, 1058, 1058, 1058, 1058, 1061, - 1061, 1062, 1062, 1063, 1063, 1064, 1064, 1065, 1065, 1069, - 1069, 1070, 1070, 1071, 1071, 1072, 1072, 1073, 1073, 1074, - 1074, 1075, 1075, 1076, 1077, 1082, 1083, 1083, 1085, 1085, - 1086, 1086, 1090, 1094, 1099, 1099, 1101, 1105, 1111, 1112, - 1113, 1114, 1115, 1119, 1120, 1121, 1125, 1126, 1130, 1131, - 1132, 1136, 1137, 1138, 1139, 1140, 1143, 1144, 1145, 1146, - 1147, 1148, 1149, 1156, 1157, 1158, 1159, 1162, 1163, 1168, - 1169, 1172, 1173, 1180, 1181, 1187, 1188, 1196, 1204, 1205, - 1210, 1211, 1212, 1217, 1230, 1230, 1230, 1230, 1233, 1237, - 1241, 1248, 1253, 1261, 1279, 1297, 1302, 1314, 1324, 1328, - 1338, 1345, 1352, 1359, 1364, 1369, 1376, 1377, 1384, 1391, - 1399, 1404, 1415, 1443, 1459, 1488, 1516, 1541, 1560, 1586, - 1606, 1618, 1625, 1691, 1701, 1711, 1720, 1730, 1738, 1748, - 1753, 1758, 1766, 1778, 1800, 1808, 1814, 1825, 1830, 1835, - 1841, 1847, 1856, 1860, 1868, 1868, 1879, 1884, 1892, 1893, - 1897, 1897, 1901, 1901, 1904, 1907, 1919, 1943, 1954, 1954, - 1964, 1964, 1972, 1972, 1982, 1985, 1991, 2004, 2008, 2013, - 2015, 2020, 2025, 2034, 2044, 2055, 2059, 2068, 2077, 2082, - 2194, 2194, 2196, 2205, 2205, 2207, 2212, 2224, 2228, 2233, - 2237, 2241, 2245, 2249, 2253, 2257, 2261, 2265, 2290, 2294, - 2308, 2312, 2316, 2320, 2326, 2326, 2332, 2341, 2345, 2354, - 2364, 2373, 2385, 2398, 2402, 2406, 2411, 2421, 2440, 2449, - 2516, 2520, 2527, 2538, 2551, 2561, 2572, 2582, 2590, 2598, - 2601, 2602, 2609, 2613, 2618, 2639, 2656, 2669, 2682, 2694, - 2702, 2709, 2715, 2721, 2727, 2742, 2806, 2811, 2815, 2822, - 2829, 2837, 2844, 2852, 2860, 2874, 2891 + 0, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, 1087, 1087, 1087, 1087, 1087, 1087, 1088, 1088, 1088, + 1088, 1088, 1088, 1089, 1089, 1089, 1089, 1089, 1089, 1092, + 1092, 1093, 1093, 1094, 1094, 1095, 1095, 1096, 1096, 1100, + 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1104, 1104, 1105, + 1105, 1106, 1106, 1107, 1108, 1113, 1114, 1114, 1116, 1116, + 1117, 1117, 1121, 1125, 1130, 1130, 1132, 1136, 1142, 1143, + 1144, 1145, 1146, 1150, 1151, 1152, 1156, 1157, 1161, 1162, + 1163, 1167, 1168, 1169, 1170, 1171, 1174, 1175, 1176, 1177, + 1178, 1179, 1180, 1187, 1188, 1189, 1190, 1193, 1194, 1199, + 1200, 1203, 1204, 1211, 1212, 1218, 1219, 1227, 1235, 1236, + 1241, 1242, 1243, 1248, 1261, 1261, 1261, 1261, 1264, 1268, + 1272, 1279, 1284, 1292, 1310, 1328, 1333, 1345, 1355, 1359, + 1369, 1376, 1383, 1390, 1395, 1400, 1407, 1408, 1415, 1422, + 1430, 1435, 1446, 1474, 1490, 1519, 1547, 1572, 1591, 1617, + 1637, 1649, 1656, 1722, 1732, 1742, 1751, 1761, 1769, 1779, + 1784, 1789, 1797, 1809, 1831, 1839, 1845, 1856, 1861, 1866, + 1872, 1878, 1887, 1891, 1899, 1899, 1910, 1915, 1923, 1924, + 1928, 1928, 1932, 1932, 1935, 1938, 1950, 1974, 1985, 1985, + 1995, 1995, 2003, 2003, 2013, 2016, 2022, 2035, 2039, 2044, + 2046, 2051, 2056, 2065, 2075, 2086, 2090, 2099, 2108, 2113, + 2225, 2225, 2227, 2236, 2236, 2238, 2243, 2255, 2259, 2264, + 2268, 2272, 2276, 2280, 2284, 2288, 2292, 2296, 2321, 2325, + 2339, 2343, 2347, 2351, 2357, 2357, 2363, 2372, 2376, 2385, + 2394, 2403, 2407, 2412, 2416, 2420, 2425, 2435, 2454, 2463, + 2530, 2534, 2541, 2552, 2565, 2575, 2586, 2596, 2604, 2612, + 2615, 2616, 2623, 2627, 2632, 2653, 2670, 2683, 2696, 2708, + 2716, 2723, 2729, 2735, 2741, 2756, 2820, 2825, 2829, 2836, + 2843, 2851, 2858, 2866, 2874, 2888, 2905 }; #endif @@ -2999,142 +3030,142 @@ yyreduce: switch (yyn) { case 29: -#line 1061 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;} break; case 30: -#line 1061 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1092 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;} break; case 31: -#line 1062 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1093 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;} break; case 32: -#line 1062 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1093 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;} break; case 33: -#line 1063 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;} break; case 34: -#line 1063 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;} break; case 35: -#line 1064 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;} break; case 36: -#line 1064 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1095 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;} break; case 37: -#line 1065 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;} break; case 38: -#line 1065 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;} break; case 39: -#line 1069 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;} break; case 40: -#line 1069 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;} break; case 41: -#line 1070 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;} break; case 42: -#line 1070 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;} break; case 43: -#line 1071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;} break; case 44: -#line 1071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;} break; case 45: -#line 1072 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;} break; case 46: -#line 1072 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;} break; case 47: -#line 1073 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;} break; case 48: -#line 1073 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;} break; case 49: -#line 1074 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;} break; case 50: -#line 1074 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;} break; case 51: -#line 1075 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1106 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;} break; case 52: -#line 1075 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1106 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;} break; case 53: -#line 1076 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;} break; case 54: -#line 1077 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;} break; case 61: -#line 1086 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1117 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; ;} break; case 62: -#line 1090 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1121 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); CHECK_FOR_ERROR @@ -3142,7 +3173,7 @@ yyreduce: break; case 63: -#line 1094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1125 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; CHECK_FOR_ERROR @@ -3150,7 +3181,7 @@ yyreduce: break; case 66: -#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); CHECK_FOR_ERROR @@ -3158,7 +3189,7 @@ yyreduce: break; case 67: -#line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1136 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.StrVal) = 0; CHECK_FOR_ERROR @@ -3166,127 +3197,127 @@ yyreduce: break; case 68: -#line 1111 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1142 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 69: -#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 70: -#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1144 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 71: -#line 1114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1145 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} break; case 72: -#line 1115 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1146 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 73: -#line 1119 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 74: -#line 1120 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1151 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 75: -#line 1121 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1152 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 76: -#line 1125 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1156 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;} break; case 77: -#line 1126 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;} break; case 78: -#line 1130 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1161 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 79: -#line 1131 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1162 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 80: -#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 81: -#line 1136 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1167 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 82: -#line 1137 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1168 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 83: -#line 1138 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 84: -#line 1139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1170 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 85: -#line 1140 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1171 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 86: -#line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::C; ;} break; case 87: -#line 1144 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1175 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::C; ;} break; case 88: -#line 1145 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1176 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::Fast; ;} break; case 89: -#line 1146 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1177 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::Cold; ;} break; case 90: -#line 1147 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::X86_StdCall; ;} break; case 91: -#line 1148 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1179 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = CallingConv::X86_FastCall; ;} break; case 92: -#line 1149 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1180 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val)) GEN_ERROR("Calling conv too large"); @@ -3296,61 +3327,61 @@ yyreduce: break; case 93: -#line 1156 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;} break; case 94: -#line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1188 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;} break; case 95: -#line 1158 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1189 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::InRegAttribute; ;} break; case 96: -#line 1159 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1190 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;} break; case 97: -#line 1162 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1193 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;} break; case 98: -#line 1163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs)); ;} break; case 99: -#line 1168 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1199 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;} break; case 101: -#line 1172 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1203 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;} break; case 102: -#line 1173 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1204 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs)); ;} break; case 103: -#line 1180 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" +#line 1211 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" { (yyval.UIntVal) = 0; ;} break; case 104: -#line 1181 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y" < |