aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-10-26 06:15:43 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-10-26 06:15:43 +0000
commit1628cec4d7fce310d9cde0bcc73997e5a71692c4 (patch)
tree6dff5a70de8406b153e32fdd2d60c782d6202f63 /lib
parent7043d00750c558a518d08a638638ebe4d241f159 (diff)
For PR950:
Make necessary changes to support DIV -> [SUF]Div. This changes llvm to have three division instructions: signed, unsigned, floating point. The bytecode and assembler are bacwards compatible, however. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31195 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/ScalarEvolution.cpp29
-rw-r--r--lib/AsmParser/Lexer.l17
-rw-r--r--lib/AsmParser/ParserInternals.h16
-rw-r--r--lib/AsmParser/llvmAsmParser.cpp.cvs2224
-rw-r--r--lib/AsmParser/llvmAsmParser.h.cvs132
-rw-r--r--lib/AsmParser/llvmAsmParser.y83
-rw-r--r--lib/AsmParser/llvmAsmParser.y.cvs83
-rw-r--r--lib/Bytecode/Reader/Reader.cpp1070
-rw-r--r--lib/Bytecode/Reader/Reader.h19
-rw-r--r--lib/Bytecode/Writer/Writer.cpp2
-rw-r--r--lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp68
-rw-r--r--lib/ExecutionEngine/Interpreter/Execution.cpp62
-rw-r--r--lib/Target/CBackend/CBackend.cpp168
-rw-r--r--lib/Target/CBackend/Writer.cpp168
-rw-r--r--lib/Target/README.txt13
-rw-r--r--lib/Transforms/IPO/SimplifyLibCalls.cpp2
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp381
-rw-r--r--lib/Transforms/Scalar/PredicateSimplifier.cpp4
-rw-r--r--lib/Transforms/Scalar/Reassociate.cpp4
-rw-r--r--lib/VMCore/ConstantFold.cpp82
-rw-r--r--lib/VMCore/Constants.cpp30
-rw-r--r--lib/VMCore/Instruction.cpp8
-rw-r--r--lib/VMCore/Instructions.cpp18
23 files changed, 2881 insertions, 1802 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp
index a992e51e0f..20e3859b63 100644
--- a/lib/Analysis/ScalarEvolution.cpp
+++ b/lib/Analysis/ScalarEvolution.cpp
@@ -989,9 +989,9 @@ SCEVHandle SCEVMulExpr::get(std::vector<SCEVHandle> &Ops) {
SCEVHandle SCEVSDivExpr::get(const SCEVHandle &LHS, const SCEVHandle &RHS) {
if (SCEVConstant *RHSC = dyn_cast<SCEVConstant>(RHS)) {
if (RHSC->getValue()->equalsInt(1))
- return LHS; // X /s 1 --> x
+ return LHS; // X sdiv 1 --> x
if (RHSC->getValue()->isAllOnesValue())
- return SCEV::getNegativeSCEV(LHS); // X /s -1 --> -x
+ return SCEV::getNegativeSCEV(LHS); // X sdiv -1 --> -x
if (SCEVConstant *LHSC = dyn_cast<SCEVConstant>(LHS)) {
Constant *LHSCV = LHSC->getValue();
@@ -1001,7 +1001,7 @@ SCEVHandle SCEVSDivExpr::get(const SCEVHandle &LHS, const SCEVHandle &RHS) {
LHSCV->getType()->getSignedVersion());
if (RHSCV->getType()->isUnsigned())
RHSCV = ConstantExpr::getCast(RHSCV, LHSCV->getType());
- return SCEVUnknown::get(ConstantExpr::getDiv(LHSCV, RHSCV));
+ return SCEVUnknown::get(ConstantExpr::getSDiv(LHSCV, RHSCV));
}
}
@@ -1384,10 +1384,9 @@ SCEVHandle ScalarEvolutionsImpl::createSCEV(Value *V) {
case Instruction::Mul:
return SCEVMulExpr::get(getSCEV(I->getOperand(0)),
getSCEV(I->getOperand(1)));
- case Instruction::Div:
- if (V->getType()->isInteger() && V->getType()->isSigned())
- return SCEVSDivExpr::get(getSCEV(I->getOperand(0)),
- getSCEV(I->getOperand(1)));
+ case Instruction::SDiv:
+ return SCEVSDivExpr::get(getSCEV(I->getOperand(0)),
+ getSCEV(I->getOperand(1)));
break;
case Instruction::Sub:
@@ -2058,16 +2057,16 @@ SolveQuadraticEquation(const SCEVAddRecExpr *AddRec) {
return std::make_pair(CNC, CNC);
}
- Constant *Two = ConstantInt::get(L->getValue()->getType(), 2);
+ Constant *C = L->getValue();
+ Constant *Two = ConstantInt::get(C->getType(), 2);
// Convert from chrec coefficients to polynomial coefficients AX^2+BX+C
- Constant *C = L->getValue();
// The B coefficient is M-N/2
Constant *B = ConstantExpr::getSub(M->getValue(),
- ConstantExpr::getDiv(N->getValue(),
+ ConstantExpr::getSDiv(N->getValue(),
Two));
// The A coefficient is N/2
- Constant *A = ConstantExpr::getDiv(N->getValue(), Two);
+ Constant *A = ConstantExpr::getSDiv(N->getValue(), Two);
// Compute the B^2-4ac term.
Constant *SqrtTerm =
@@ -2102,9 +2101,9 @@ SolveQuadraticEquation(const SCEVAddRecExpr *AddRec) {
SqrtTerm = ConstantExpr::getCast(SqrtTerm, SignedTy);
Constant *Solution1 =
- ConstantExpr::getDiv(ConstantExpr::getAdd(NegB, SqrtTerm), TwoA);
+ ConstantExpr::getSDiv(ConstantExpr::getAdd(NegB, SqrtTerm), TwoA);
Constant *Solution2 =
- ConstantExpr::getDiv(ConstantExpr::getSub(NegB, SqrtTerm), TwoA);
+ ConstantExpr::getSDiv(ConstantExpr::getSub(NegB, SqrtTerm), TwoA);
return std::make_pair(SCEVUnknown::get(Solution1),
SCEVUnknown::get(Solution2));
}
@@ -2150,7 +2149,7 @@ SCEVHandle ScalarEvolutionsImpl::HowFarToZero(SCEV *V, const Loop *L) {
Constant *StartNegC = ConstantExpr::getNeg(StartCC);
Constant *Rem = ConstantExpr::getRem(StartNegC, StepC->getValue());
if (Rem->isNullValue()) {
- Constant *Result =ConstantExpr::getDiv(StartNegC,StepC->getValue());
+ Constant *Result =ConstantExpr::getSDiv(StartNegC,StepC->getValue());
return SCEVUnknown::get(Result);
}
}
@@ -2352,7 +2351,7 @@ SCEVHandle SCEVAddRecExpr::getNumIterationsInRange(ConstantRange Range) const {
Constant *ExitValue = Upper;
if (A != One) {
ExitValue = ConstantExpr::getSub(ConstantExpr::getAdd(Upper, A), One);
- ExitValue = ConstantExpr::getDiv(ExitValue, A);
+ ExitValue = ConstantExpr::getSDiv(ExitValue, A);
}
assert(isa<ConstantInt>(ExitValue) &&
"Constant folding of integers not implemented?");
diff --git a/lib/AsmParser/Lexer.l b/lib/AsmParser/Lexer.l
index 08a70e04d8..96804bb75b 100644
--- a/lib/AsmParser/Lexer.l
+++ b/lib/AsmParser/Lexer.l
@@ -39,8 +39,18 @@ void set_scan_string (const char * str) {
yy_scan_string (str);
}
+// Construct a token value for a non-obsolete token
#define RET_TOK(type, Enum, sym) \
- llvmAsmlval.type = Instruction::Enum; return sym
+ llvmAsmlval.type.opcode = Instruction::Enum; \
+ llvmAsmlval.type.obsolete = false; \
+ return sym
+
+// Construct a token value for an obsolete token
+#define RET_TOK_OBSOLETE(type, Enum, sym) \
+ llvmAsmlval.type.opcode = Instruction::Enum; \
+ llvmAsmlval.type.obsolete = true; \
+ return sym
+
namespace llvm {
@@ -247,7 +257,10 @@ opaque { return OPAQUE; }
add { RET_TOK(BinaryOpVal, Add, ADD); }
sub { RET_TOK(BinaryOpVal, Sub, SUB); }
mul { RET_TOK(BinaryOpVal, Mul, MUL); }
-div { RET_TOK(BinaryOpVal, Div, DIV); }
+div { RET_TOK_OBSOLETE(BinaryOpVal, UDiv, UDIV); }
+udiv { RET_TOK(BinaryOpVal, UDiv, UDIV); }
+sdiv { RET_TOK(BinaryOpVal, SDiv, SDIV); }
+fdiv { RET_TOK(BinaryOpVal, FDiv, FDIV); }
rem { RET_TOK(BinaryOpVal, Rem, REM); }
and { RET_TOK(BinaryOpVal, And, AND); }
or { RET_TOK(BinaryOpVal, Or , OR ); }
diff --git a/lib/AsmParser/ParserInternals.h b/lib/AsmParser/ParserInternals.h
index 79e367fe1f..9c94505bf8 100644
--- a/lib/AsmParser/ParserInternals.h
+++ b/lib/AsmParser/ParserInternals.h
@@ -201,4 +201,20 @@ struct ValID {
} // End llvm namespace
+// This structure is used to keep track of obsolete opcodes. The lexer will
+// retain the ability to parse obsolete opcode mnemonics. In this case it will
+// set "obsolete" to true and the opcode will be the replacement opcode. For
+// example if "rem" is encountered then opcode will be set to "urem" and the
+// "obsolete" flag will be true. If the opcode is not obsolete then "obsolete"
+// will be false.
+template <class Enum>
+struct OpcodeInfo {
+ Enum opcode;
+ bool obsolete;
+};
+typedef OpcodeInfo<llvm::Instruction::BinaryOps> BinaryOpInfo;
+typedef OpcodeInfo<llvm::Instruction::TermOps> TermOpInfo;
+typedef OpcodeInfo<llvm::Instruction::MemoryOps> MemOpInfo;
+typedef OpcodeInfo<llvm::Instruction::OtherOps> OtherOpInfo;
+
#endif
diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 2a873eeba5..6837528d6c 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -142,34 +142,36 @@
ADD = 333,
SUB = 334,
MUL = 335,
- DIV = 336,
- REM = 337,
- AND = 338,
- OR = 339,
- XOR = 340,
- SETLE = 341,
- SETGE = 342,
- SETLT = 343,
- SETGT = 344,
- SETEQ = 345,
- SETNE = 346,
- MALLOC = 347,
- ALLOCA = 348,
- FREE = 349,
- LOAD = 350,
- STORE = 351,
- GETELEMENTPTR = 352,
- PHI_TOK = 353,
- CAST = 354,
- SELECT = 355,
- SHL = 356,
- SHR = 357,
- VAARG = 358,
- EXTRACTELEMENT = 359,
- INSERTELEMENT = 360,
- SHUFFLEVECTOR = 361,
- VAARG_old = 362,
- VANEXT_old = 363
+ UDIV = 336,
+ SDIV = 337,
+ FDIV = 338,
+ REM = 339,
+ AND = 340,
+ OR = 341,
+ XOR = 342,
+ SETLE = 343,
+ SETGE = 344,
+ SETLT = 345,
+ SETGT = 346,
+ SETEQ = 347,
+ SETNE = 348,
+ MALLOC = 349,
+ ALLOCA = 350,
+ FREE = 351,
+ LOAD = 352,
+ STORE = 353,
+ GETELEMENTPTR = 354,
+ PHI_TOK = 355,
+ CAST = 356,
+ SELECT = 357,
+ SHL = 358,
+ SHR = 359,
+ VAARG = 360,
+ EXTRACTELEMENT = 361,
+ INSERTELEMENT = 362,
+ SHUFFLEVECTOR = 363,
+ VAARG_old = 364,
+ VANEXT_old = 365
};
#endif
/* Tokens. */
@@ -251,40 +253,42 @@
#define ADD 333
#define SUB 334
#define MUL 335
-#define DIV 336
-#define REM 337
-#define AND 338
-#define OR 339
-#define XOR 340
-#define SETLE 341
-#define SETGE 342
-#define SETLT 343
-#define SETGT 344
-#define SETEQ 345
-#define SETNE 346
-#define MALLOC 347
-#define ALLOCA 348
-#define FREE 349
-#define LOAD 350
-#define STORE 351
-#define GETELEMENTPTR 352
-#define PHI_TOK 353
-#define CAST 354
-#define SELECT 355
-#define SHL 356
-#define SHR 357
-#define VAARG 358
-#define EXTRACTELEMENT 359
-#define INSERTELEMENT 360
-#define SHUFFLEVECTOR 361
-#define VAARG_old 362
-#define VANEXT_old 363
+#define UDIV 336
+#define SDIV 337
+#define FDIV 338
+#define REM 339
+#define AND 340
+#define OR 341
+#define XOR 342
+#define SETLE 343
+#define SETGE 344
+#define SETLT 345
+#define SETGT 346
+#define SETEQ 347
+#define SETNE 348
+#define MALLOC 349
+#define ALLOCA 350
+#define FREE 351
+#define LOAD 352
+#define STORE 353
+#define GETELEMENTPTR 354
+#define PHI_TOK 355
+#define CAST 356
+#define SELECT 357
+#define SHL 358
+#define SHR 359
+#define VAARG 360
+#define EXTRACTELEMENT 361
+#define INSERTELEMENT 362
+#define SHUFFLEVECTOR 363
+#define VAARG_old 364
+#define VANEXT_old 365
/* Copy the first part of user declarations. */
-#line 14 "/proj/llvm/llvm_nc/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
#include "ParserInternals.h"
#include "llvm/CallingConv.h"
@@ -1087,6 +1091,43 @@ static PATypeHolder HandleUpRefs(const Type *ty) {
return Ty;
}
+/// This function is used to obtain the correct opcode for an instruction when
+/// an obsolete opcode is encountered. The OI parameter (OpcodeInfo) has both
+/// an opcode and an "obsolete" flag. These are generated by the lexer and
+/// the "obsolete" member will be true when the lexer encounters the token for
+/// an obsolete opcode. For example, "div" was replaced by [usf]div but we need
+/// to maintain backwards compatibility for asm files that still have the "div"
+/// instruction. This function handles converting div -> [usf]div appropriately.
+/// @brief Convert obsolete opcodes to new values
+static void
+sanitizeOpCode(OpcodeInfo<Instruction::BinaryOps> &OI, const PATypeHolder& PATy)
+{
+ // If its not obsolete, don't do anything
+ if (!OI.obsolete)
+ return;
+
+ // If its a packed type we want to use the element type
+ const Type* Ty = PATy;
+ if (const PackedType* PTy = dyn_cast<PackedType>(Ty))
+ Ty = PTy->getElementType();
+
+ // Depending on the opcode ..
+ switch (OI.opcode) {
+ default:
+ GenerateError("Invalid Obsolete OpCode");
+ break;
+ case Instruction::UDiv:
+ // Handle cases where the opcode needs to change
+ if (Ty->isFloatingPoint())
+ OI.opcode = Instruction::FDiv;
+ else if (Ty->isSigned())
+ OI.opcode = Instruction::SDiv;
+ break;
+ }
+ // Its not obsolete any more, we fixed it.
+ OI.obsolete = false;
+}
+
// common code from the two 'RunVMAsmParser' functions
static Module* RunParser(Module * M) {
@@ -1264,7 +1305,7 @@ Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
#endif
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 974 "/proj/llvm/llvm_nc/lib/AsmParser/llvmAsmParser.y"
+#line 1011 "/proj/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
typedef union YYSTYPE {
llvm::Module *ModuleVal;
llvm::Function *FunctionVal;
@@ -1296,16 +1337,16 @@ typedef union YYSTYPE {
bool BoolVal;
char *StrVal; // This memory is strdup'd!
- llvm::ValID ValIDVal; // strdup'd memory maybe!
+ llvm::ValID ValIDVal; // strdup'd memory maybe!
- llvm::Instruction::BinaryOps BinaryOpVal;
- llvm::Instruction::TermOps TermOpVal;
- llvm::Instruction::MemoryOps MemOpVal;
- llvm::Instruction::OtherOps OtherOpVal;
- llvm::Module::Endianness Endianness;
+ BinaryOpInfo BinaryOpVal;
+ TermOpInfo TermOpVal;
+ MemOpInfo MemOpVal;
+ OtherOpInfo OtherOpVal;
+ llvm::Module::Endianness Endianness;
} YYSTYPE;
/* Line 196 of yacc.c. */
-#line 1309 "llvmAsmParser.tab.c"
+#line 1350 "llvmAsmParser.tab.c"
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
@@ -1317,7 +1358,7 @@ typedef union YYSTYPE {
/* Line 219 of yacc.c. */
-#line 1321 "llvmAsmParser.tab.c"
+#line 1362 "llvmAsmParser.tab.c"
#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
# define YYSIZE_T __SIZE_TYPE__
@@ -1468,20 +1509,20 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 4
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1339
+#define YYLAST 1288
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 123
+#define YYNTOKENS 125
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 75
/* YYNRULES -- Number of rules. */
-#define YYNRULES 252
+#define YYNRULES 254
/* YYNRULES -- Number of states. */
-#define YYNSTATES 517
+#define YYNSTATES 519
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 363
+#define YYMAXUTOK 365
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -1493,15 +1534,15 @@ static const unsigned char yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 112, 113, 121, 2, 110, 2, 2, 2, 2, 2,
+ 114, 115, 123, 2, 112, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 117, 109, 118, 2, 2, 2, 2, 2, 2, 2,
+ 119, 111, 120, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 114, 111, 116, 2, 2, 2, 2, 2, 122,
+ 2, 116, 113, 118, 2, 2, 2, 2, 2, 124,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 115, 2, 2, 119, 2, 120, 2, 2, 2, 2,
+ 117, 2, 2, 121, 2, 122, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1525,7 +1566,7 @@ static const unsigned char yytranslate[] =
75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108
+ 105, 106, 107, 108, 109, 110
};
#if YYDEBUG
@@ -1536,147 +1577,148 @@ static const unsigned short int yyprhs[] =
0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
- 59, 61, 63, 65, 67, 70, 71, 73, 75, 77,
- 79, 81, 83, 85, 86, 87, 89, 91, 93, 95,
- 97, 99, 102, 103, 106, 107, 111, 114, 115, 117,
- 118, 122, 124, 127, 129, 131, 133, 135, 137, 139,
+ 59, 61, 63, 65, 67, 69, 71, 74, 75, 77,
+ 79, 81, 83, 85, 87, 89, 90, 91, 93, 95,
+ 97, 99, 101, 103, 106, 107, 110, 111, 115, 118,
+ 119, 121, 122, 126, 128, 131, 133, 135, 137, 139,
141, 143, 145, 147, 149, 151, 153, 155, 157, 159,
- 161, 163, 165, 167, 169, 172, 177, 183, 189, 193,
- 196, 199, 201, 205, 207, 211, 213, 214, 219, 223,
- 227, 232, 237, 241, 244, 247, 250, 253, 256, 259,
- 262, 265, 268, 271, 278, 284, 293, 300, 307, 314,
- 321, 328, 337, 346, 350, 352, 354, 356, 358, 361,
- 364, 369, 372, 374, 379, 382, 387, 388, 396, 397,
- 405, 406, 414, 415, 423, 427, 432, 433, 435, 437,
- 439, 443, 447, 451, 455, 459, 463, 465, 466, 468,
- 470, 472, 473, 476, 480, 482, 484, 488, 490, 491,
- 500, 502, 504, 508, 510, 512, 515, 516, 518, 520,
- 521, 526, 527, 529, 531, 533, 535, 537, 539, 541,
- 543, 545, 549, 551, 557, 559, 561, 563, 565, 568,
- 571, 574, 578, 581, 582, 584, 587, 590, 594, 604,
- 614, 623, 637, 639, 641, 648, 654, 657, 664, 672,
- 674, 678, 680, 681, 684, 686, 692, 698, 704, 707,
- 712, 717, 724, 729, 734, 739, 744, 751, 758, 761,
- 769, 771, 774, 775, 777, 778, 782, 789, 793, 800,
- 803, 808, 815
+ 161, 163, 165, 167, 169, 171, 173, 176, 181, 187,
+ 193, 197, 200, 203, 205, 209, 211, 215, 217, 218,
+ 223, 227, 231, 236, 241, 245, 248, 251, 254, 257,
+ 260, 263, 266, 269, 272, 275, 282, 288, 297, 304,
+ 311, 318, 325, 332, 341, 350, 354, 356, 358, 360,
+ 362, 365, 368, 373, 376, 378, 383, 386, 391, 392,
+ 400, 401, 409, 410, 418, 419, 427, 431, 436, 437,
+ 439, 441, 443, 447, 451, 455, 459, 463, 467, 469,
+ 470, 472, 474, 476, 477, 480, 484, 486, 488, 492,
+ 494, 495, 504, 506, 508, 512, 514, 516, 519, 520,
+ 522, 524, 525, 530, 531, 533, 535, 537, 539, 541,
+ 543, 545, 547, 549, 553, 555, 561, 563, 565, 567,
+ 569, 572, 575, 578, 582, 585, 586, 588, 591, 594,
+ 598, 608, 618, 627, 641, 643, 645, 652, 658, 661,
+ 668, 676, 678, 682, 684, 685, 688, 690, 696, 702,
+ 708, 711, 716, 721, 728, 733, 738, 743, 748, 755,
+ 762, 765, 773, 775, 778, 779, 781, 782, 786, 793,
+ 797, 804, 807, 812, 819
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const short int yyrhs[] =
{
- 154, 0, -1, 5, -1, 6, -1, 3, -1, 4,
+ 156, 0, -1, 5, -1, 6, -1, 3, -1, 4,
-1, 78, -1, 79, -1, 80, -1, 81, -1, 82,
-1, 83, -1, 84, -1, 85, -1, 86, -1, 87,
- -1, 88, -1, 89, -1, 90, -1, 91, -1, 101,
- -1, 102, -1, 16, -1, 14, -1, 12, -1, 10,
- -1, 17, -1, 15, -1, 13, -1, 11, -1, 130,
- -1, 131, -1, 18, -1, 19, -1, 166, 109, -1,
- -1, 41, -1, 42, -1, 43, -1, 44, -1, 45,
- -1, 46, -1, 47, -1, -1, -1, 65, -1, 66,
- -1, 67, -1, 68, -1, 69, -1, 70, -1, 64,
- 4, -1, -1, 57, 4, -1, -1, 110, 57, 4,
- -1, 34, 24, -1, -1, 139, -1, -1, 110, 142,
- 141, -1, 139, -1, 57, 4, -1, 145, -1, 8,
- -1, 147, -1, 8, -1, 147, -1, 9, -1, 10,
- -1, 11, -1, 12, -1, 13, -1, 14, -1, 15,
- -1, 16, -1, 17, -1, 18, -1, 19, -1, 20,
- -1, 21, -1, 48, -1, 146, -1, 181, -1, 111,
- 4, -1, 144, 112, 149, 113, -1, 114, 4, 115,
- 147, 116, -1, 117, 4, 115, 147, 118, -1, 119,
- 148, 120, -1, 119, 120, -1, 147, 121, -1, 147,
- -1, 148, 110, 147, -1, 148, -1, 148, 110, 37,
- -1, 37, -1, -1, 145, 114, 152, 116, -1, 145,
- 114, 116, -1, 145, 122, 24, -1, 145, 117, 152,
- 118, -1, 145, 119, 152, 120, -1, 145, 119, 120,
- -1, 145, 38, -1, 145, 39, -1, 145, 181, -1,
- 145, 151, -1, 145, 26, -1, 130, 125, -1, 131,
- 4, -1, 9, 27, -1, 9, 28, -1, 133, 7,
- -1, 99, 112, 150, 36, 145, 113, -1, 97, 112,
- 150, 195, 113, -1, 100, 112, 150, 110, 150, 110,
- 150, 113, -1, 126, 112, 150, 110, 150, 113, -1,
- 127, 112, 150, 110, 150, 113, -1, 128, 112, 150,
- 110, 150, 113, -1, 129, 112, 150, 110, 150, 113,
- -1, 104, 112, 150, 110, 150, 113, -1, 105, 112,
- 150, 110, 150, 110, 150, 113, -1, 106, 112, 150,
- 110, 150, 110, 150, 113, -1, 152, 110, 150, -1,
- 150, -1, 32, -1, 33, -1, 155, -1, 155, 175,
- -1, 155, 177, -1, 155, 62, 61, 161, -1, 155,
- 25, -1, 156, -1, 156, 134, 20, 143, -1, 156,
- 177, -1, 156, 62, 61, 161, -1, -1, 156, 134,
- 135, 153, 150, 157, 141, -1, -1, 156, 134, 50,
- 153, 145, 158, 141, -1, -1, 156, 134, 45, 153,
- 145, 159, 141, -1, -1, 156, 134, 47, 153, 145,
- 160, 141, -1, 156, 51, 163, -1, 156, 58, 109,
- 164, -1, -1, 24, -1, 56, -1, 55, -1, 53,
- 109, 162, -1, 54, 109, 4, -1, 52, 109, 24,
- -1, 71, 109, 24, -1, 114, 165, 116, -1, 165,
- 110, 24, -1, 24, -1, -1, 22, -1, 24, -1,
- 166, -1, -1, 145, 167, -1, 169, 110, 168, -1,
- 168, -1, 169, -1, 169, 110, 37, -1, 37, -1,
- -1, 136, 143, 166, 112, 170, 113, 140, 137, -1,
- 29, -1, 119, -1, 135, 171, 172, -1, 30, -1,
- 120, -1, 184, 174, -1, -1, 45, -1, 47, -1,
- -1, 31, 178, 176, 171, -1, -1, 63, -1, 3,
- -1, 4, -1, 7, -1, 27, -1, 28, -1, 38,
- -1, 39, -1, 26, -1, 117, 152, 118, -1, 151,
- -1, 61, 179, 24, 110, 24, -1, 124, -1, 166,
- -1, 181, -1, 180, -1, 145, 182, -1, 184, 185,
- -1, 173, 185, -1, 186, 134, 187, -1, 186, 189,
- -1, -1, 23, -1, 72, 183, -1, 72, 8, -1,
- 73, 21, 182, -1, 73, 9, 182, 110, 21, 182,
- 110, 21, 182, -1, 74, 132, 182, 110, 21, 182,
- 114, 188, 116, -1, 74, 132, 182, 110, 21, 182,
- 114, 116, -1, 75, 136, 143, 182, 112, 192, 113,
- 36, 21, 182, 76, 21, 182, -1, 76, -1, 77,
- -1, 188, 132, 180, 110, 21, 182, -1, 132, 180,
- 110, 21, 182, -1, 134, 194, -1, 145, 114, 182,
- 110, 182, 116, -1, 190, 110, 114, 182, 110, 182,
- 116, -1, 183, -1, 191, 110, 183, -1, 191, -1,
- -1, 60, 59, -1, 59, -1, 126, 145, 182, 110,
- 182, -1, 127, 145, 182, 110, 182, -1, 128, 145,
- 182, 110, 182, -1, 49, 183, -1, 129, 183, 110,
- 183, -1, 99, 183, 36, 145, -1, 100, 183, 110,
- 183, 110, 183, -1, 103, 183, 110, 145, -1, 107,
- 183, 110, 145, -1, 108, 183, 110, 145, -1, 104,
- 183, 110, 183, -1, 105, 183, 110, 183, 110, 183,
- -1, 106, 183, 110, 183, 110, 183, -1, 98, 190,
- -1, 193, 136, 143, 182, 112, 192, 113, -1, 197,
- -1, 110, 191, -1, -1, 35, -1, -1, 92, 145,
- 138, -1, 92, 145, 110, 15, 182, 138, -1, 93,
- 145, 138, -1, 93, 145, 110, 15, 182, 138, -1,
- 94, 183, -1, 196, 95, 145, 182, -1, 196, 96,
- 183, 110, 145, 182, -1, 97, 145, 182, 195, -1
+ -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
+ -1, 93, -1, 103, -1, 104, -1, 16, -1, 14,
+ -1, 12, -1, 10, -1, 17, -1, 15, -1, 13,
+ -1, 11, -1, 132, -1, 133, -1, 18, -1, 19,
+ -1, 168, 111, -1, -1, 41, -1, 42, -1, 43,
+ -1, 44, -1, 45, -1, 46, -1, 47, -1, -1,
+ -1, 65, -1, 66, -1, 67, -1, 68, -1, 69,
+ -1, 70, -1, 64, 4, -1, -1, 57, 4, -1,
+ -1, 112, 57, 4, -1, 34, 24, -1, -1, 141,
+ -1, -1, 112, 144, 143, -1, 141, -1, 57, 4,
+ -1, 147, -1, 8, -1, 149, -1, 8, -1, 149,
+ -1, 9, -1, 10, -1, 11, -1, 12, -1, 13,
+ -1, 14, -1, 15, -1, 16, -1, 17, -1, 18,
+ -1, 19, -1, 20, -1, 21, -1, 48, -1, 148,
+ -1, 183, -1, 113, 4, -1, 146, 114, 151, 115,
+ -1, 116, 4, 117, 149, 118, -1, 119, 4, 117,
+ 149, 120, -1, 121, 150, 122, -1, 121, 122, -1,
+ 149, 123, -1, 149, -1, 150, 112, 149, -1, 150,
+ -1, 150, 112, 37, -1, 37, -1, -1, 147, 116,
+ 154, 118, -1, 147, 116, 118, -1, 147, 124, 24,
+ -1, 147, 119, 154, 120, -1, 147, 121, 154, 122,
+ -1, 147, 121, 122, -1, 147, 38, -1, 147, 39,
+ -1, 147, 183, -1, 147, 153, -1, 147, 26, -1,
+ 132, 127, -1, 133, 4, -1, 9, 27, -1, 9,
+ 28, -1, 135, 7, -1, 101, 114, 152, 36, 147,
+ 115, -1, 99, 114, 152, 197, 115, -1, 102, 114,
+ 152, 112, 152, 112, 152, 115, -1, 128, 114, 152,
+ 112, 152, 115, -1, 129, 114, 152, 112, 152, 115,
+ -1, 130, 114, 152, 112, 152, 115, -1, 131, 114,
+ 152, 112, 152, 115, -1, 106, 114, 152, 112, 152,
+ 115, -1, 107, 114, 152, 112, 152, 112, 152, 115,
+ -1, 108, 114, 152, 112, 152, 112, 152, 115, -1,
+ 154, 112, 152, -1, 152, -1, 32, -1, 33, -1,
+ 157, -1, 157, 177, -1, 157, 179, -1, 157, 62,
+ 61, 163, -1, 157, 25, -1, 158, -1, 158, 136,
+ 20, 145, -1, 158, 179, -1, 158, 62, 61, 163,
+ -1, -1, 158, 136, 137, 155, 152, 159, 143, -1,
+ -1, 158, 136, 50, 155, 147, 160, 143, -1, -1,
+ 158, 136, 45, 155, 147, 161, 143, -1, -1, 158,
+ 136, 47, 155, 147, 162, 143, -1, 158, 51, 165,
+ -1, 158, 58, 111, 166, -1, -1, 24, -1, 56,
+ -1, 55, -1, 53, 111, 164, -1, 54, 111, 4,
+ -1, 52, 111, 24, -1, 71, 111, 24, -1, 116,
+ 167, 118, -1, 167, 112, 24, -1, 24, -1, -1,
+ 22, -1, 24, -1, 168, -1, -1, 147, 169, -1,
+ 171, 112, 170, -1, 170, -1, 171, -1, 171, 112,
+ 37, -1, 37, -1, -1, 138, 145, 168, 114, 172,
+ 115, 142, 139, -1, 29, -1, 121, -1, 137, 173,
+ 174, -1, 30, -1, 122, -1, 186, 176, -1, -1,
+ 45, -1, 47, -1, -1, 31, 180, 178, 173, -1,
+ -1, 63, -1, 3, -1, 4, -1, 7, -1, 27,
+ -1, 28, -1, 38, -1, 39, -1, 26, -1, 119,
+ 154, 120, -1, 153, -1, 61, 181, 24, 112, 24,
+ -1, 126, -1, 168, -1, 183, -1, 182, -1, 147,
+ 184, -1, 186, 187, -1, 175, 187, -1, 188, 136,
+ 189, -1, 188, 191, -1, -1, 23, -1, 72, 185,
+ -1, 72, 8, -1, 73, 21, 184, -1, 73, 9,
+ 184, 112, 21, 184, 112, 21, 184, -1, 74, 134,
+ 184, 112, 21, 184, 116, 190, 118, -1, 74, 134,
+ 184, 112, 21, 184, 116, 118, -1, 75, 138, 145,
+ 184, 114, 194, 115, 36, 21, 184, 76, 21, 184,
+ -1, 76, -1, 77, -1, 190, 134, 182, 112, 21,
+ 184, -1, 134, 182, 112, 21, 184, -1, 136, 196,
+ -1, 147, 116, 184, 112, 184, 118, -1, 192, 112,
+ 116, 184, 112, 184, 118, -1, 185, -1, 193, 112,
+ 185, -1, 193, -1, -1, 60, 59, -1, 59, -1,
+ 128, 147, 184, 112, 184, -1, 129, 147, 184, 112,
+ 184, -1, 130, 147, 184, 112, 184, -1, 49, 185,
+ -1, 131, 185, 112, 185, -1, 101, 185, 36, 147,
+ -1, 102, 185, 112, 185, 112, 185, -1, 105, 185,
+ 112, 147, -1, 109, 185, 112, 147, -1, 110, 185,
+ 112, 147, -1, 106, 185, 112, 185, -1, 107, 185,
+ 112, 185, 112, 185, -1, 108, 185, 112, 185, 112,
+ 185, -1, 100, 192, -1, 195, 138, 145, 184, 114,
+ 194, 115, -1, 199, -1, 112, 193, -1, -1, 35,
+ -1, -1, 94, 147, 140, -1, 94, 147, 112, 15,
+ 184, 140, -1, 95, 147, 140, -1, 95, 147, 112,
+ 15, 184, 140, -1, 96, 185, -1, 198, 97, 147,
+ 184, -1, 198, 98, 185, 112, 147, 184, -1, 99,
+ 147, 184, 197, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short int yyrline[] =
{
- 0, 1097, 1097, 1098, 1106, 1107, 1117, 1117, 1117, 1117,
- 1117, 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119,
- 1121, 1121, 1125, 1125, 1125, 1125, 1126, 1126, 1126, 1126,
- 1127, 1127, 1128, 1128, 1131, 1135, 1140, 1141, 1142, 1143,
- 1144, 1145, 1146, 1147, 1149, 1150, 1151, 1152, 1153, 1154,
- 1155, 1156, 1165, 1166, 1172, 1173, 1181, 1189, 1190, 1195,
- 1196, 1197, 1202, 1216, 1216, 1217, 1217, 1219, 1229, 1229,
- 1229, 1229, 1229, 1229, 1229, 1230, 1230, 1230, 1230, 1230,
- 1230, 1231, 1235, 1239, 1247, 1255, 1268, 1273, 1285, 1295,
- 1299, 1310, 1315, 1321, 1322, 1326, 1330, 1341, 1367, 1381,
- 1411, 1437, 1458, 1471, 1481, 1486, 1547, 1554, 1563, 1569,
- 1575, 1579, 1583, 1591, 1602, 1634, 1642, 1664, 1675, 1681,
- 1689, 1695, 1701, 1710, 1714, 1722, 1722, 1732, 1740, 1745,
- 1749, 1753, 1757, 1772, 1794, 1797, 1800, 1800, 1808, 1808,
- 1816, 1816, 1824, 1824, 1833, 1836, 1839, 1843, 1856, 1857,
- 1859, 1863, 1872, 1876, 1881, 1883, 1888, 1893, 1902, 1902,
- 1903, 1903, 1905, 1912, 1918, 1925, 1929, 1935, 1940, 1945,
- 2040, 2040, 2042, 2050, 2050, 2052, 2057, 2058, 2059, 2061,
- 2061, 2071, 2075, 2080, 2084, 2088, 2092, 2096, 2100, 2104,
-