diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2008-11-24 03:41:24 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2008-11-24 03:41:24 +0000 |
commit | 02ff308aa1c165d37fcf35f618243180ee68eedd (patch) | |
tree | 063f9163cfe13c002a1c88b27aad8e4e0f493c4f | |
parent | 9f22a4aaaf2bdde843e0b32f85a1951f12f257d5 (diff) |
Extend the 'noalias' attribute to function return values. This is intended to
indicate functions that allocate, such as operator new, or list::insert. The
actual definition is slightly less strict (for now).
No changes to the bitcode reader/writer, asm printer or verifier were needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59934 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/LangRef.html | 11 | ||||
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 25 | ||||
-rw-r--r-- | lib/AsmParser/llvmAsmParser.cpp.cvs | 2692 | ||||
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 3 | ||||
-rw-r--r-- | test/Analysis/BasicAA/2008-11-23-NoaliasRet.ll | 12 | ||||
-rw-r--r-- | test/Feature/noalias-ret.ll | 6 |
6 files changed, 1393 insertions, 1356 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index b6ea8e9b42..bc3b40b460 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -890,10 +890,11 @@ declare signext i8 @returns_signed_char() return values. </dd> <dt><tt>noalias</tt></dt> - <dd>This indicates that the parameter does not alias any global or any other - parameter. The caller is responsible for ensuring that this is the case, - usually by placing the value in a stack allocation. This is not a valid - attribute for return values.</dd> + <dd>This indicates that the pointer does not alias any global or any other + parameter. The caller is responsible for ensuring that this is the + case. Additionally, on a function return value <tt>noalias</tt> indicates + that the pointer does not alias the return value from other calls of + itself or other noalias functions.</dd> <dt><tt>nest</tt></dt> <dd>This indicates that the pointer parameter can be excised using the @@ -3155,7 +3156,7 @@ choose to align the allocation on any convenient boundary.</p> <h5>Semantics:</h5> <p>Memory is allocated using the system "<tt>malloc</tt>" function, and -a pointer is returned. The result of a zero byte allocattion is undefined. The +a pointer is returned. The result of a zero byte allocation is undefined. The result is null if there is insufficient memory available.</p> <h5>Example:</h5> diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 22b73b2840..e9c6490ebb 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -104,14 +104,24 @@ static const Value *GetGEPOperands(const Value *V, return V; } +/// isNoAliasCall - Return true if this pointer is returned by a noalias +/// function. +static bool isNoAliasCall(const Value *V) { + if (isa<CallInst>(V) || isa<InvokeInst>(V)) + return CallSite(const_cast<Instruction*>(cast<Instruction>(V))) + .paramHasAttr(0, Attribute::NoAlias); + return false; +} + /// isIdentifiedObject - Return true if this pointer refers to a distinct and /// identifiable object. This returns true for: /// Global Variables and Functions /// Allocas and Mallocs /// ByVal and NoAlias Arguments +/// NoAlias returns /// static bool isIdentifiedObject(const Value *V) { - if (isa<GlobalValue>(V) || isa<AllocationInst>(V)) + if (isa<GlobalValue>(V) || isa<AllocationInst>(V) || isNoAliasCall(V)) return true; if (const Argument *A = dyn_cast<Argument>(V)) return A->hasNoAliasAttr() || A->hasByValAttr(); @@ -138,7 +148,7 @@ static bool isKnownNonNull(const Value *V) { /// object that never escapes from the function. static bool isNonEscapingLocalObject(const Value *V) { // If this is a local allocation, check to see if it escapes. - if (isa<AllocationInst>(V)) + if (isa<AllocationInst>(V) || isNoAliasCall(V)) return !AddressMightEscape(V); // If this is an argument that corresponds to a byval or noalias argument, @@ -355,8 +365,7 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, // Are we checking for alias of the same value? if (V1 == V2) return MustAlias; - if ((!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) && - V1->getType() != Type::Int64Ty && V2->getType() != Type::Int64Ty) + if (!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) return NoAlias; // Scalars cannot alias each other // Strip off cast instructions... @@ -374,11 +383,11 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, if (isIdentifiedObject(O1) && isIdentifiedObject(O2)) return NoAlias; - // Incoming argument cannot alias locally allocated object! - if ((isa<Argument>(O1) && isa<AllocationInst>(O2)) || - (isa<Argument>(O2) && isa<AllocationInst>(O1))) + // Local allocations can't alias with arguments or noalias functions. + if ((isa<AllocationInst>(O1) && (isa<Argument>(O2) || isNoAliasCall(O2))) || + (isa<AllocationInst>(O2) && (isa<Argument>(O1) || isNoAliasCall(O1)))) return NoAlias; - + // Most objects can't alias null. if ((isa<ConstantPointerNull>(V2) && isKnownNonNull(O1)) || (isa<ConstantPointerNull>(V1) && isKnownNonNull(O2))) diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs index c9ff29a451..63670a76ca 100644 --- a/lib/AsmParser/llvmAsmParser.cpp.cvs +++ b/lib/AsmParser/llvmAsmParser.cpp.cvs @@ -398,7 +398,7 @@ /* Copy the first part of user declarations. */ -#line 14 "/Volumes/Gir/devel/llvm/llvm.src/lib/AsmParser/llvmAsmParser.y" +#line 14 "/home/nicholas/llvm-commit/lib/AsmParser/llvmAsmParser.y" #include "ParserInternals.h" #include "llvm/CallingConv.h" @@ -1391,7 +1391,7 @@ Module *llvm::RunVMAsmParser(llvm::MemoryBuffer *MB) { #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 986 "/Volumes/Gir/devel/llvm/llvm.src/lib/AsmParser/llvmAsmParser.y" +#line 986 "/home/nicholas/llvm-commit/lib/AsmParser/llvmAsmParser.y" { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -1439,7 +1439,7 @@ typedef union YYSTYPE llvm::ICmpInst::Predicate IPredicate; llvm::FCmpInst::Predicate FPredicate; } -/* Line 193 of yacc.c. */ +/* Line 187 of yacc.c. */ #line 1444 "llvmAsmParser.tab.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -1503,7 +1503,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS +# if YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -1668,16 +1668,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 44 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 2433 +#define YYLAST 2434 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 175 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 87 /* YYNRULES -- Number of rules. */ -#define YYNRULES 350 +#define YYNRULES 351 /* YYNRULES -- Number of states. */ -#define YYNSTATES 710 +#define YYNSTATES 711 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -1749,31 +1749,31 @@ static const yytype_uint16 yyprhs[] = 160, 162, 164, 166, 167, 169, 171, 172, 174, 176, 178, 180, 181, 183, 185, 186, 188, 190, 192, 194, 196, 199, 201, 203, 205, 207, 209, 211, 213, 215, - 217, 220, 221, 224, 226, 228, 230, 231, 234, 236, + 217, 220, 221, 224, 226, 228, 230, 232, 233, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, - 258, 259, 262, 263, 266, 267, 270, 271, 275, 278, - 279, 281, 282, 286, 288, 291, 293, 295, 297, 299, - 301, 303, 305, 307, 309, 313, 315, 318, 324, 330, - 336, 342, 346, 349, 355, 360, 363, 365, 367, 369, - 373, 375, 379, 381, 382, 384, 388, 393, 397, 401, - 406, 411, 415, 422, 428, 431, 434, 437, 440, 443, - 446, 449, 452, 455, 458, 461, 464, 471, 477, 486, - 493, 500, 508, 516, 524, 532, 539, 548, 557, 563, - 571, 575, 577, 579, 581, 583, 584, 587, 594, 596, - 597, 599, 602, 603, 607, 608, 612, 616, 620, 624, - 625, 634, 635, 645, 646, 656, 662, 665, 669, 671, - 675, 679, 683, 687, 689, 690, 696, 700, 702, 706, - 708, 709, 721, 723, 725, 730, 732, 734, 737, 741, - 742, 744, 746, 748, 750, 752, 754, 756, 758, 760, - 762, 764, 768, 772, 775, 778, 782, 785, 791, 796, - 798, 804, 806, 808, 810, 812, 814, 816, 819, 821, - 825, 828, 831, 835, 839, 842, 843, 845, 848, 851, - 855, 865, 875, 884, 900, 902, 904, 911, 917, 920, - 923, 930, 938, 943, 948, 955, 962, 963, 964, 968, - 971, 975, 978, 980, 986, 992, 999, 1006, 1013, 1020, - 1025, 1032, 1037, 1042, 1049, 1056, 1059, 1069, 1071, 1073, - 1074, 1078, 1085, 1089, 1096, 1099, 1105, 1113, 1119, 1124, - 1129 + 258, 260, 261, 264, 265, 268, 269, 272, 273, 277, + 280, 281, 283, 284, 288, 290, 293, 295, 297, 299, + 301, 303, 305, 307, 309, 311, 315, 317, 320, 326, + 332, 338, 344, 348, 351, 357, 362, 365, 367, 369, + 371, 375, 377, 381, 383, 384, 386, 390, 395, 399, + 403, 408, 413, 417, 424, 430, 433, 436, 439, 442, + 445, 448, 451, 454, 457, 460, 463, 466, 473, 479, + 488, 495, 502, 510, 518, 526, 534, 541, 550, 559, + 565, 573, 577, 579, 581, 583, 585, 586, 589, 596, + 598, 599, 601, 604, 605, 609, 610, 614, 618, 622, + 626, 627, 636, 637, 647, 648, 658, 664, 667, 671, + 673, 677, 681, 685, 689, 691, 692, 698, 702, 704, + 708, 710, 711, 723, 725, 727, 732, 734, 736, 739, + 743, 744, 746, 748, 750, 752, 754, 756, 758, 760, + 762, 764, 766, 770, 774, 777, 780, 784, 787, 793, + 798, 800, 806, 808, 810, 812, 814, 816, 818, 821, + 823, 827, 830, 833, 837, 841, 844, 845, 847, 850, + 853, 857, 867, 877, 886, 902, 904, 906, 913, 919, + 922, 925, 932, 940, 945, 950, 957, 964, 965, 966, + 970, 973, 977, 980, 982, 988, 994, 1001, 1008, 1015, + 1022, 1027, 1034, 1039, 1044, 1051, 1058, 1061, 1071, 1073, + 1075, 1076, 1080, 1087, 1091, 1098, 1101, 1107, 1115, 1121, + 1126, 1131 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -1802,97 +1802,97 @@ static const yytype_int16 yyrhs[] = -1, 121, -1, 141, -1, 122, -1, 144, -1, 145, -1, 147, -1, 148, -1, 149, -1, 54, 4, -1, -1, 197, 196, -1, 144, -1, 142, -1, 141, -1, - -1, 199, 198, -1, 143, -1, 146, -1, 144, -1, - 142, -1, 141, -1, 150, -1, 151, -1, 154, -1, - 155, -1, 153, -1, 156, -1, 157, -1, -1, 201, - 200, -1, -1, 152, 22, -1, -1, 54, 4, -1, - -1, 164, 54, 4, -1, 34, 22, -1, -1, 205, - -1, -1, 164, 208, 207, -1, 205, -1, 54, 4, - -1, 11, -1, 12, -1, 13, -1, 16, -1, 15, - -1, 14, -1, 17, -1, 50, -1, 209, -1, 210, - 183, 165, -1, 244, -1, 166, 4, -1, 210, 161, - 214, 162, 201, -1, 10, 161, 214, 162, 201, -1, - 167, 4, 168, 210, 169, -1, 170, 4, 168, 210, - 171, -1, 172, 215, 173, -1, 172, 173, -1, 170, - 172, 215, 173, 171, -1, 170, 172, 173, 171, -1, - 210, 197, -1, 210, -1, 10, -1, 211, -1, 213, - 164, 211, -1, 213, -1, 213, 164, 39, -1, 39, - -1, -1, 210, -1, 215, 164, 210, -1, 210, 167, - 218, 169, -1, 210, 167, 169, -1, 210, 174, 22, - -1, 210, 170, 218, 171, -1, 210, 172, 218, 173, - -1, 210, 172, 173, -1, 210, 170, 172, 218, 173, - 171, -1, 210, 170, 172, 173, 171, -1, 210, 40, - -1, 210, 41, -1, 210, 244, -1, 210, 217, -1, - 210, 25, -1, 210, 3, -1, 210, 5, -1, 210, - 4, -1, 210, 6, -1, 210, 26, -1, 210, 27, - -1, 210, 9, -1, 178, 161, 216, 38, 210, 162, - -1, 119, 161, 216, 256, 162, -1, 133, 161, 216, - 164, 216, 164, 216, 162, -1, 176, 161, 216, 164, - 216, 162, -1, 177, 161, 216, 164, 216, 162, -1, - 90, 179, 161, 216, 164, 216, 162, -1, 91, 180, - 161, 216, 164, 216, 162, -1, 92, 179, 161, 216, - 164, 216, 162, -1, 93, 180, 161, 216, 164, 216, - 162, -1, 135, 161, 216, 164, 216, 162, -1, 136, - 161, 216, 164, 216, 164, 216, 162, -1, 137, 161, - 216, 164, 216, 164, 216, 162, -1, 139, 161, 216, - 257, 162, -1, 140, 161, 216, 164, 216, 257, 162, - -1, 218, 164, 216, -1, 216, -1, 32, -1, 33, - -1, 37, -1, -1, 212, 244, -1, 125, 161, 221, - 38, 210, 162, -1, 223, -1, -1, 224, -1, 223, - 224, -1, -1, 31, 225, 240, -1, -1, 30, 226, - 241, -1, 60, 59, 230, -1, 184, 18, 210, -1, - 184, 18, 10, -1, -1, 187, 191, 220, 219, 216, - 183, 227, 207, -1, -1, 187, 189, 191, 220, 219, - 216, 183, 228, 207, -1, -1, 187, 190, 191, 220, - 219, 210, 183, 229, 207, -1, 187, 191, 35, 194, - 221, -1, 52, 231, -1, 56, 163, 232, -1, 22, - -1, 53, 163, 22, -1, 68, 163, 22, -1, 167, - 233, 169, -1, 233, 164, 22, -1, 22, -1, -1, - 234, 164, 210, 197, 182, -1, 210, 197, 182, -1, - 234, -1, 234, 164, 39, -1, 39, -1, -1, 195, - 199, 212, 186, 161, 235, 162, 201, 206, 203, 202, - -1, 28, -1, 172, -1, 193, 191, 236, 237, -1, - 29, -1, 173, -1, 248, 239, -1, 192, 191, 236, - -1, -1, 61, -1, 3, -1, 4, -1, 5, -1, - 6, -1, 9, -1, 26, -1, 27, -1, 40, -1, - 41, -1, 25, -1, 170, 218, 171, -1, 167, 218, - 169, -1, 167, 169, -1, 174, 22, -1, 172, 218, - 173, -1, 172, 173, -1, 170, 172, 218, 173, 171, - -1, 170, 172, 173, 171, -1, 217, -1, 59, 242, - 22, 164, 22, -1, 7, -1, 8, -1, 181, -1, - 186, -1, 244, -1, 243, -1, 210, 245, -1, 246, - -1, 247, 164, 246, -1, 248, 249, -1, 238, 249, - -1, 250, 184, 251, -1, 250, 185, 251, -1, 250, - 253, -1, -1, 21, -1, 69, 247, -1, 69, 10, - -1, 70, 17, 245, -1, 70, 11, 245, 164, 17, - 245, 164, 17, 245, -1, 71, 11, 245, 164, 17, - 245, 167, 252, 169, -1, 71, 11, 245, 164, 17, - 245, 167, 169, -1, 72, 195, 199, 212, 245, 161, - 255, 162, 201, 38, 17, 245, 73, 17, 245, -1, - 73, -1, 74, -1, 252, 11, 243, 164, 17, 245, - -1, 11, 243, 164, 17, 245, -1, 184, 259, -1, - 185, 259, -1, 210, 167, 245, 164, 245, 169, -1, - 254, 164, 167, 245, 164, 245, 169, -1, 210, 197, - 245, 197, -1, 17, 197, 245, 197, -1, 255, 164, - 210, 197, 245, 197, -1, 255, 164, 17, 197, 245, - 197, -1, -1, -1, 256, 164, 246, -1, 164, 4, - -1, 257, 164, 4, -1, 58, 57, -1, 57, -1, - 176, 210, 245, 164, 245, -1, 177, 210, 245, 164, - 245, -1, 90, 179, 210, 245, 164, 245, -1, 91, - 180, 210, 245, 164, 245, -1, 92, 179, 210, 245, - 164, 245, -1, 93, 180, 210, 245, 164, 245, -1, - 178, 246, 38, 210, -1, 133, 246, 164, 246, 164, - 246, -1, 134, 246, 164, 210, -1, 135, 246, 164, - 246, -1, 136, 246, 164, 246, 164, 246, -1, 137, - 246, 164, 246, 164, 246, -1, 132, 254, -1, 258, - 195, 199, 212, 245, 161, 255, 162, 201, -1, 261, - -1, 36, -1, -1, 114, 210, 204, -1, 114, 210, - 164, 11, 245, 204, -1, 115, 210, 204, -1, 115, - 210, 164, 11, 245, 204, -1, 116, 246, -1, 260, - 117, 210, 245, 204, -1, 260, 118, 246, 164, 210, - 245, 204, -1, 138, 210, 245, 164, 4, -1, 119, - 210, 245, 256, -1, 139, 210, 245, 257, -1, 140, - 210, 245, 164, 210, 245, 257, -1 + 147, -1, -1, 199, 198, -1, 143, -1, 146, -1, + 144, -1, 142, -1, 141, -1, 150, -1, 151, -1, + 154, -1, 155, -1, 153, -1, 156, -1, 157, -1, + -1, 201, 200, -1, -1, 152, 22, -1, -1, 54, + 4, -1, -1, 164, 54, 4, -1, 34, 22, -1, + -1, 205, -1, -1, 164, 208, 207, -1, 205, -1, + 54, 4, -1, 11, -1, 12, -1, 13, -1, 16, + -1, 15, -1, 14, -1, 17, -1, 50, -1, 209, + -1, 210, 183, 165, -1, 244, -1, 166, 4, -1, + 210, 161, 214, 162, 201, -1, 10, 161, 214, 162, + 201, -1, 167, 4, 168, 210, 169, -1, 170, 4, + 168, 210, 171, -1, 172, 215, 173, -1, 172, 173, + -1, 170, 172, 215, 173, 171, -1, 170, 172, 173, + 171, -1, 210, 197, -1, 210, -1, 10, -1, 211, + -1, 213, 164, 211, -1, 213, -1, 213, 164, 39, + -1, 39, -1, -1, 210, -1, 215, 164, 210, -1, + 210, 167, 218, 169, -1, 210, 167, 169, -1, 210, + 174, 22, -1, 210, 170, 218, 171, -1, 210, 172, + 218, 173, -1, 210, 172, 173, -1, 210, 170, 172, + 218, 173, 171, -1, 210, 170, 172, 173, 171, -1, + 210, 40, -1, 210, 41, -1, 210, 244, -1, 210, + 217, -1, 210, 25, -1, 210, 3, -1, 210, 5, + -1, 210, 4, -1, 210, 6, -1, 210, 26, -1, + 210, 27, -1, 210, 9, -1, 178, 161, 216, 38, + 210, 162, -1, 119, 161, 216, 256, 162, -1, 133, + 161, 216, 164, 216, 164, 216, 162, -1, 176, 161, + 216, 164, 216, 162, -1, 177, 161, 216, 164, 216, + 162, -1, 90, 179, 161, 216, 164, 216, 162, -1, + 91, 180, 161, 216, 164, 216, 162, -1, 92, 179, + 161, 216, 164, 216, 162, -1, 93, 180, 161, 216, + 164, 216, 162, -1, 135, 161, 216, 164, 216, 162, + -1, 136, 161, 216, 164, 216, 164, 216, 162, -1, + 137, 161, 216, 164, 216, 164, 216, 162, -1, 139, + 161, 216, 257, 162, -1, 140, 161, 216, 164, 216, + 257, 162, -1, 218, 164, 216, -1, 216, -1, 32, + -1, 33, -1, 37, -1, -1, 212, 244, -1, 125, + 161, 221, 38, 210, 162, -1, 223, -1, -1, 224, + -1, 223, 224, -1, -1, 31, 225, 240, -1, -1, + 30, 226, 241, -1, 60, 59, 230, -1, 184, 18, + 210, -1, 184, 18, 10, -1, -1, 187, 191, 220, + 219, 216, 183, 227, 207, -1, -1, 187, 189, 191, + 220, 219, 216, 183, 228, 207, -1, -1, 187, 190, + 191, 220, 219, 210, 183, 229, 207, -1, 187, 191, + 35, 194, 221, -1, 52, 231, -1, 56, 163, 232, + -1, 22, -1, 53, 163, 22, -1, 68, 163, 22, + -1, 167, 233, 169, -1, 233, 164, 22, -1, 22, + -1, -1, 234, 164, 210, 197, 182, -1, 210, 197, + 182, -1, 234, -1, 234, 164, 39, -1, 39, -1, + -1, 195, 199, 212, 186, 161, 235, 162, 201, 206, + 203, 202, -1, 28, -1, 172, -1, 193, 191, 236, + 237, -1, 29, -1, 173, -1, 248, 239, -1, 192, + 191, 236, -1, -1, 61, -1, 3, -1, 4, -1, + 5, -1, 6, -1, 9, -1, 26, -1, 27, -1, + 40, -1, 41, -1, 25, -1, 170, 218, 171, -1, + 167, 218, 169, -1, 167, 169, -1, 174, 22, -1, + 172, 218, 173, -1, 172, 173, -1, 170, 172, 218, + 173, 171, -1, 170, 172, 173, 171, -1, 217, -1, + 59, 242, 22, 164, 22, -1, 7, -1, 8, -1, + 181, -1, 186, -1, 244, -1, 243, -1, 210, 245, + -1, 246, -1, 247, 164, 246, -1, 248, 249, -1, + 238, 249, -1, 250, 184, 251, -1, 250, 185, 251, + -1, 250, 253, -1, -1, 21, -1, 69, 247, -1, + 69, 10, -1, 70, 17, 245, -1, 70, 11, 245, + 164, 17, 245, 164, 17, 245, -1, 71, 11, 245, + 164, 17, 245, 167, 252, 169, -1, 71, 11, 245, + 164, 17, 245, 167, 169, -1, 72, 195, 199, 212, + 245, 161, 255, 162, 201, 38, 17, 245, 73, 17, + 245, -1, 73, -1, 74, -1, 252, 11, 243, 164, + 17, 245, -1, 11, 243, 164, 17, 245, -1, 184, + 259, -1, 185, 259, -1, 210, 167, 245, 164, 245, + 169, -1, 254, 164, 167, 245, 164, 245, 169, -1, + 210, 197, 245, 197, -1, 17, 197, 245, 197, -1, + 255, 164, 210, 197, 245, 197, -1, 255, 164, 17, + 197, 245, 197, -1, -1, -1, 256, 164, 246, -1, + 164, 4, -1, 257, 164, 4, -1, 58, 57, -1, + 57, -1, 176, 210, 245, 164, 245, -1, 177, 210, + 245, 164, 245, -1, 90, 179, 210, 245, 164, 245, + -1, 91, 180, 210, 245, 164, 245, -1, 92, 179, + 210, 245, 164, 245, -1, 93, 180, 210, 245, 164, + 245, -1, 178, 246, 38, 210, -1, 133, 246, 164, + 246, 164, 246, -1, 134, 246, 164, 210, -1, 135, + 246, 164, 246, -1, 136, 246, 164, 246, 164, 246, + -1, 137, 246, 164, 246, 164, 246, -1, 132, 254, + -1, 258, 195, 199, 212, 245, 161, 255, 162, 201, + -1, 261, -1, 36, -1, -1, 114, 210, 204, -1, + 114, 210, 164, 11, 245, 204, -1, 115, 210, 204, + -1, 115, 210, 164, 11, 245, 204, -1, 116, 246, + -1, 260, 117, 210, 245, 204, -1, 260, 118, 246, + 164, 210, 245, 204, -1, 138, 210, 245, 164, 4, + -1, 119, 210, 245, 256, -1, 139, 210, 245, 257, + -1, 140, 210, 245, 164, 210, 245, 257, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -1909,31 +1909,31 @@ static const yytype_uint16 yyrline[] = 1230, 1231, 1232, 1236, 1237, 1238, 1242, 1243, 1244, 1245, 1246, 1250, 1251, 1252, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, - 1277, 1281, 1282, 1287, 1288, 1289, 1292, 1293, 1299, 1300, + 1277, 1281, 1282, 1287, 1288, 1289, 1290, 1293, 1294, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, - 1313, 1314, 1320, 1321, 1328, 1329, 1335, 1336, 1345, 1353, - 1354, 1359, 1360, 1361, 1366, 1379, 1379, 1379, 1379, 1379, - 1379, 1379, 1382, 1386, 1390, 1397, 1402, 1410, 1445, 1476, - 1481, 1491, 1501, 1505, 1515, 1522, 1531, 1538, 1543, 1548, - 1555, 1556, 1563, 1570, 1578, 1584, 1596, 1624, 1640, 1667, - 1695, 1721, 1741, 1767, 1787, 1799, 1806, 1872, 1882, 1892, - 1903, 1916, 1927, 1941, 1948, 1955, 1973, 1985, 2006, 2014, - 2020, 2031, 2036, 2041, 2046, 2051, 2057, 2063, 2069, 2077, - 2088, 2092, 2100, 2100, 2103, 2103, 2106, 2118, 2139, 2144, - 2152, 2153, 2157, 2157, 2161, 2161, 2164, 2167, 2191, 2203, - 2202, 2214, 2213, 2223, 2222, 2233, 2273, 2276, 2282, 2292, - 2296, 2301, 2303, 2308, 2313, 2322, 2332, 2343, 2347, 2356, - 2365, 2370, 2519, 2519, 2521, 2530, 2530, 2532, 2537, 2549, - 2553, 2558, 2562, 2566, 2571, 2576, 2580, 2584, 2588, 2592, - 2596, 2600, 2622, 2644, 2650, 2663, 2675, 2680, 2692, 2698, - 2702, 2712, 2716, 2720, 2725, 2732, 2732, 2738, 2747, 2752, - 2757, 2761, 2770, 2779, 2792, 2801, 2805, 2813, 2833, 2837, - 2842, 2853, 2872, 2881, 2985, 2989, 2996, 3007, 3020, 3029, - 3042, 3053, 3063, 3074, 3082, 3092, 3099, 3102, 3103, 3111, - 3117, 3126, 3130, 3135, 3151, 3168, 3180, 3192, 3206, 3220, - 3232, 3253, 3260, 3266, 3272, 3278, 3293, 3403, 3408, 3412, - 3419, 3426, 3436, 3443, 3453, 3461, 3475, 3492, 3506, 3521, - 3536 + 1311, 1314, 1315, 1321, 1322, 1329, 1330, 1336, 1337, 1346, + 1354, 1355, 1360, 1361, 1362, 1367, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1383, 1387, 1391, 1398, 1403, 1411, 1446, + 1477, 1482, 1492, 1502, 1506, 1516, 1523, 1532, 1539, 1544, + 1549, 1556, 1557, 1564, 1571, 1579, 1585, 1597, 1625, 1641, + 1668, 1696, 1722, 1742, 1768, 1788, 1800, 1807, 1873, 1883, + 1893, 1904, 1917, 1928, 1942, 1949, 1956, 1974, 1986, 2007, + 2015, 2021, 2032, 2037, 2042, 2047, 2052, 2058, 2064, 2070, + 2078, 2089, 2093, 2101, 2101, 2104, 2104, 2107, 2119, 2140, + 2145, 2153, 2154, 2158, 2158, 2162, 2162, 2165, 2168, 2192, + 2204, 2203, 2215, 2214, 2224, 2223, 2234, 2274, 2277, 2283, + 2293, 2297, 2302, 2304, 2309, 2314, 2323, 2333, 2344, 2348, + 2357, 2366, 2371, 2520, 2520, 2522, 2531, 2531, 2533, 2538, + 2550, 2554, 2559, 2563, 2567, 2572, 2577, 2581, 2585, 2589, + 2593, 2597, 2601, 2623, 2645, 2651, 2664, 2676, 2681, 2693, + 2699, 2703, 2713, 2717, 2721, 2726, 2733, 2733, 2739, 2748, + 2753, 2758, 2762, 2771, 2780, 2793, 2802, 2806, 2814, 2834, + 2838, 2843, 2854, 2873, 2882, 2986, 2990, 2997, 3008, 3021, + 3030, 3043, 3054, 3064, 3075, 3083, 3093, 3100, 3103, 3104, + 3112, 3118, 3127, 3131, 3136, 3152, 3169, 3181, 3193, 3207, + 3221, 3233, 3254, 3261, 3267, 3273, 3279, 3294, 3404, 3409, + 3413, 3420, 3427, 3437, 3444, 3454, 3462, 3476, 3493, 3507, + 3522, 3537 }; #endif @@ -2031,31 +2031,31 @@ static const yytype_uint16 yyr1[] = 191, 191, 191, 192, 192, 192, 193, 193, 193, 193, 193, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 197, 197, 198, 198, 198, 199, 199, 200, 200, + 196, 197, 197, 198, 198, 198, 198, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, - 201, 201, 202, 202, 203, 203, 204, 204, 205, 206, - 206, 207, 207, 208, 208, 209, 209, 209, 209, 209, - 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 211, 212, 212, 213, 213, - 214, 214, 214, 214, 215, 215, 216, 216, 216, 216, + 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, + 206, 206, 207, 207, 208, 208, 209, 209, 209, 209, + 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 211, 212, 212, 213, + 213, 214, 214, 214, 214, 215, 215, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, + 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, - 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, - 223, 223, 225, 224, 226, 224, 224, 224, 224, 227, - 224, 228, 224, 229, 224, 224, 224, 224, 230, 231, - 231, 232, 233, 233, 233, 234, 234, 235, 235, 235, - 235, 236, 237, 237, 238, 239, 239, 240, 241, 242, - 242, 243, 243, 243, 243, 243, 243, 243, 243, 243, + 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, + 222, 223, 223, 225, 224, 226, 224, 224, 224, 224, + 227, 224, 228, 224, 229, 224, 224, 224, 224, 230, + 231, 231, 232, 233, 233, 233, 234, 234, 235, 235, + 235, 235, 236, 237, 237, 238, 239, 239, 240, 241, + 242, 242, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, 244, 244, 244, 244, 245, 245, 246, 247, 247, - 248, 248, 249, 249, 250, 250, 250, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 252, 252, 253, 253, - 254, 254, 255, 255, 255, 255, 255, 256, 256, 257, - 257, 258, 258, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, 260, 260, - 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261 + 243, 243, 244, 244, 244, 244, 245, 245, 246, 247, + 247, 248, 248, 249, 249, 250, 250, 250, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 252, 252, 253, + 253, 254, 254, 255, 255, 255, 255, 255, 256, 256, + 257, 257, 258, 258, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, + 260, 261, 261, 261, 261, 261, 261, 261, 261, 261, + 261, 261 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -2072,31 +2072,31 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 0, 2, 1, 1, 1, 0, 2, 1, 1, + 2, 0, 2, 1, 1, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 2, 0, 2, 0, 2, 0, 3, 2, 0, - 1, 0, 3, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 1, 2, 5, 5, 5, - 5, 3, 2, 5, 4, 2, 1, 1, 1, 3, - 1, 3, 1, 0, 1, 3, 4, 3, 3, 4, - 4, 3, 6, 5, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 6, 5, 8, 6, - 6, 7, 7, 7, 7, 6, 8, 8, 5, 7, - 3, 1, 1, 1, 1, 0, 2, 6, 1, 0, - 1, 2, 0, 3, 0, 3, 3, 3, 3, 0, - 8, 0, 9, 0, 9, 5, 2, 3, 1, 3, - 3, 3, 3, 1, 0, 5, 3, 1, 3, 1, - 0, 11, 1, 1, 4, 1, 1, 2, 3, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 3, 2, 2, 3, 2, 5, 4, 1, - 5, 1, 1, 1, 1, 1, 1, 2, 1, 3, - 2, 2, 3, 3, 2, 0, 1, 2, 2, 3, - 9, 9, 8, 15, 1, 1, 6, 5, 2, 2, - 6, 7, 4, 4, 6, 6, 0, 0, 3, 2, - 3, 2, 1, 5, 5, 6, 6, 6, 6, 4, - 6, 4, 4, 6, 6, 2, 9, 1, 1, 0, - 3, 6, 3, 6, 2, 5, 7, 5, 4, 4, - 7 + 1, 0, 2, 0, 2, 0, 2, 0, 3, 2, + 0, 1, 0, 3, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3, 1, 2, 5, 5, + 5, 5, 3, 2, 5, 4, 2, 1, 1, 1, + 3, 1, 3, 1, 0, 1, 3, 4, 3, 3, + 4, 4, 3, 6, 5, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 6, 5, 8, + 6, 6, 7, 7, 7, 7, 6, 8, 8, 5, + 7, 3, 1, 1, 1, 1, 0, 2, 6, 1, + 0, 1, 2, 0, 3, 0, 3, 3, 3, 3, + 0, 8, 0, 9, 0, 9, 5, 2, 3, 1, + 3, 3, 3, 3, 1, 0, 5, 3, 1, 3, + 1, 0, 11, 1, 1, 4, 1, 1, 2, 3, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 3, 2, 2, 3, 2, 5, 4, + 1, 5, 1, 1, 1, 1, 1, 1, 2, 1, + 3, 2, 2, 3, 3, 2, 0, 1, 2, 2, + 3, 9, 9, 8, 15, 1, 1, 6, 5, 2, + 2, 6, 7, 4, 4, 6, 6, 0, 0, 3, + 2, 3, 2, 1, 5, 5, 6, 6, 6, 6, + 4, 6, 4, 4, 6, 6, 2, 9, 1, 1, + 0, 3, 6, 3, 6, 2, 5, 7, 5, 4, + 4, 7 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -2104,684 +2104,686 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 68, 55, 65, 56, 66, 57, 224, 222, 0, 0, - 0, 0, 0, 0, 79, 67, 0, 68, 220, 83, - 86, 0, 0, 236, 0, 0, 62, 0, 69, 70, + 68, 55, 65, 56, 66, 57, 225, 223, 0, 0, + 0, 0, 0, 0, 79, 67, 0, 68, 221, 83, + 86, 0, 0, 237, 0, 0, 62, 0, 69, 70, 72, 71, 73, 76, 74, 77, 75, 78, 80, 81, - 82, 79, 79, 215, 1, 221, 84, 85, 79, 225, - 87, 88, 89, 90, 79, 295, 223, 295, 0, 0, - 244, 237, 238, 226, 281, 282, 228, 145, 146, 147, - 150, 149, 148, 151, 152, 0, 0, 0, 0, 283, - 284, 153, 227, 155, 215, 215, 91, 214, 0, 94, - 94, 296, 291, 63, 255, 256, 257, 290, 239, 240, - 243, 0, 173, 156, 0, 0, 0, 0, 162, 174, - 0, 0, 173, 0, 0, 0, 93, 92, 0, 212, - 213, 0, 0, 95, 96, 97, 98, 99, 116, 258, - 0, 0, 339, 339, 294, 0, 241, 172, 111, 168, - 170, 0, 0, 0, 0, 0, 0, 161, 0, 0, - 154, 0, 0, 167, 0, 166, 0, 235, 61, 61, - 100, 0, 252, 253, 254, 64, 338, 322, 0, 0, - 0, 0, 94, 304, 305, 2, 3, 4, 5, 6, + 82, 79, 79, 216, 1, 222, 84, 85, 79, 226, + 87, 88, 89, 90, 79, 296, 224, 296, 0, 0, + 245, 238, 239, 227, 282, 283, 229, 146, 147, 148, + 151, 150, 149, 152, 153, 0, 0, 0, 0, 284, + 285, 154, 228, 156, 216, 216, 91, 215, 0, 94, + 94, 297, 292, 63, 256, 257, 258, 291, 240, 241, + 244, 0, 174, 157, 0, 0, 0, 0, 163, 175, + 0, 0, 174, 0, 0, 0, 93, 92, 0, 213, + 214, 0, 0, 95, 96, 97, 98, 99, 117, 259, + 0, 0, 340, 340, 295, 0, 242, 173, 111, 169, + 171, 0, 0, 0, 0, 0, 0, 162, 0, 0, + 155, 0, 0, 168, 0, 167, 0, 236, 61, 61, + 100, 0, 253, 254, 255, 64, 339, 323, 0, 0, + 0, 0, 94, 305, 306, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16, 11, 12, 13, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 292, 94, 308, 0, 337, 293, 309, 242, - 165, 0, 130, 61, 61, 164, 0, 175, 0, 130, - 61, 61, 0, 216, 189, 191, 190, 192, 195, 188, - 193, 194, 184, 185, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 187, 186, 229, 115, 114, 113, 117, 0, - 321, 298, 61, 288, 297, 0, 0, 0, 116, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, - 53, 54, 49, 50, 51, 52, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 0, 0, 0, 136, - 136, 344, 61, 61, 335, 0, 0, 0, 0, 0, - 61, 61, 61, 61, 61, 0, 116, 0, 0, 0, - 102, 104, 103, 101, 105, 106, 107, 108, 109, 112, - 171, 169, 158, 159, 160, 163, 60, 157, 231, 233, + 0, 0, 293, 94, 309, 0, 338, 294, 310, 243, + 166, 0, 131, 61, 61, 165, 0, 176, 0, 131, + 61, 61, 0, 217, 190, 192, 191, 193, 196, 189, + 194, 195, 185, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 177, 211, 0, 0, 0, 181, 0, 178, - 0, 0, 0, 141, 0, 261, 262, 263, 264, 265, - 270, 266, 267, 268, 269, 259, 0, 0, 0, 0, - 279, 286, 285, 287, 0, 0, 299, 0, 0, 61, - 61, 61, 61, 0, 340, 0, 342, 317, 0, 0, + 0, 0, 188, 187, 230, 115, 114, 113, 116, 118, + 0, 322, 299, 61, 289, 298, 0, 0, 0, 117, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 0, 53, 54, 49, 50, 51, 52, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 0, 0, 0, + 137, 137, 345, 61, 61, 336, 0, 0, 0, 0, + 0, 61, 61, 61, 61, 61, 0, 117, 0, 0, + 0, 102, 104, 103, 101, 105, 106, 107, 108, 109, + 112, 172, 170, 159, 160, 161, 164, 60, 158, 232, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 212, 0, 0, 0, 182, 0, + |