diff --git a/test/CodeGen/Generic/BurgBadRegAlloc.ll b/test/CodeGen/Generic/BurgBadRegAlloc.ll new file mode 100644 index 00000000000..6bbee8440f3 --- /dev/null +++ b/test/CodeGen/Generic/BurgBadRegAlloc.ll @@ -0,0 +1,828 @@ +;; Register allocation is doing a very poor job on this routine from Burg: +;; -- at least two long-lived values are being allocated to %o? registers +;; -- even worse, those registers are being saved and restored repeatedly +;; at function calls, even though there are no intervening uses. +;; -- outgoing args of some function calls have to be swapped, causing +;; another write/read from stack to do the exchange (use -dregalloc=y). +;; + %Arity = type %struct.arity* + %Binding = type %struct.binding* + %DeltaCost = type [4 x short] + %Dimension = type %struct.dimension* + %Index_Map = type { int, %Item_Set* } + %IntList = type %struct.intlist* + %Item = type { %DeltaCost, %Rule } + %ItemArray = type %Item* + %Item_Set = type %struct.item_set* + %List = type %struct.list* + %Mapping = type %struct.mapping* + %NonTerminal = type %struct.nonterminal* + %Operator = type %struct.operator* + %Pattern = type %struct.pattern* + %PatternAST = type %struct.patternAST* + %Plank = type %struct.plank* + %PlankMap = type %struct.plankMap* + %ReadFn = type int ()* + %Rule = type %struct.rule* + %RuleAST = type %struct.ruleAST* + %StateMap = type %struct.stateMap* + %StrTableElement = type %struct.strTableElement* + %Symbol = type %struct.symbol* + %Table = type %struct.table* + %YYSTYPE = type { %IntList } + %struct.arity = type { int, %List } + %struct.binding = type { sbyte*, int } + %struct.dimension = type { short*, %Index_Map, %Mapping, int, %PlankMap } + %struct.index_map = type { int, %Item_Set* } + %struct.intlist = type { int, %IntList } + %struct.item = type { %DeltaCost, %Rule } + %struct.item_set = type { int, int, %Operator, [2 x %Item_Set], %Item_Set, short*, %ItemArray, %ItemArray } + %struct.list = type { sbyte*, %List } + %struct.mapping = type { %List*, int, int, int, %Item_Set* } + %struct.nonterminal = type { sbyte*, int, int, int, %PlankMap, %Rule } + %struct.operator = type { sbyte*, uint, int, int, int, int, %Table } + %struct.pattern = type { %NonTerminal, %Operator, [2 x %NonTerminal] } + %struct.patternAST = type { %Symbol, sbyte*, %List } + %struct.plank = type { sbyte*, %List, int } + %struct.plankMap = type { %List, int, %StateMap } + %struct.rule = type { %DeltaCost, int, int, int, %NonTerminal, %Pattern, uint } + %struct.ruleAST = type { sbyte*, %PatternAST, int, %IntList, %Rule, %StrTableElement, %StrTableElement } + %struct.stateMap = type { sbyte*, %Plank, int, short* } + %struct.strTableElement = type { sbyte*, %IntList, sbyte* } + %struct.symbol = type { sbyte*, int, { %Operator } } + %struct.table = type { %Operator, %List, short*, [2 x %Dimension], %Item_Set* } +%yylval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yylhs = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yylen = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yydefred = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yydgoto = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yysindex = external global [43 x short] ; <[43 x short]*> [#uses=2] +%yyrindex = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yygindex = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yytable = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yycheck = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yynerrs = external global int ; [#uses=3] +%yyerrflag = external global int ; [#uses=6] +%yychar = external global int ; [#uses=15] +%yyssp = external global short* ; [#uses=15] +%yyvsp = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=30] +%yyval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yyss = external global short* ; [#uses=3] +%yysslim = external global short* ; [#uses=3] +%yyvs = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=1] +%.LC01 = external global [13 x sbyte] ; <[13 x sbyte]*> [#uses=1] +%.LC1 = external global [20 x sbyte] ; <[20 x sbyte]*> [#uses=1] + +implementation ; Functions: + +int %yyparse() { +bb0: ; No predecessors! + store int 0, int* %yynerrs + store int 0, int* %yyerrflag + store int -1, int* %yychar + %reg113 = load short** %yyss ; [#uses=1] + %cond581 = setne short* %reg113, null ; [#uses=1] + br bool %cond581, label %bb3, label %bb2 + +bb2: ; preds = %bb0 + %reg584 = call int %yygrowstack( ) ; [#uses=1] + %cond584 = setne int %reg584, 0 ; [#uses=1] + br bool %cond584, label %bb113, label %bb3 + +bb3: ; preds = %bb2, %bb0 + %reg115 = load short** %yyss ; [#uses=1] + store short* %reg115, short** %yyssp + %reg116 = load %YYSTYPE** %yyvs ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg116, %YYSTYPE** %yyvsp + %reg117 = load short** %yyssp ; [#uses=1] + store short 0, short* %reg117 + br label %bb4 + +bb4: ; preds = %bb14, %bb15, %bb31, %bb35, %bb102, %bb112, %bb3 + %reg458 = phi uint [ %reg476, %bb112 ], [ 1, %bb102 ], [ %reg458, %bb35 ], [ %cast768, %bb31 ], [ %cast658, %bb15 ], [ %cast658, %bb14 ], [ 0, %bb3 ] ; [#uses=2] + %reg458-idxcast = cast uint %reg458 to long ; [#uses=3] + %reg594 = getelementptr [43 x short]* %yydefred, long 0, long %reg458-idxcast ; [#uses=1] + %reg125 = load short* %reg594 ; [#uses=1] + %cast599 = cast short %reg125 to int ; [#uses=2] + %cond600 = setne int %cast599, 0 ; [#uses=1] + br bool %cond600, label %bb36, label %bb5 + +bb5: ; preds = %bb4 + %reg127 = load int* %yychar ; [#uses=1] + %cond603 = setge int %reg127, 0 ; [#uses=1] + br bool %cond603, label %bb8, label %bb6 + +bb6: ; preds = %bb5 + %reg607 = call int %yylex( ) ; [#uses=1] + store int %reg607, int* %yychar + %reg129 = load int* %yychar ; [#uses=1] + %cond609 = setge int %reg129, 0 ; [#uses=1] + br bool %cond609, label %bb8, label %bb7 + +bb7: ; preds = %bb6 + store int 0, int* %yychar + br label %bb8 + +bb8: ; preds = %bb7, %bb6, %bb5 + %reg615 = getelementptr [43 x short]* %yysindex, long 0, long %reg458-idxcast ; [#uses=1] + %reg137 = load short* %reg615 ; [#uses=1] + %cast620 = cast short %reg137 to int ; [#uses=2] + %cond621 = seteq int %cast620, 0 ; [#uses=1] + br bool %cond621, label %bb16, label %bb9 + +bb9: ; preds = %bb8 + %reg139 = load int* %yychar ; [#uses=2] + %reg460 = add int %cast620, %reg139 ; [#uses=3] + %cond624 = setlt int %reg460, 0 ; [#uses=1] + br bool %cond624, label %bb16, label %bb10 + +bb10: ; preds = %bb9 + %cond627 = setgt int %reg460, 262 ; [#uses=1] + br bool %cond627, label %bb16, label %bb11 + +bb11: ; preds = %bb10 + %reg460-idxcast = cast int %reg460 to long ; [#uses=2] + %reg632 = getelementptr [263 x short]* %yycheck, long 0, long %reg460-idxcast ; [#uses=1] + %reg148 = load short* %reg632 ; [#uses=1] + %cast637 = cast short %reg148 to int ; [#uses=1] + %cond639 = setne int %cast637, %reg139 ; [#uses=1] + br bool %cond639, label %bb16, label %bb12 + +bb12: ; preds = %bb11 + %reg150 = load short** %yyssp ; [#uses=1] + %cast640 = cast short* %reg150 to sbyte* ; [#uses=1] + %reg151 = load short** %yysslim ; [#uses=1] + %cast641 = cast short* %reg151 to sbyte* ; [#uses=1] + %cond642 = setlt sbyte* %cast640, %cast641 ; [#uses=1] + br bool %cond642, label %bb14, label %bb13 + +bb13: ; preds = %bb12 + %reg644 = call int %yygrowstack( ) ; [#uses=1] + %cond644 = setne int %reg644, 0 ; [#uses=1] + br bool %cond644, label %bb113, label %bb14 + +bb14: ; preds = %bb13, %bb12 + %reg153 = load short** %yyssp ; [#uses=1] + %reg647 = getelementptr short* %reg153, long 1 ; [#uses=2] + store short* %reg647, short** %yyssp + %reg653 = getelementptr [263 x short]* %yytable, long 0, long %reg460-idxcast ; [#uses=1] + %reg162 = load short* %reg653 ; [#uses=2] + %cast658 = cast short %reg162 to uint ; [#uses=2] + store short %reg162, short* %reg647 + %reg164 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg661 = getelementptr %YYSTYPE* %reg164, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg661, %YYSTYPE** %yyvsp + %reg167 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg661.idx1 = getelementptr %YYSTYPE* %reg164, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg167, %IntList* %reg661.idx1 + store int -1, int* %yychar + %reg169 = load int* %yyerrflag ; [#uses=2] + %cond669 = setle int %reg169, 0 ; [#uses=1] + br bool %cond669, label %bb4, label %bb15 + +bb15: ; preds = %bb14 + %reg171 = add int %reg169, -1 ; [#uses=1] + store int %reg171, int* %yyerrflag + br label %bb4 + +bb16: ; preds = %bb11, %bb10, %bb9, %bb8 + %reg677 = getelementptr [43 x short]* %yyrindex, long 0, long %reg458-idxcast ; [#uses=1] + %reg178 = load short* %reg677 ; [#uses=1] + %cast682 = cast short %reg178 to int ; [#uses=2] + %cond683 = seteq int %cast682, 0 ; [#uses=1] + br bool %cond683, label %bb21, label %bb17 + +bb17: ; preds = %bb16 + %reg180 = load int* %yychar ; [#uses=2] + %reg463 = add int %cast682, %reg180 ; [#uses=3] + %cond686 = setlt int %reg463, 0 ; [#uses=1] + br bool %cond686, label %bb21, label %bb18 + +bb18: ; preds = %bb17 + %cond689 = setgt int %reg463, 262 ; [#uses=1] + br bool %cond689, label %bb21, label %bb19 + +bb19: ; preds = %bb18 + %reg463-idxcast = cast int %reg463 to long ; [#uses=2] + %reg694 = getelementptr [263 x short]* %yycheck, long 0, long %reg463-idxcast ; [#uses=1] + %reg189 = load short* %reg694 ; [#uses=1] + %cast699 = cast short %reg189 to int ; [#uses=1] + %cond701 = setne int %cast699, %reg180 ; [#uses=1] + br bool %cond701, label %bb21, label %bb20 + +bb20: ; preds = %bb19 + %reg704 = getelementptr [263 x short]* %yytable, long 0, long %reg463-idxcast ; [#uses=1] + %reg197 = load short* %reg704 ; [#uses=1] + %cast709 = cast short %reg197 to int ; [#uses=1] + br label %bb36 + +bb21: ; preds = %bb19, %bb18, %bb17, %bb16 + %reg198 = load int* %yyerrflag ; [#uses=1] + %cond711 = setne int %reg198, 0 ; [#uses=1] + br bool %cond711, label %bb23, label %bb22 + +bb22: ; preds = %bb21 + call void %yyerror( sbyte* getelementptr ([13 x sbyte]* %.LC01, long 0, long 0) ) + %reg200 = load int* %yynerrs ; [#uses=1] + %reg201 = add int %reg200, 1 ; [#uses=1] + store int %reg201, int* %yynerrs + br label %bb23 + +bb23: ; preds = %bb22, %bb21 + %reg202 = load int* %yyerrflag ; [#uses=1] + %cond719 = setgt int %reg202, 2 ; [#uses=1] + br bool %cond719, label %bb34, label %bb24 + +bb24: ; preds = %bb23 + store int 3, int* %yyerrflag + %reg241 = load short** %yyss ; [#uses=1] + %cast778 = cast short* %reg241 to sbyte* ; [#uses=1] + br label %bb25 + +bb25: ; preds = %bb33, %bb24 + %reg204 = load short** %yyssp ; [#uses=4] + %reg206 = load short* %reg204 ; [#uses=1] + %reg206-idxcast = cast short %reg206 to long ; [#uses=1] + %reg727 = getelementptr [43 x short]* %yysindex, long 0, long %reg206-idxcast ; [#uses=1] + %reg212 = load short* %reg727 ; [#uses=2] + %cast732 = cast short %reg212 to int ; [#uses=2] + %cond733 = seteq int %cast732, 0 ; [#uses=1] + br bool %cond733, label %bb32, label %bb26 + +bb26: ; preds = %bb25 + %reg466 = add int %cast732, 256 ; [#uses=2] + %cond736 = setlt int %reg466, 0 ; [#uses=1] + br bool %cond736, label %bb32, label %bb27 + +bb27: ; preds = %bb26 + %cond739 = setgt int %reg466, 262 ; [#uses=1] + br bool %cond739, label %bb32, label %bb28 + +bb28: ; preds = %bb27 + %reg212-idxcast = cast short %reg212 to long ; [#uses=1] + %reg212-idxcast-offset = add long %reg212-idxcast, 256 ; [#uses=2] + %reg744 = getelementptr [263 x short]* %yycheck, long 0, long %reg212-idxcast-offset ; [#uses=1] + %reg221 = load short* %reg744 ; [#uses=1] + %cond748 = setne short %reg221, 256 ; [#uses=1] + br bool %cond748, label %bb32, label %bb29 + +bb29: ; preds = %bb28 + %cast750 = cast short* %reg204 to sbyte* ; [#uses=1] + %reg223 = load short** %yysslim ; [#uses=1] + %cast751 = cast short* %reg223 to sbyte* ; [#uses=1] + %cond752 = setlt sbyte* %cast750, %cast751 ; [#uses=1] + br bool %cond752, label %bb31, label %bb30 + +bb30: ; preds = %bb29 + %reg754 = call int %yygrowstack( ) ; [#uses=1] + %cond754 = setne int %reg754, 0 ; [#uses=1] + br bool %cond754, label %bb113, label %bb31 + +bb31: ; preds = %bb30, %bb29 + %reg225 = load short** %yyssp ; [#uses=1] + %reg757 = getelementptr short* %reg225, long 1 ; [#uses=2] + store short* %reg757, short** %yyssp + %reg763 = getelementptr [263 x short]* %yytable, long 0, long %reg212-idxcast-offset ; [#uses=1] + %reg234 = load short* %reg763 ; [#uses=2] + %cast768 = cast short %reg234 to uint ; [#uses=1] + store short %reg234, short* %reg757 + %reg236 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg771 = getelementptr %YYSTYPE* %reg236, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg771, %YYSTYPE** %yyvsp + %reg239 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg771.idx1 = getelementptr %YYSTYPE* %reg236, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg239, %IntList* %reg771.idx1 + br label %bb4 + +bb32: ; preds = %bb28, %bb27, %bb26, %bb25 + %cast777 = cast short* %reg204 to sbyte* ; [#uses=1] + %cond779 = setle sbyte* %cast777, %cast778 ; [#uses=1] + br bool %cond779, label %UnifiedExitNode, label %bb33 + +bb33: ; preds = %bb32 + %reg781 = getelementptr short* %reg204, long -1 ; [#uses=1] + store short* %reg781, short** %yyssp + %reg244 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg786 = getelementptr %YYSTYPE* %reg244, long -1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg786, %YYSTYPE** %yyvsp + br label %bb25 + +bb34: ; preds = %bb23 + %reg246 = load int* %yychar ; [#uses=1] + %cond791 = seteq int %reg246, 0 ; [#uses=1] + br bool %cond791, label %UnifiedExitNode, label %bb35 + +bb35: ; preds = %bb34 + store int -1, int* %yychar + br label %bb4 + +bb36: ; preds = %bb20, %bb4 + %reg468 = phi int [ %cast709, %bb20 ], [ %cast599, %bb4 ] ; [#uses=31] + %reg468-idxcast = cast int %reg468 to long ; [#uses=2] + %reg796 = getelementptr [25 x short]* %yylen, long 0, long %reg468-idxcast ; [#uses=1] + %reg254 = load short* %reg796 ; [#uses=2] + %reg259 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg254-idxcast = cast short %reg254 to long ; [#uses=1] + %reg254-idxcast-scale = mul long %reg254-idxcast, -1 ; [#uses=1] + %reg254-idxcast-scale-offset = add long %reg254-idxcast-scale, 1 ; [#uses=1] + %reg261.idx1 = getelementptr %YYSTYPE* %reg259, long %reg254-idxcast-scale-offset, ubyte 0 ; <%IntList*> [#uses=1] + %reg261 = load %IntList* %reg261.idx1 ; <%IntList> [#uses=1] + store %IntList %reg261, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %cond812 = seteq int %reg468, 13 ; [#uses=1] + br bool %cond812, label %bb85, label %bb37 + +bb37: ; preds = %bb36 + %cond814 = setgt int %reg468, 13 ; [#uses=1] + br bool %cond814, label %bb56, label %bb38 + +bb38: ; preds = %bb37 + %cond817 = seteq int %reg468, 7 ; [#uses=1] + br bool %cond817, label %bb79, label %bb39 + +bb39: ; preds = %bb38 + %cond819 = setgt int %reg468, 7 ; [#uses=1] + br bool %cond819, label %bb48, label %bb40 + +bb40: ; preds = %bb39 + %cond822 = seteq int %reg468, 4 ; [#uses=1] + br bool %cond822, label %bb76, label %bb41 + +bb41: ; preds = %bb40 + %cond824 = setgt int %reg468, 4 ; [#uses=1] + br bool %cond824, label %bb45, label %bb42 + +bb42: ; preds = %bb41 + %cond827 = seteq int %reg468, 2 ; [#uses=1] + br bool %cond827, label %bb74, label %bb43 + +bb43: ; preds = %bb42 + %cond829 = seteq int %reg468, 3 ; [#uses=1] + br bool %cond829, label %bb75, label %bb97 + +bb45: ; preds = %bb41 + %cond831 = seteq int %reg468, 5 ; [#uses=1] + br bool %cond831, label %bb77, label %bb46 + +bb46: ; preds = %bb45 + %cond833 = seteq int %reg468, 6 ; [#uses=1] + br bool %cond833, label %bb78, label %bb97 + +bb48: ; preds = %bb39 + %cond835 = seteq int %reg468, 10 ; [#uses=1] + br bool %cond835, label %bb82, label %bb49 + +bb49: ; preds = %bb48 + %cond837 = setgt int %reg468, 10 ; [#uses=1] + br bool %cond837, label %bb53, label %bb50 + +bb50: ; preds = %bb49 + %cond840 = seteq int %reg468, 8 ; [#uses=1] + br bool %cond840, label %bb80, label %bb51 + +bb51: ; preds = %bb50 + %cond842 = seteq int %reg468, 9 ; [#uses=1] + br bool %cond842, label %bb81, label %bb97 + +bb53: ; preds = %bb49 + %cond844 = seteq int %reg468, 11 ; [#uses=1] + br bool %cond844, label %bb83, label %bb54 + +bb54: ; preds = %bb53 + %cond846 = seteq int %reg468, 12 ; [#uses=1] + br bool %cond846, label %bb84, label %bb97 + +bb56: ; preds = %bb37 + %cond848 = seteq int %reg468, 19 ; [#uses=1] + br bool %cond848, label %bb91, label %bb57 + +bb57: ; preds = %bb56 + %cond850 = setgt int %reg468, 19 ; [#uses=1] + br bool %cond850, label %bb66, label %bb58 + +bb58: ; preds = %bb57 + %cond853 = seteq int %reg468, 16 ; [#uses=1] + br bool %cond853, label %bb88, label %bb59 + +bb59: ; preds = %bb58 + %cond855 = setgt int %reg468, 16 ; [#uses=1] + br bool %cond855, label %bb63, label %bb60 + +bb60: ; preds = %bb59 + %cond858 = seteq int %reg468, 14 ; [#uses=1] + br bool %cond858, label %bb86, label %bb61 + +bb61: ; preds = %bb60 + %cond860 = seteq int %reg468, 15 ; [#uses=1] + br bool %cond860, label %bb87, label %bb97 + +bb63: ; preds = %bb59 + %cond862 = seteq int %reg468, 17 ; [#uses=1] + br bool %cond862, label %bb89, label %bb64 + +bb64: ; preds = %bb63 + %cond864 = seteq int %reg468, 18 ; [#uses=1] + br bool %cond864, label %bb90, label %bb97 + +bb66: ; preds = %bb57 + %cond866 = seteq int %reg468, 22 ; [#uses=1] + br bool %cond866, label %bb94, label %bb67 + +bb67: ; preds = %bb66 + %cond868 = setgt int %reg468, 22 ; [#uses=1] + br bool %cond868, label %bb71, label %bb68 + +bb68: ; preds = %bb67 + %cond871 = seteq int %reg468, 20 ; [#uses=1] + br bool %cond871, label %bb92, label %bb69 + +bb69: ; preds = %bb68 + %cond873 = seteq int %reg468, 21 ; [#uses=1] + br bool %cond873, label %bb93, label %bb97 + +bb71: ; preds = %bb67 + %cond875 = seteq int %reg468, 23 ; [#uses=1] + br bool %cond875, label %bb95, label %bb72 + +bb72: ; preds = %bb71 + %cond877 = seteq int %reg468, 24 ; [#uses=1] + br bool %cond877, label %bb96, label %bb97 + +bb74: ; preds = %bb42 + call void %yyfinished( ) + br label %bb97 + +bb75: ; preds = %bb43 + %reg262 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg264.idx1 = getelementptr %YYSTYPE* %reg262, long -2, ubyte 0 ; <%IntList*> [#uses=1] + %reg264 = load %IntList* %reg264.idx1 ; <%IntList> [#uses=1] + %reg265.idx = getelementptr %YYSTYPE* %reg262, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg265 = load %IntList* %reg265.idx ; <%IntList> [#uses=1] + %cast889 = cast %IntList %reg265 to %List ; <%List> [#uses=1] + %cast890 = cast %IntList %reg264 to %List ; <%List> [#uses=1] + call void %doSpec( %List %cast890, %List %cast889 ) + br label %bb97 + +bb76: ; preds = %bb40 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb77: ; preds = %bb45 + %reg269 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast894 = getelementptr %YYSTYPE* %reg269, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg271 = load %IntList* %cast894 ; <%IntList> [#uses=1] + %reg271 = cast %IntList %reg271 to sbyte* ; [#uses=1] + %reg272.idx1 = getelementptr %YYSTYPE* %reg269, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg272 = load %IntList* %reg272.idx1 ; <%IntList> [#uses=1] + %cast901 = cast %IntList %reg272 to %List ; <%List> [#uses=1] + %reg901 = call %List %newList( sbyte* %reg271, %List %cast901 ) ; <%List> [#uses=1] + cast %List %reg901 to %IntList ; <%IntList>:0 [#uses=1] + store %IntList %0, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb78: ; preds = %bb46 + %reg275 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg277.idx = getelementptr %YYSTYPE* %reg275, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg277 = load %IntList* %reg277.idx ; <%IntList> [#uses=1] + %cast907 = cast %IntList %reg277 to %List ; <%List> [#uses=1] + %reg907 = call %Arity %newArity( int -1, %List %cast907 ) ; <%Arity> [#uses=1] + cast %Arity %reg907 to %IntList ; <%IntList>:1 [#uses=1] + store %IntList %1, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb79: ; preds = %bb38 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %reg281 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast912 = getelementptr %YYSTYPE* %reg281, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg282 = load %IntList* %cast912 ; <%IntList> [#uses=1] + %reg282 = cast %IntList %reg282 to %List ; <%List> [#uses=1] + call void %doGram( %List %reg282 ) + br label %bb97 + +bb80: ; preds = %bb50 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %reg285 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast917 = getelementptr %YYSTYPE* %reg285, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg286 = load %IntList* %cast917 ; <%IntList> [#uses=1] + %reg286 = cast %IntList %reg286 to sbyte* ; [#uses=1] + call void %doStart( sbyte* %reg286 ) + br label %bb97 + +bb81: ; preds = %bb51 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb82: ; preds = %bb48 + %reg290 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast923 = getelementptr %YYSTYPE* %reg290, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg292 = load %IntList* %cast923 ; <%IntList> [#uses=1] + %reg292 = cast %IntList %reg292 to sbyte* ; [#uses=1] + %reg293.idx1 = getelementptr %YYSTYPE* %reg290, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg293 = load %IntList* %reg293.idx1 ; <%IntList> [#uses=1] + %cast930 = cast %IntList %reg293 to %List ; <%List> [#uses=1] + %reg930 = call %List %newList( sbyte* %reg292, %List %cast930 ) ; <%List> [#uses=1] + cast %List %reg930 to %IntList ; <%IntList>:2 [#uses=1] + store %IntList %2, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb83: ; preds = %bb53 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb84: ; preds = %bb54 + %reg298 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast936 = getelementptr %YYSTYPE* %reg298, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg300 = load %IntList* %cast936 ; <%IntList> [#uses=1] + %reg300 = cast %IntList %reg300 to sbyte* ; [#uses=1] + %reg301.idx1 = getelementptr %YYSTYPE* %reg298, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg301 = load %IntList* %reg301.idx1 ; <%IntList> [#uses=1] + %cast943 = cast %IntList %reg301 to %List ; <%List> [#uses=1] + %reg943 = call %List %newList( sbyte* %reg300, %List %cast943 ) ; <%List> [#uses=1] + cast %List %reg943 to %IntList ; <%IntList>:3 [#uses=1] + store %IntList %3, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb85: ; preds = %bb36 + %reg304 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast9521 = getelementptr %YYSTYPE* %reg304, long -2, ubyte 0 ; <%IntList*> [#uses=1] + %reg306 = load %IntList* %cast9521 ; <%IntList> [#uses=1] + %reg306 = cast %IntList %reg306 to sbyte* ; [#uses=1] + %cast953 = cast %YYSTYPE* %reg304 to int* ; [#uses=1] + %reg307 = load int* %cast953 ; [#uses=1] + %reg955 = call %Binding %newBinding( sbyte* %reg306, int %reg307 ) ; <%Binding> [#uses=1] + cast %Binding %reg955 to %IntList ; <%IntList>:4 [#uses=1] + store %IntList %4, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb86: ; preds = %bb60 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb87: ; preds = %bb61 + %reg312 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast961 = getelementptr %YYSTYPE* %reg312, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg314 = load %IntList* %cast961 ; <%IntList> [#uses=1] + %reg314 = cast %IntList %reg314 to sbyte* ; [#uses=1] + %reg315.idx1 = getelementptr %YYSTYPE* %reg312, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg315 = load %IntList* %reg315.idx1 ; <%IntList> [#uses=1] + %cast968 = cast %IntList %reg315 to %List ; <%List> [#uses=1] + %reg968 = call %List %newList( sbyte* %reg314, %List %cast968 ) ; <%List> [#uses=1] + cast %List %reg968 to %IntList ; <%IntList>:5 [#uses=1] + store %IntList %5, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb88: ; preds = %bb58 + %reg318 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=4] + %cast9791 = getelementptr %YYSTYPE* %reg318, long -6, ubyte 0 ; <%IntList*> [#uses=1] + %reg322 = load %IntList* %cast9791 ; <%IntList> [#uses=1] + %reg322 = cast %IntList %reg322 to sbyte* ; [#uses=1] + %reg323.idx1 = getelementptr %YYSTYPE* %reg318, long -4, ubyte 0 ; <%IntList*> [#uses=1] + %reg323 = load %IntList* %reg323.idx1 ; <%IntList> [#uses=1] + %reg987 = getelementptr %YYSTYPE* %reg318, long -2 ; <%YYSTYPE*> [#uses=1] + %cast989 = cast %YYSTYPE* %reg987 to int* ; [#uses=1] + %reg324 = load int* %cast989 ; [#uses=1] + %reg325.idx1 = getelementptr %YYSTYPE* %reg318, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg325 = load %IntList* %reg325.idx1 ; <%IntList> [#uses=1] + %cast998 = cast %IntList %reg323 to %PatternAST ; <%PatternAST> [#uses=1] + %reg996 = call %RuleAST %newRuleAST( sbyte* %reg322, %PatternAST %cast998, int %reg324, %IntList %reg325 ) ; <%RuleAST> [#uses=1] + cast %RuleAST %reg996 to %IntList ; <%IntList>:6 [#uses=1] + store %IntList %6, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb89: ; preds = %bb63 + %reg328 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast1002 = getelementptr %YYSTYPE* %reg328, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg329 = load %IntList* %cast1002 ; <%IntList> [#uses=1] + %reg329 = cast %IntList %reg329 to sbyte* ; [#uses=1] + %reg1004 = call %PatternAST %newPatternAST( sbyte* %reg329, %List null ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1004 to %IntList ; <%IntList>:7 [#uses=1] + store %IntList %7, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb90: ; preds = %bb64 + %reg333 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast10131 = getelementptr %YYSTYPE* %reg333, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg335 = load %IntList* %cast10131 ; <%IntList> [#uses=1] + %reg335 = cast %IntList %reg335 to sbyte* ; [#uses=1] + %reg1015 = call %List %newList( sbyte* %reg335, %List null ) ; <%List> [#uses=1] + %cast10211 = getelementptr %YYSTYPE* %reg333, long -3, ubyte 0 ; <%IntList*> [#uses=1] + %reg338 = load %IntList* %cast10211 ; <%IntList> [#uses=1] + %reg338 = cast %IntList %reg338 to sbyte* ; [#uses=1] + %reg1023 = call %PatternAST %newPatternAST( sbyte* %reg338, %List %reg1015 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1023 to %IntList ; <%IntList>:8 [#uses=1] + store %IntList %8, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb91: ; preds = %bb56 + %reg341 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=3] + %cast10331 = getelementptr %YYSTYPE* %reg341, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg344 = load %IntList* %cast10331 ; <%IntList> [#uses=1] + %reg344 = cast %IntList %reg344 to sbyte* ; [#uses=1] + %reg1035 = call %List %newList( sbyte* %reg344, %List null ) ; <%List> [#uses=1] + %cast10411 = getelementptr %YYSTYPE* %reg341, long -3, ubyte 0 ; <%IntList*> [#uses=1] + %reg347 = load %IntList* %cast10411 ; <%IntList> [#uses=1] + %reg347 = cast %IntList %reg347 to sbyte* ; [#uses=1] + %reg1043 = call %List %newList( sbyte* %reg347, %List %reg1035 ) ; <%List> [#uses=1] + %cast10491 = getelementptr %YYSTYPE* %reg341, long -5, ubyte 0 ; <%IntList*> [#uses=1] + %reg349 = load %IntList* %cast10491 ; <%IntList> [#uses=1] + %reg349 = cast %IntList %reg349 to sbyte* ; [#uses=1] + %reg1051 = call %PatternAST %newPatternAST( sbyte* %reg349, %List %reg1043 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1051 to %IntList ; <%IntList>:9 [#uses=1] + store %IntList %9, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb92: ; preds = %bb68 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb93: ; preds = %bb69 + %reg354 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1059 = getelementptr %YYSTYPE* %reg354, long -2 ; <%YYSTYPE*> [#uses=1] + %cast1061 = cast %YYSTYPE* %reg1059 to int* ; [#uses=1] + %reg356 = load int* %cast1061 ; [#uses=1] + %reg357.idx1 = getelementptr %YYSTYPE* %reg354, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg357 = load %IntList* %reg357.idx1 ; <%IntList> [#uses=1] + %reg1068 = call %IntList %newIntList( int %reg356, %IntList %reg357 ) ; <%IntList> [#uses=1] + store %IntList %reg1068, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb94: ; preds = %bb66 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb95: ; preds = %bb71 + %reg362 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1076 = getelementptr %YYSTYPE* %reg362, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1078 = cast %YYSTYPE* %reg1076 to int* ; [#uses=1] + %reg364 = load int* %cast1078 ; [#uses=1] + %reg365.idx = getelementptr %YYSTYPE* %reg362, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg365 = load %IntList* %reg365.idx ; <%IntList> [#uses=1] + %reg1081 = call %IntList %newIntList( int %reg364, %IntList %reg365 ) ; <%IntList> [#uses=1] + store %IntList %reg1081, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb96: ; preds = %bb72 + %reg368 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1088 = getelementptr %YYSTYPE* %reg368, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1090 = cast %YYSTYPE* %reg1088 to int* ; [#uses=1] + %reg370 = load int* %cast1090 ; [#uses=1] + %reg371.idx = getelementptr %YYSTYPE* %reg368, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg371 = load %IntList* %reg371.idx ; <%IntList> [#uses=1] + %reg1093 = call %IntList %newIntList( int %reg370, %IntList %reg371 ) ; <%IntList> [#uses=1] + store %IntList %reg1093, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb97: ; preds = %bb96, %bb95, %bb94, %bb93, %bb92, %bb91, %bb90, %bb89, %bb88, %bb87, %bb86, %bb85, %bb84, %bb83, %bb82, %bb81, %bb80, %bb79, %bb78, %bb77, %bb76, %bb75, %bb74, %bb72, %bb69, %bb64, %bb61, %bb54, %bb51, %bb46, %bb43 + %cast1097 = cast short %reg254 to ulong ; [#uses=3] + %reg375 = add ulong %cast1097, %cast1097 ; [#uses=1] + %reg377 = load short** %yyssp ; [#uses=1] + %cast379 = cast short* %reg377 to ulong ; [#uses=1] + %reg381 = sub ulong %cast379, %reg375 ; [#uses=1] + %cast1099 = cast ulong %reg381 to short* ; [#uses=1] + store short* %cast1099, short** %yyssp + %reg382 = load short** %yyssp ; [#uses=3] + %reg383 = load short* %reg382 ; [#uses=1] + %cast1103 = cast short %reg383 to int ; [#uses=3] + %reg385 = mul ulong %cast1097, 8 ; [#uses=1] + %reg387 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast389 = cast %YYSTYPE* %reg387 to ulong ; [#uses=1] + %reg391 = sub ulong %cast389, %reg385 ; [#uses=1] + %cast1108 = cast ulong %reg391 to %YYSTYPE* ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %cast1108, %YYSTYPE** %yyvsp + %reg1111 = getelementptr [25 x short]* %yylhs, long 0, long %reg468-idxcast ; [#uses=1] + %reg398 = load short* %reg1111 ; [#uses=2] + %cast1116 = cast short %reg398 to int ; [#uses=1] + %cond1117 = setne int %cast1103, 0 ; [#uses=1] + br bool %cond1117, label %bb104, label %bb98 + +bb98: ; preds = %bb97 + %cond1119 = setne int %cast1116, 0 ; [#uses=1] + br bool %cond1119, label %bb104, label %bb99 + +bb99: ; preds = %bb98 + %reg1122 = getelementptr short* %reg382, long 1 ; [#uses=2] + store short* %reg1122, short** %yyssp + store short 1, short* %reg1122 + %reg403 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1128 = getelementptr %YYSTYPE* %reg403, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1128, %YYSTYPE** %yyvsp + %reg406 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg1128.idx1 = getelementptr %YYSTYPE* %reg403, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg406, %IntList* %reg1128.idx1 + %reg407 = load int* %yychar ; [#uses=1] + %cond1135 = setge int %reg407, 0 ; [#uses=1] + br bool %cond1135, label %bb102, label %bb100 + +bb100: ; preds = %bb99 + %reg1139 = call int %yylex( ) ; [#uses=1] + store int %reg1139, int* %yychar + %reg409 = load int* %yychar ; [#uses=1] + %cond1141 = setge int %reg409, 0 ; [#uses=1] + br bool %cond1141, label %bb102, label %bb101 + +bb101: ; preds = %bb100 + store int 0, int* %yychar + br label %bb102 + +bb102: ; preds = %bb101, %bb100, %bb99 + %reg411 = load int* %yychar ; [#uses=1] + %cond1146 = setne int %reg411, 0 ; [#uses=1] + br bool %cond1146, label %bb4, label %UnifiedExitNode + +bb104: ; preds = %bb98, %bb97 + %reg398-idxcast = cast short %reg398 to long ; [#uses=2] + %reg1150 = getelementptr [12 x short]* %yygindex, long 0, long %reg398-idxcast ; [#uses=1] + %reg418 = load short* %reg1150 ; [#uses=1] + %cast1155 = cast short %reg418 to int ; [#uses=2] + %cond1156 = seteq int %cast1155, 0 ; [#uses=1] + br bool %cond1156, label %bb109, label %bb105 + +bb105: ; preds = %bb104 + %reg473 = add int %cast1155, %cast1103 ; [#uses=3] + %cond1158 = setlt int %reg473, 0 ; [#uses=1] + br bool %cond1158, label %bb109, label %bb106 + +bb106: ; preds = %bb105 + %cond1161 = setgt int %reg473, 262 ; [#uses=1] + br bool %cond1161, label %bb109, label %bb107 + +bb107: ; preds = %bb106 + %reg473-idxcast = cast int %reg473 to long ; [#uses=2] + %reg1166 = getelementptr [263 x short]* %yycheck, long 0, long %reg473-idxcast ; [#uses=1] + %reg428 = load short* %reg1166 ; [#uses=1] + %cast1171 = cast short %reg428 to int ; [#uses=1] + %cond1172 = setne int %cast1171, %cast1103 ; [#uses=1] + br bool %cond1172, label %bb109, label %bb108 + +bb108: ; preds = %bb107 + %reg1175 = getelementptr [263 x short]* %yytable, long 0, long %reg473-idxcast ; [#uses=1] + %reg435 = load short* %reg1175 ; [#uses=1] + %cast1180 = cast short %reg435 to uint ; [#uses=1] + br label %bb110 + +bb109: ; preds = %bb107, %bb106, %bb105, %bb104 + %reg1183 = getelementptr [12 x short]* %yydgoto, long 0, long %reg398-idxcast ; [#uses=1] + %reg442 = load short* %reg1183 ; [#uses=1] + %cast1188 = cast short %reg442 to uint ; [#uses=1] + br label %bb110 + +bb110: ; preds = %bb109, %bb108 + %reg476 = phi uint [ %cast1188, %bb109 ], [ %cast1180, %bb108 ] ; [#uses=2] + %cast1189 = cast short* %reg382 to sbyte* ; [#uses=1] + %reg444 = load short** %yysslim ; [#uses=1] + %cast1190 = cast short* %reg444 to sbyte* ; [#uses=1] + %cond1191 = setlt sbyte* %cast1189, %cast1190 ; [#uses=1] + br bool %cond1191, label %bb112, label %bb111 + +bb111: ; preds = %bb110 + %reg1193 = call int %yygrowstack( ) ; [#uses=1] + %cond1193 = setne int %reg1193, 0 ; [#uses=1] + br bool %cond1193, label %bb113, label %bb112 + +bb112: ; preds = %bb111, %bb110 + %reg446 = load short** %yyssp ; [#uses=1] + %reg1196 = getelementptr short* %reg446, long 1 ; [#uses=2] + store short* %reg1196, short** %yyssp + %cast1357 = cast uint %reg476 to short ; [#uses=1] + store short %cast1357, short* %reg1196 + %reg449 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1202 = getelementptr %YYSTYPE* %reg449, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1202, %YYSTYPE** %yyvsp + %reg452 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg1202.idx1 = getelementptr %YYSTYPE* %reg449, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg452, %IntList* %reg1202.idx1 + br label %bb4 + +bb113: ; preds = %bb111, %bb30, %bb13, %bb2 + call void %yyerror( sbyte* getelementptr ([20 x sbyte]* %.LC1, long 0, long 0) ) + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %bb113, %bb102, %bb34, %bb32 + %UnifiedRetVal = phi int [ 1, %bb113 ], [ 1, %bb34 ], [ 1, %bb32 ], [ 0, %bb102 ] ; [#uses=1] + ret int %UnifiedRetVal +} + +declare %List %newList(sbyte*, %List) + +declare %IntList %newIntList(int, %IntList) + +declare void %doStart(sbyte*) + +declare void %yyerror(sbyte*) + +declare void %doSpec(%List, %List) + +declare %Arity %newArity(int, %List) + +declare %Binding %newBinding(sbyte*, int) + +declare %PatternAST %newPatternAST(sbyte*, %List) + +declare %RuleAST %newRuleAST(sbyte*, %PatternAST, int, %IntList) + +declare void %yyfinished() + +declare int %yylex() + +declare void %doGram(%List) + +declare int %yygrowstack() diff --git a/test/LLC/BurgBadRegAlloc.ll b/test/LLC/BurgBadRegAlloc.ll new file mode 100644 index 00000000000..6bbee8440f3 --- /dev/null +++ b/test/LLC/BurgBadRegAlloc.ll @@ -0,0 +1,828 @@ +;; Register allocation is doing a very poor job on this routine from Burg: +;; -- at least two long-lived values are being allocated to %o? registers +;; -- even worse, those registers are being saved and restored repeatedly +;; at function calls, even though there are no intervening uses. +;; -- outgoing args of some function calls have to be swapped, causing +;; another write/read from stack to do the exchange (use -dregalloc=y). +;; + %Arity = type %struct.arity* + %Binding = type %struct.binding* + %DeltaCost = type [4 x short] + %Dimension = type %struct.dimension* + %Index_Map = type { int, %Item_Set* } + %IntList = type %struct.intlist* + %Item = type { %DeltaCost, %Rule } + %ItemArray = type %Item* + %Item_Set = type %struct.item_set* + %List = type %struct.list* + %Mapping = type %struct.mapping* + %NonTerminal = type %struct.nonterminal* + %Operator = type %struct.operator* + %Pattern = type %struct.pattern* + %PatternAST = type %struct.patternAST* + %Plank = type %struct.plank* + %PlankMap = type %struct.plankMap* + %ReadFn = type int ()* + %Rule = type %struct.rule* + %RuleAST = type %struct.ruleAST* + %StateMap = type %struct.stateMap* + %StrTableElement = type %struct.strTableElement* + %Symbol = type %struct.symbol* + %Table = type %struct.table* + %YYSTYPE = type { %IntList } + %struct.arity = type { int, %List } + %struct.binding = type { sbyte*, int } + %struct.dimension = type { short*, %Index_Map, %Mapping, int, %PlankMap } + %struct.index_map = type { int, %Item_Set* } + %struct.intlist = type { int, %IntList } + %struct.item = type { %DeltaCost, %Rule } + %struct.item_set = type { int, int, %Operator, [2 x %Item_Set], %Item_Set, short*, %ItemArray, %ItemArray } + %struct.list = type { sbyte*, %List } + %struct.mapping = type { %List*, int, int, int, %Item_Set* } + %struct.nonterminal = type { sbyte*, int, int, int, %PlankMap, %Rule } + %struct.operator = type { sbyte*, uint, int, int, int, int, %Table } + %struct.pattern = type { %NonTerminal, %Operator, [2 x %NonTerminal] } + %struct.patternAST = type { %Symbol, sbyte*, %List } + %struct.plank = type { sbyte*, %List, int } + %struct.plankMap = type { %List, int, %StateMap } + %struct.rule = type { %DeltaCost, int, int, int, %NonTerminal, %Pattern, uint } + %struct.ruleAST = type { sbyte*, %PatternAST, int, %IntList, %Rule, %StrTableElement, %StrTableElement } + %struct.stateMap = type { sbyte*, %Plank, int, short* } + %struct.strTableElement = type { sbyte*, %IntList, sbyte* } + %struct.symbol = type { sbyte*, int, { %Operator } } + %struct.table = type { %Operator, %List, short*, [2 x %Dimension], %Item_Set* } +%yylval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yylhs = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yylen = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yydefred = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yydgoto = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yysindex = external global [43 x short] ; <[43 x short]*> [#uses=2] +%yyrindex = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yygindex = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yytable = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yycheck = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yynerrs = external global int ; [#uses=3] +%yyerrflag = external global int ; [#uses=6] +%yychar = external global int ; [#uses=15] +%yyssp = external global short* ; [#uses=15] +%yyvsp = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=30] +%yyval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yyss = external global short* ; [#uses=3] +%yysslim = external global short* ; [#uses=3] +%yyvs = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=1] +%.LC01 = external global [13 x sbyte] ; <[13 x sbyte]*> [#uses=1] +%.LC1 = external global [20 x sbyte] ; <[20 x sbyte]*> [#uses=1] + +implementation ; Functions: + +int %yyparse() { +bb0: ; No predecessors! + store int 0, int* %yynerrs + store int 0, int* %yyerrflag + store int -1, int* %yychar + %reg113 = load short** %yyss ; [#uses=1] + %cond581 = setne short* %reg113, null ; [#uses=1] + br bool %cond581, label %bb3, label %bb2 + +bb2: ; preds = %bb0 + %reg584 = call int %yygrowstack( ) ; [#uses=1] + %cond584 = setne int %reg584, 0 ; [#uses=1] + br bool %cond584, label %bb113, label %bb3 + +bb3: ; preds = %bb2, %bb0 + %reg115 = load short** %yyss ; [#uses=1] + store short* %reg115, short** %yyssp + %reg116 = load %YYSTYPE** %yyvs ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg116, %YYSTYPE** %yyvsp + %reg117 = load short** %yyssp ; [#uses=1] + store short 0, short* %reg117 + br label %bb4 + +bb4: ; preds = %bb14, %bb15, %bb31, %bb35, %bb102, %bb112, %bb3 + %reg458 = phi uint [ %reg476, %bb112 ], [ 1, %bb102 ], [ %reg458, %bb35 ], [ %cast768, %bb31 ], [ %cast658, %bb15 ], [ %cast658, %bb14 ], [ 0, %bb3 ] ; [#uses=2] + %reg458-idxcast = cast uint %reg458 to long ; [#uses=3] + %reg594 = getelementptr [43 x short]* %yydefred, long 0, long %reg458-idxcast ; [#uses=1] + %reg125 = load short* %reg594 ; [#uses=1] + %cast599 = cast short %reg125 to int ; [#uses=2] + %cond600 = setne int %cast599, 0 ; [#uses=1] + br bool %cond600, label %bb36, label %bb5 + +bb5: ; preds = %bb4 + %reg127 = load int* %yychar ; [#uses=1] + %cond603 = setge int %reg127, 0 ; [#uses=1] + br bool %cond603, label %bb8, label %bb6 + +bb6: ; preds = %bb5 + %reg607 = call int %yylex( ) ; [#uses=1] + store int %reg607, int* %yychar + %reg129 = load int* %yychar ; [#uses=1] + %cond609 = setge int %reg129, 0 ; [#uses=1] + br bool %cond609, label %bb8, label %bb7 + +bb7: ; preds = %bb6 + store int 0, int* %yychar + br label %bb8 + +bb8: ; preds = %bb7, %bb6, %bb5 + %reg615 = getelementptr [43 x short]* %yysindex, long 0, long %reg458-idxcast ; [#uses=1] + %reg137 = load short* %reg615 ; [#uses=1] + %cast620 = cast short %reg137 to int ; [#uses=2] + %cond621 = seteq int %cast620, 0 ; [#uses=1] + br bool %cond621, label %bb16, label %bb9 + +bb9: ; preds = %bb8 + %reg139 = load int* %yychar ; [#uses=2] + %reg460 = add int %cast620, %reg139 ; [#uses=3] + %cond624 = setlt int %reg460, 0 ; [#uses=1] + br bool %cond624, label %bb16, label %bb10 + +bb10: ; preds = %bb9 + %cond627 = setgt int %reg460, 262 ; [#uses=1] + br bool %cond627, label %bb16, label %bb11 + +bb11: ; preds = %bb10 + %reg460-idxcast = cast int %reg460 to long ; [#uses=2] + %reg632 = getelementptr [263 x short]* %yycheck, long 0, long %reg460-idxcast ; [#uses=1] + %reg148 = load short* %reg632 ; [#uses=1] + %cast637 = cast short %reg148 to int ; [#uses=1] + %cond639 = setne int %cast637, %reg139 ; [#uses=1] + br bool %cond639, label %bb16, label %bb12 + +bb12: ; preds = %bb11 + %reg150 = load short** %yyssp ; [#uses=1] + %cast640 = cast short* %reg150 to sbyte* ; [#uses=1] + %reg151 = load short** %yysslim ; [#uses=1] + %cast641 = cast short* %reg151 to sbyte* ; [#uses=1] + %cond642 = setlt sbyte* %cast640, %cast641 ; [#uses=1] + br bool %cond642, label %bb14, label %bb13 + +bb13: ; preds = %bb12 + %reg644 = call int %yygrowstack( ) ; [#uses=1] + %cond644 = setne int %reg644, 0 ; [#uses=1] + br bool %cond644, label %bb113, label %bb14 + +bb14: ; preds = %bb13, %bb12 + %reg153 = load short** %yyssp ; [#uses=1] + %reg647 = getelementptr short* %reg153, long 1 ; [#uses=2] + store short* %reg647, short** %yyssp + %reg653 = getelementptr [263 x short]* %yytable, long 0, long %reg460-idxcast ; [#uses=1] + %reg162 = load short* %reg653 ; [#uses=2] + %cast658 = cast short %reg162 to uint ; [#uses=2] + store short %reg162, short* %reg647 + %reg164 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg661 = getelementptr %YYSTYPE* %reg164, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg661, %YYSTYPE** %yyvsp + %reg167 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg661.idx1 = getelementptr %YYSTYPE* %reg164, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg167, %IntList* %reg661.idx1 + store int -1, int* %yychar + %reg169 = load int* %yyerrflag ; [#uses=2] + %cond669 = setle int %reg169, 0 ; [#uses=1] + br bool %cond669, label %bb4, label %bb15 + +bb15: ; preds = %bb14 + %reg171 = add int %reg169, -1 ; [#uses=1] + store int %reg171, int* %yyerrflag + br label %bb4 + +bb16: ; preds = %bb11, %bb10, %bb9, %bb8 + %reg677 = getelementptr [43 x short]* %yyrindex, long 0, long %reg458-idxcast ; [#uses=1] + %reg178 = load short* %reg677 ; [#uses=1] + %cast682 = cast short %reg178 to int ; [#uses=2] + %cond683 = seteq int %cast682, 0 ; [#uses=1] + br bool %cond683, label %bb21, label %bb17 + +bb17: ; preds = %bb16 + %reg180 = load int* %yychar ; [#uses=2] + %reg463 = add int %cast682, %reg180 ; [#uses=3] + %cond686 = setlt int %reg463, 0 ; [#uses=1] + br bool %cond686, label %bb21, label %bb18 + +bb18: ; preds = %bb17 + %cond689 = setgt int %reg463, 262 ; [#uses=1] + br bool %cond689, label %bb21, label %bb19 + +bb19: ; preds = %bb18 + %reg463-idxcast = cast int %reg463 to long ; [#uses=2] + %reg694 = getelementptr [263 x short]* %yycheck, long 0, long %reg463-idxcast ; [#uses=1] + %reg189 = load short* %reg694 ; [#uses=1] + %cast699 = cast short %reg189 to int ; [#uses=1] + %cond701 = setne int %cast699, %reg180 ; [#uses=1] + br bool %cond701, label %bb21, label %bb20 + +bb20: ; preds = %bb19 + %reg704 = getelementptr [263 x short]* %yytable, long 0, long %reg463-idxcast ; [#uses=1] + %reg197 = load short* %reg704 ; [#uses=1] + %cast709 = cast short %reg197 to int ; [#uses=1] + br label %bb36 + +bb21: ; preds = %bb19, %bb18, %bb17, %bb16 + %reg198 = load int* %yyerrflag ; [#uses=1] + %cond711 = setne int %reg198, 0 ; [#uses=1] + br bool %cond711, label %bb23, label %bb22 + +bb22: ; preds = %bb21 + call void %yyerror( sbyte* getelementptr ([13 x sbyte]* %.LC01, long 0, long 0) ) + %reg200 = load int* %yynerrs ; [#uses=1] + %reg201 = add int %reg200, 1 ; [#uses=1] + store int %reg201, int* %yynerrs + br label %bb23 + +bb23: ; preds = %bb22, %bb21 + %reg202 = load int* %yyerrflag ; [#uses=1] + %cond719 = setgt int %reg202, 2 ; [#uses=1] + br bool %cond719, label %bb34, label %bb24 + +bb24: ; preds = %bb23 + store int 3, int* %yyerrflag + %reg241 = load short** %yyss ; [#uses=1] + %cast778 = cast short* %reg241 to sbyte* ; [#uses=1] + br label %bb25 + +bb25: ; preds = %bb33, %bb24 + %reg204 = load short** %yyssp ; [#uses=4] + %reg206 = load short* %reg204 ; [#uses=1] + %reg206-idxcast = cast short %reg206 to long ; [#uses=1] + %reg727 = getelementptr [43 x short]* %yysindex, long 0, long %reg206-idxcast ; [#uses=1] + %reg212 = load short* %reg727 ; [#uses=2] + %cast732 = cast short %reg212 to int ; [#uses=2] + %cond733 = seteq int %cast732, 0 ; [#uses=1] + br bool %cond733, label %bb32, label %bb26 + +bb26: ; preds = %bb25 + %reg466 = add int %cast732, 256 ; [#uses=2] + %cond736 = setlt int %reg466, 0 ; [#uses=1] + br bool %cond736, label %bb32, label %bb27 + +bb27: ; preds = %bb26 + %cond739 = setgt int %reg466, 262 ; [#uses=1] + br bool %cond739, label %bb32, label %bb28 + +bb28: ; preds = %bb27 + %reg212-idxcast = cast short %reg212 to long ; [#uses=1] + %reg212-idxcast-offset = add long %reg212-idxcast, 256 ; [#uses=2] + %reg744 = getelementptr [263 x short]* %yycheck, long 0, long %reg212-idxcast-offset ; [#uses=1] + %reg221 = load short* %reg744 ; [#uses=1] + %cond748 = setne short %reg221, 256 ; [#uses=1] + br bool %cond748, label %bb32, label %bb29 + +bb29: ; preds = %bb28 + %cast750 = cast short* %reg204 to sbyte* ; [#uses=1] + %reg223 = load short** %yysslim ; [#uses=1] + %cast751 = cast short* %reg223 to sbyte* ; [#uses=1] + %cond752 = setlt sbyte* %cast750, %cast751 ; [#uses=1] + br bool %cond752, label %bb31, label %bb30 + +bb30: ; preds = %bb29 + %reg754 = call int %yygrowstack( ) ; [#uses=1] + %cond754 = setne int %reg754, 0 ; [#uses=1] + br bool %cond754, label %bb113, label %bb31 + +bb31: ; preds = %bb30, %bb29 + %reg225 = load short** %yyssp ; [#uses=1] + %reg757 = getelementptr short* %reg225, long 1 ; [#uses=2] + store short* %reg757, short** %yyssp + %reg763 = getelementptr [263 x short]* %yytable, long 0, long %reg212-idxcast-offset ; [#uses=1] + %reg234 = load short* %reg763 ; [#uses=2] + %cast768 = cast short %reg234 to uint ; [#uses=1] + store short %reg234, short* %reg757 + %reg236 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg771 = getelementptr %YYSTYPE* %reg236, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg771, %YYSTYPE** %yyvsp + %reg239 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg771.idx1 = getelementptr %YYSTYPE* %reg236, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg239, %IntList* %reg771.idx1 + br label %bb4 + +bb32: ; preds = %bb28, %bb27, %bb26, %bb25 + %cast777 = cast short* %reg204 to sbyte* ; [#uses=1] + %cond779 = setle sbyte* %cast777, %cast778 ; [#uses=1] + br bool %cond779, label %UnifiedExitNode, label %bb33 + +bb33: ; preds = %bb32 + %reg781 = getelementptr short* %reg204, long -1 ; [#uses=1] + store short* %reg781, short** %yyssp + %reg244 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg786 = getelementptr %YYSTYPE* %reg244, long -1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg786, %YYSTYPE** %yyvsp + br label %bb25 + +bb34: ; preds = %bb23 + %reg246 = load int* %yychar ; [#uses=1] + %cond791 = seteq int %reg246, 0 ; [#uses=1] + br bool %cond791, label %UnifiedExitNode, label %bb35 + +bb35: ; preds = %bb34 + store int -1, int* %yychar + br label %bb4 + +bb36: ; preds = %bb20, %bb4 + %reg468 = phi int [ %cast709, %bb20 ], [ %cast599, %bb4 ] ; [#uses=31] + %reg468-idxcast = cast int %reg468 to long ; [#uses=2] + %reg796 = getelementptr [25 x short]* %yylen, long 0, long %reg468-idxcast ; [#uses=1] + %reg254 = load short* %reg796 ; [#uses=2] + %reg259 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg254-idxcast = cast short %reg254 to long ; [#uses=1] + %reg254-idxcast-scale = mul long %reg254-idxcast, -1 ; [#uses=1] + %reg254-idxcast-scale-offset = add long %reg254-idxcast-scale, 1 ; [#uses=1] + %reg261.idx1 = getelementptr %YYSTYPE* %reg259, long %reg254-idxcast-scale-offset, ubyte 0 ; <%IntList*> [#uses=1] + %reg261 = load %IntList* %reg261.idx1 ; <%IntList> [#uses=1] + store %IntList %reg261, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %cond812 = seteq int %reg468, 13 ; [#uses=1] + br bool %cond812, label %bb85, label %bb37 + +bb37: ; preds = %bb36 + %cond814 = setgt int %reg468, 13 ; [#uses=1] + br bool %cond814, label %bb56, label %bb38 + +bb38: ; preds = %bb37 + %cond817 = seteq int %reg468, 7 ; [#uses=1] + br bool %cond817, label %bb79, label %bb39 + +bb39: ; preds = %bb38 + %cond819 = setgt int %reg468, 7 ; [#uses=1] + br bool %cond819, label %bb48, label %bb40 + +bb40: ; preds = %bb39 + %cond822 = seteq int %reg468, 4 ; [#uses=1] + br bool %cond822, label %bb76, label %bb41 + +bb41: ; preds = %bb40 + %cond824 = setgt int %reg468, 4 ; [#uses=1] + br bool %cond824, label %bb45, label %bb42 + +bb42: ; preds = %bb41 + %cond827 = seteq int %reg468, 2 ; [#uses=1] + br bool %cond827, label %bb74, label %bb43 + +bb43: ; preds = %bb42 + %cond829 = seteq int %reg468, 3 ; [#uses=1] + br bool %cond829, label %bb75, label %bb97 + +bb45: ; preds = %bb41 + %cond831 = seteq int %reg468, 5 ; [#uses=1] + br bool %cond831, label %bb77, label %bb46 + +bb46: ; preds = %bb45 + %cond833 = seteq int %reg468, 6 ; [#uses=1] + br bool %cond833, label %bb78, label %bb97 + +bb48: ; preds = %bb39 + %cond835 = seteq int %reg468, 10 ; [#uses=1] + br bool %cond835, label %bb82, label %bb49 + +bb49: ; preds = %bb48 + %cond837 = setgt int %reg468, 10 ; [#uses=1] + br bool %cond837, label %bb53, label %bb50 + +bb50: ; preds = %bb49 + %cond840 = seteq int %reg468, 8 ; [#uses=1] + br bool %cond840, label %bb80, label %bb51 + +bb51: ; preds = %bb50 + %cond842 = seteq int %reg468, 9 ; [#uses=1] + br bool %cond842, label %bb81, label %bb97 + +bb53: ; preds = %bb49 + %cond844 = seteq int %reg468, 11 ; [#uses=1] + br bool %cond844, label %bb83, label %bb54 + +bb54: ; preds = %bb53 + %cond846 = seteq int %reg468, 12 ; [#uses=1] + br bool %cond846, label %bb84, label %bb97 + +bb56: ; preds = %bb37 + %cond848 = seteq int %reg468, 19 ; [#uses=1] + br bool %cond848, label %bb91, label %bb57 + +bb57: ; preds = %bb56 + %cond850 = setgt int %reg468, 19 ; [#uses=1] + br bool %cond850, label %bb66, label %bb58 + +bb58: ; preds = %bb57 + %cond853 = seteq int %reg468, 16 ; [#uses=1] + br bool %cond853, label %bb88, label %bb59 + +bb59: ; preds = %bb58 + %cond855 = setgt int %reg468, 16 ; [#uses=1] + br bool %cond855, label %bb63, label %bb60 + +bb60: ; preds = %bb59 + %cond858 = seteq int %reg468, 14 ; [#uses=1] + br bool %cond858, label %bb86, label %bb61 + +bb61: ; preds = %bb60 + %cond860 = seteq int %reg468, 15 ; [#uses=1] + br bool %cond860, label %bb87, label %bb97 + +bb63: ; preds = %bb59 + %cond862 = seteq int %reg468, 17 ; [#uses=1] + br bool %cond862, label %bb89, label %bb64 + +bb64: ; preds = %bb63 + %cond864 = seteq int %reg468, 18 ; [#uses=1] + br bool %cond864, label %bb90, label %bb97 + +bb66: ; preds = %bb57 + %cond866 = seteq int %reg468, 22 ; [#uses=1] + br bool %cond866, label %bb94, label %bb67 + +bb67: ; preds = %bb66 + %cond868 = setgt int %reg468, 22 ; [#uses=1] + br bool %cond868, label %bb71, label %bb68 + +bb68: ; preds = %bb67 + %cond871 = seteq int %reg468, 20 ; [#uses=1] + br bool %cond871, label %bb92, label %bb69 + +bb69: ; preds = %bb68 + %cond873 = seteq int %reg468, 21 ; [#uses=1] + br bool %cond873, label %bb93, label %bb97 + +bb71: ; preds = %bb67 + %cond875 = seteq int %reg468, 23 ; [#uses=1] + br bool %cond875, label %bb95, label %bb72 + +bb72: ; preds = %bb71 + %cond877 = seteq int %reg468, 24 ; [#uses=1] + br bool %cond877, label %bb96, label %bb97 + +bb74: ; preds = %bb42 + call void %yyfinished( ) + br label %bb97 + +bb75: ; preds = %bb43 + %reg262 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg264.idx1 = getelementptr %YYSTYPE* %reg262, long -2, ubyte 0 ; <%IntList*> [#uses=1] + %reg264 = load %IntList* %reg264.idx1 ; <%IntList> [#uses=1] + %reg265.idx = getelementptr %YYSTYPE* %reg262, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg265 = load %IntList* %reg265.idx ; <%IntList> [#uses=1] + %cast889 = cast %IntList %reg265 to %List ; <%List> [#uses=1] + %cast890 = cast %IntList %reg264 to %List ; <%List> [#uses=1] + call void %doSpec( %List %cast890, %List %cast889 ) + br label %bb97 + +bb76: ; preds = %bb40 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb77: ; preds = %bb45 + %reg269 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast894 = getelementptr %YYSTYPE* %reg269, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg271 = load %IntList* %cast894 ; <%IntList> [#uses=1] + %reg271 = cast %IntList %reg271 to sbyte* ; [#uses=1] + %reg272.idx1 = getelementptr %YYSTYPE* %reg269, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg272 = load %IntList* %reg272.idx1 ; <%IntList> [#uses=1] + %cast901 = cast %IntList %reg272 to %List ; <%List> [#uses=1] + %reg901 = call %List %newList( sbyte* %reg271, %List %cast901 ) ; <%List> [#uses=1] + cast %List %reg901 to %IntList ; <%IntList>:0 [#uses=1] + store %IntList %0, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb78: ; preds = %bb46 + %reg275 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg277.idx = getelementptr %YYSTYPE* %reg275, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg277 = load %IntList* %reg277.idx ; <%IntList> [#uses=1] + %cast907 = cast %IntList %reg277 to %List ; <%List> [#uses=1] + %reg907 = call %Arity %newArity( int -1, %List %cast907 ) ; <%Arity> [#uses=1] + cast %Arity %reg907 to %IntList ; <%IntList>:1 [#uses=1] + store %IntList %1, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb79: ; preds = %bb38 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %reg281 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast912 = getelementptr %YYSTYPE* %reg281, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg282 = load %IntList* %cast912 ; <%IntList> [#uses=1] + %reg282 = cast %IntList %reg282 to %List ; <%List> [#uses=1] + call void %doGram( %List %reg282 ) + br label %bb97 + +bb80: ; preds = %bb50 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %reg285 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast917 = getelementptr %YYSTYPE* %reg285, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg286 = load %IntList* %cast917 ; <%IntList> [#uses=1] + %reg286 = cast %IntList %reg286 to sbyte* ; [#uses=1] + call void %doStart( sbyte* %reg286 ) + br label %bb97 + +bb81: ; preds = %bb51 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb82: ; preds = %bb48 + %reg290 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast923 = getelementptr %YYSTYPE* %reg290, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg292 = load %IntList* %cast923 ; <%IntList> [#uses=1] + %reg292 = cast %IntList %reg292 to sbyte* ; [#uses=1] + %reg293.idx1 = getelementptr %YYSTYPE* %reg290, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg293 = load %IntList* %reg293.idx1 ; <%IntList> [#uses=1] + %cast930 = cast %IntList %reg293 to %List ; <%List> [#uses=1] + %reg930 = call %List %newList( sbyte* %reg292, %List %cast930 ) ; <%List> [#uses=1] + cast %List %reg930 to %IntList ; <%IntList>:2 [#uses=1] + store %IntList %2, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb83: ; preds = %bb53 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb84: ; preds = %bb54 + %reg298 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast936 = getelementptr %YYSTYPE* %reg298, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg300 = load %IntList* %cast936 ; <%IntList> [#uses=1] + %reg300 = cast %IntList %reg300 to sbyte* ; [#uses=1] + %reg301.idx1 = getelementptr %YYSTYPE* %reg298, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg301 = load %IntList* %reg301.idx1 ; <%IntList> [#uses=1] + %cast943 = cast %IntList %reg301 to %List ; <%List> [#uses=1] + %reg943 = call %List %newList( sbyte* %reg300, %List %cast943 ) ; <%List> [#uses=1] + cast %List %reg943 to %IntList ; <%IntList>:3 [#uses=1] + store %IntList %3, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb85: ; preds = %bb36 + %reg304 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast9521 = getelementptr %YYSTYPE* %reg304, long -2, ubyte 0 ; <%IntList*> [#uses=1] + %reg306 = load %IntList* %cast9521 ; <%IntList> [#uses=1] + %reg306 = cast %IntList %reg306 to sbyte* ; [#uses=1] + %cast953 = cast %YYSTYPE* %reg304 to int* ; [#uses=1] + %reg307 = load int* %cast953 ; [#uses=1] + %reg955 = call %Binding %newBinding( sbyte* %reg306, int %reg307 ) ; <%Binding> [#uses=1] + cast %Binding %reg955 to %IntList ; <%IntList>:4 [#uses=1] + store %IntList %4, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb86: ; preds = %bb60 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb87: ; preds = %bb61 + %reg312 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast961 = getelementptr %YYSTYPE* %reg312, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg314 = load %IntList* %cast961 ; <%IntList> [#uses=1] + %reg314 = cast %IntList %reg314 to sbyte* ; [#uses=1] + %reg315.idx1 = getelementptr %YYSTYPE* %reg312, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg315 = load %IntList* %reg315.idx1 ; <%IntList> [#uses=1] + %cast968 = cast %IntList %reg315 to %List ; <%List> [#uses=1] + %reg968 = call %List %newList( sbyte* %reg314, %List %cast968 ) ; <%List> [#uses=1] + cast %List %reg968 to %IntList ; <%IntList>:5 [#uses=1] + store %IntList %5, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb88: ; preds = %bb58 + %reg318 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=4] + %cast9791 = getelementptr %YYSTYPE* %reg318, long -6, ubyte 0 ; <%IntList*> [#uses=1] + %reg322 = load %IntList* %cast9791 ; <%IntList> [#uses=1] + %reg322 = cast %IntList %reg322 to sbyte* ; [#uses=1] + %reg323.idx1 = getelementptr %YYSTYPE* %reg318, long -4, ubyte 0 ; <%IntList*> [#uses=1] + %reg323 = load %IntList* %reg323.idx1 ; <%IntList> [#uses=1] + %reg987 = getelementptr %YYSTYPE* %reg318, long -2 ; <%YYSTYPE*> [#uses=1] + %cast989 = cast %YYSTYPE* %reg987 to int* ; [#uses=1] + %reg324 = load int* %cast989 ; [#uses=1] + %reg325.idx1 = getelementptr %YYSTYPE* %reg318, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg325 = load %IntList* %reg325.idx1 ; <%IntList> [#uses=1] + %cast998 = cast %IntList %reg323 to %PatternAST ; <%PatternAST> [#uses=1] + %reg996 = call %RuleAST %newRuleAST( sbyte* %reg322, %PatternAST %cast998, int %reg324, %IntList %reg325 ) ; <%RuleAST> [#uses=1] + cast %RuleAST %reg996 to %IntList ; <%IntList>:6 [#uses=1] + store %IntList %6, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb89: ; preds = %bb63 + %reg328 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast1002 = getelementptr %YYSTYPE* %reg328, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg329 = load %IntList* %cast1002 ; <%IntList> [#uses=1] + %reg329 = cast %IntList %reg329 to sbyte* ; [#uses=1] + %reg1004 = call %PatternAST %newPatternAST( sbyte* %reg329, %List null ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1004 to %IntList ; <%IntList>:7 [#uses=1] + store %IntList %7, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb90: ; preds = %bb64 + %reg333 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast10131 = getelementptr %YYSTYPE* %reg333, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg335 = load %IntList* %cast10131 ; <%IntList> [#uses=1] + %reg335 = cast %IntList %reg335 to sbyte* ; [#uses=1] + %reg1015 = call %List %newList( sbyte* %reg335, %List null ) ; <%List> [#uses=1] + %cast10211 = getelementptr %YYSTYPE* %reg333, long -3, ubyte 0 ; <%IntList*> [#uses=1] + %reg338 = load %IntList* %cast10211 ; <%IntList> [#uses=1] + %reg338 = cast %IntList %reg338 to sbyte* ; [#uses=1] + %reg1023 = call %PatternAST %newPatternAST( sbyte* %reg338, %List %reg1015 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1023 to %IntList ; <%IntList>:8 [#uses=1] + store %IntList %8, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb91: ; preds = %bb56 + %reg341 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=3] + %cast10331 = getelementptr %YYSTYPE* %reg341, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg344 = load %IntList* %cast10331 ; <%IntList> [#uses=1] + %reg344 = cast %IntList %reg344 to sbyte* ; [#uses=1] + %reg1035 = call %List %newList( sbyte* %reg344, %List null ) ; <%List> [#uses=1] + %cast10411 = getelementptr %YYSTYPE* %reg341, long -3, ubyte 0 ; <%IntList*> [#uses=1] + %reg347 = load %IntList* %cast10411 ; <%IntList> [#uses=1] + %reg347 = cast %IntList %reg347 to sbyte* ; [#uses=1] + %reg1043 = call %List %newList( sbyte* %reg347, %List %reg1035 ) ; <%List> [#uses=1] + %cast10491 = getelementptr %YYSTYPE* %reg341, long -5, ubyte 0 ; <%IntList*> [#uses=1] + %reg349 = load %IntList* %cast10491 ; <%IntList> [#uses=1] + %reg349 = cast %IntList %reg349 to sbyte* ; [#uses=1] + %reg1051 = call %PatternAST %newPatternAST( sbyte* %reg349, %List %reg1043 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1051 to %IntList ; <%IntList>:9 [#uses=1] + store %IntList %9, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb92: ; preds = %bb68 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb93: ; preds = %bb69 + %reg354 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1059 = getelementptr %YYSTYPE* %reg354, long -2 ; <%YYSTYPE*> [#uses=1] + %cast1061 = cast %YYSTYPE* %reg1059 to int* ; [#uses=1] + %reg356 = load int* %cast1061 ; [#uses=1] + %reg357.idx1 = getelementptr %YYSTYPE* %reg354, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg357 = load %IntList* %reg357.idx1 ; <%IntList> [#uses=1] + %reg1068 = call %IntList %newIntList( int %reg356, %IntList %reg357 ) ; <%IntList> [#uses=1] + store %IntList %reg1068, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb94: ; preds = %bb66 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb95: ; preds = %bb71 + %reg362 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1076 = getelementptr %YYSTYPE* %reg362, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1078 = cast %YYSTYPE* %reg1076 to int* ; [#uses=1] + %reg364 = load int* %cast1078 ; [#uses=1] + %reg365.idx = getelementptr %YYSTYPE* %reg362, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg365 = load %IntList* %reg365.idx ; <%IntList> [#uses=1] + %reg1081 = call %IntList %newIntList( int %reg364, %IntList %reg365 ) ; <%IntList> [#uses=1] + store %IntList %reg1081, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb96: ; preds = %bb72 + %reg368 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1088 = getelementptr %YYSTYPE* %reg368, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1090 = cast %YYSTYPE* %reg1088 to int* ; [#uses=1] + %reg370 = load int* %cast1090 ; [#uses=1] + %reg371.idx = getelementptr %YYSTYPE* %reg368, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg371 = load %IntList* %reg371.idx ; <%IntList> [#uses=1] + %reg1093 = call %IntList %newIntList( int %reg370, %IntList %reg371 ) ; <%IntList> [#uses=1] + store %IntList %reg1093, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb97: ; preds = %bb96, %bb95, %bb94, %bb93, %bb92, %bb91, %bb90, %bb89, %bb88, %bb87, %bb86, %bb85, %bb84, %bb83, %bb82, %bb81, %bb80, %bb79, %bb78, %bb77, %bb76, %bb75, %bb74, %bb72, %bb69, %bb64, %bb61, %bb54, %bb51, %bb46, %bb43 + %cast1097 = cast short %reg254 to ulong ; [#uses=3] + %reg375 = add ulong %cast1097, %cast1097 ; [#uses=1] + %reg377 = load short** %yyssp ; [#uses=1] + %cast379 = cast short* %reg377 to ulong ; [#uses=1] + %reg381 = sub ulong %cast379, %reg375 ; [#uses=1] + %cast1099 = cast ulong %reg381 to short* ; [#uses=1] + store short* %cast1099, short** %yyssp + %reg382 = load short** %yyssp ; [#uses=3] + %reg383 = load short* %reg382 ; [#uses=1] + %cast1103 = cast short %reg383 to int ; [#uses=3] + %reg385 = mul ulong %cast1097, 8 ; [#uses=1] + %reg387 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast389 = cast %YYSTYPE* %reg387 to ulong ; [#uses=1] + %reg391 = sub ulong %cast389, %reg385 ; [#uses=1] + %cast1108 = cast ulong %reg391 to %YYSTYPE* ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %cast1108, %YYSTYPE** %yyvsp + %reg1111 = getelementptr [25 x short]* %yylhs, long 0, long %reg468-idxcast ; [#uses=1] + %reg398 = load short* %reg1111 ; [#uses=2] + %cast1116 = cast short %reg398 to int ; [#uses=1] + %cond1117 = setne int %cast1103, 0 ; [#uses=1] + br bool %cond1117, label %bb104, label %bb98 + +bb98: ; preds = %bb97 + %cond1119 = setne int %cast1116, 0 ; [#uses=1] + br bool %cond1119, label %bb104, label %bb99 + +bb99: ; preds = %bb98 + %reg1122 = getelementptr short* %reg382, long 1 ; [#uses=2] + store short* %reg1122, short** %yyssp + store short 1, short* %reg1122 + %reg403 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1128 = getelementptr %YYSTYPE* %reg403, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1128, %YYSTYPE** %yyvsp + %reg406 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg1128.idx1 = getelementptr %YYSTYPE* %reg403, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg406, %IntList* %reg1128.idx1 + %reg407 = load int* %yychar ; [#uses=1] + %cond1135 = setge int %reg407, 0 ; [#uses=1] + br bool %cond1135, label %bb102, label %bb100 + +bb100: ; preds = %bb99 + %reg1139 = call int %yylex( ) ; [#uses=1] + store int %reg1139, int* %yychar + %reg409 = load int* %yychar ; [#uses=1] + %cond1141 = setge int %reg409, 0 ; [#uses=1] + br bool %cond1141, label %bb102, label %bb101 + +bb101: ; preds = %bb100 + store int 0, int* %yychar + br label %bb102 + +bb102: ; preds = %bb101, %bb100, %bb99 + %reg411 = load int* %yychar ; [#uses=1] + %cond1146 = setne int %reg411, 0 ; [#uses=1] + br bool %cond1146, label %bb4, label %UnifiedExitNode + +bb104: ; preds = %bb98, %bb97 + %reg398-idxcast = cast short %reg398 to long ; [#uses=2] + %reg1150 = getelementptr [12 x short]* %yygindex, long 0, long %reg398-idxcast ; [#uses=1] + %reg418 = load short* %reg1150 ; [#uses=1] + %cast1155 = cast short %reg418 to int ; [#uses=2] + %cond1156 = seteq int %cast1155, 0 ; [#uses=1] + br bool %cond1156, label %bb109, label %bb105 + +bb105: ; preds = %bb104 + %reg473 = add int %cast1155, %cast1103 ; [#uses=3] + %cond1158 = setlt int %reg473, 0 ; [#uses=1] + br bool %cond1158, label %bb109, label %bb106 + +bb106: ; preds = %bb105 + %cond1161 = setgt int %reg473, 262 ; [#uses=1] + br bool %cond1161, label %bb109, label %bb107 + +bb107: ; preds = %bb106 + %reg473-idxcast = cast int %reg473 to long ; [#uses=2] + %reg1166 = getelementptr [263 x short]* %yycheck, long 0, long %reg473-idxcast ; [#uses=1] + %reg428 = load short* %reg1166 ; [#uses=1] + %cast1171 = cast short %reg428 to int ; [#uses=1] + %cond1172 = setne int %cast1171, %cast1103 ; [#uses=1] + br bool %cond1172, label %bb109, label %bb108 + +bb108: ; preds = %bb107 + %reg1175 = getelementptr [263 x short]* %yytable, long 0, long %reg473-idxcast ; [#uses=1] + %reg435 = load short* %reg1175 ; [#uses=1] + %cast1180 = cast short %reg435 to uint ; [#uses=1] + br label %bb110 + +bb109: ; preds = %bb107, %bb106, %bb105, %bb104 + %reg1183 = getelementptr [12 x short]* %yydgoto, long 0, long %reg398-idxcast ; [#uses=1] + %reg442 = load short* %reg1183 ; [#uses=1] + %cast1188 = cast short %reg442 to uint ; [#uses=1] + br label %bb110 + +bb110: ; preds = %bb109, %bb108 + %reg476 = phi uint [ %cast1188, %bb109 ], [ %cast1180, %bb108 ] ; [#uses=2] + %cast1189 = cast short* %reg382 to sbyte* ; [#uses=1] + %reg444 = load short** %yysslim ; [#uses=1] + %cast1190 = cast short* %reg444 to sbyte* ; [#uses=1] + %cond1191 = setlt sbyte* %cast1189, %cast1190 ; [#uses=1] + br bool %cond1191, label %bb112, label %bb111 + +bb111: ; preds = %bb110 + %reg1193 = call int %yygrowstack( ) ; [#uses=1] + %cond1193 = setne int %reg1193, 0 ; [#uses=1] + br bool %cond1193, label %bb113, label %bb112 + +bb112: ; preds = %bb111, %bb110 + %reg446 = load short** %yyssp ; [#uses=1] + %reg1196 = getelementptr short* %reg446, long 1 ; [#uses=2] + store short* %reg1196, short** %yyssp + %cast1357 = cast uint %reg476 to short ; [#uses=1] + store short %cast1357, short* %reg1196 + %reg449 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1202 = getelementptr %YYSTYPE* %reg449, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1202, %YYSTYPE** %yyvsp + %reg452 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg1202.idx1 = getelementptr %YYSTYPE* %reg449, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg452, %IntList* %reg1202.idx1 + br label %bb4 + +bb113: ; preds = %bb111, %bb30, %bb13, %bb2 + call void %yyerror( sbyte* getelementptr ([20 x sbyte]* %.LC1, long 0, long 0) ) + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %bb113, %bb102, %bb34, %bb32 + %UnifiedRetVal = phi int [ 1, %bb113 ], [ 1, %bb34 ], [ 1, %bb32 ], [ 0, %bb102 ] ; [#uses=1] + ret int %UnifiedRetVal +} + +declare %List %newList(sbyte*, %List) + +declare %IntList %newIntList(int, %IntList) + +declare void %doStart(sbyte*) + +declare void %yyerror(sbyte*) + +declare void %doSpec(%List, %List) + +declare %Arity %newArity(int, %List) + +declare %Binding %newBinding(sbyte*, int) + +declare %PatternAST %newPatternAST(sbyte*, %List) + +declare %RuleAST %newRuleAST(sbyte*, %PatternAST, int, %IntList) + +declare void %yyfinished() + +declare int %yylex() + +declare void %doGram(%List) + +declare int %yygrowstack() diff --git a/test/LLC/yyparse.Burg.BadRegAlloc.ll b/test/LLC/yyparse.Burg.BadRegAlloc.ll new file mode 100644 index 00000000000..6bbee8440f3 --- /dev/null +++ b/test/LLC/yyparse.Burg.BadRegAlloc.ll @@ -0,0 +1,828 @@ +;; Register allocation is doing a very poor job on this routine from Burg: +;; -- at least two long-lived values are being allocated to %o? registers +;; -- even worse, those registers are being saved and restored repeatedly +;; at function calls, even though there are no intervening uses. +;; -- outgoing args of some function calls have to be swapped, causing +;; another write/read from stack to do the exchange (use -dregalloc=y). +;; + %Arity = type %struct.arity* + %Binding = type %struct.binding* + %DeltaCost = type [4 x short] + %Dimension = type %struct.dimension* + %Index_Map = type { int, %Item_Set* } + %IntList = type %struct.intlist* + %Item = type { %DeltaCost, %Rule } + %ItemArray = type %Item* + %Item_Set = type %struct.item_set* + %List = type %struct.list* + %Mapping = type %struct.mapping* + %NonTerminal = type %struct.nonterminal* + %Operator = type %struct.operator* + %Pattern = type %struct.pattern* + %PatternAST = type %struct.patternAST* + %Plank = type %struct.plank* + %PlankMap = type %struct.plankMap* + %ReadFn = type int ()* + %Rule = type %struct.rule* + %RuleAST = type %struct.ruleAST* + %StateMap = type %struct.stateMap* + %StrTableElement = type %struct.strTableElement* + %Symbol = type %struct.symbol* + %Table = type %struct.table* + %YYSTYPE = type { %IntList } + %struct.arity = type { int, %List } + %struct.binding = type { sbyte*, int } + %struct.dimension = type { short*, %Index_Map, %Mapping, int, %PlankMap } + %struct.index_map = type { int, %Item_Set* } + %struct.intlist = type { int, %IntList } + %struct.item = type { %DeltaCost, %Rule } + %struct.item_set = type { int, int, %Operator, [2 x %Item_Set], %Item_Set, short*, %ItemArray, %ItemArray } + %struct.list = type { sbyte*, %List } + %struct.mapping = type { %List*, int, int, int, %Item_Set* } + %struct.nonterminal = type { sbyte*, int, int, int, %PlankMap, %Rule } + %struct.operator = type { sbyte*, uint, int, int, int, int, %Table } + %struct.pattern = type { %NonTerminal, %Operator, [2 x %NonTerminal] } + %struct.patternAST = type { %Symbol, sbyte*, %List } + %struct.plank = type { sbyte*, %List, int } + %struct.plankMap = type { %List, int, %StateMap } + %struct.rule = type { %DeltaCost, int, int, int, %NonTerminal, %Pattern, uint } + %struct.ruleAST = type { sbyte*, %PatternAST, int, %IntList, %Rule, %StrTableElement, %StrTableElement } + %struct.stateMap = type { sbyte*, %Plank, int, short* } + %struct.strTableElement = type { sbyte*, %IntList, sbyte* } + %struct.symbol = type { sbyte*, int, { %Operator } } + %struct.table = type { %Operator, %List, short*, [2 x %Dimension], %Item_Set* } +%yylval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yylhs = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yylen = external global [25 x short] ; <[25 x short]*> [#uses=1] +%yydefred = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yydgoto = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yysindex = external global [43 x short] ; <[43 x short]*> [#uses=2] +%yyrindex = external global [43 x short] ; <[43 x short]*> [#uses=1] +%yygindex = external global [12 x short] ; <[12 x short]*> [#uses=1] +%yytable = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yycheck = external global [263 x short] ; <[263 x short]*> [#uses=4] +%yynerrs = external global int ; [#uses=3] +%yyerrflag = external global int ; [#uses=6] +%yychar = external global int ; [#uses=15] +%yyssp = external global short* ; [#uses=15] +%yyvsp = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=30] +%yyval = external global %YYSTYPE ; <%YYSTYPE*> [#uses=1] +%yyss = external global short* ; [#uses=3] +%yysslim = external global short* ; [#uses=3] +%yyvs = external global %YYSTYPE* ; <%YYSTYPE**> [#uses=1] +%.LC01 = external global [13 x sbyte] ; <[13 x sbyte]*> [#uses=1] +%.LC1 = external global [20 x sbyte] ; <[20 x sbyte]*> [#uses=1] + +implementation ; Functions: + +int %yyparse() { +bb0: ; No predecessors! + store int 0, int* %yynerrs + store int 0, int* %yyerrflag + store int -1, int* %yychar + %reg113 = load short** %yyss ; [#uses=1] + %cond581 = setne short* %reg113, null ; [#uses=1] + br bool %cond581, label %bb3, label %bb2 + +bb2: ; preds = %bb0 + %reg584 = call int %yygrowstack( ) ; [#uses=1] + %cond584 = setne int %reg584, 0 ; [#uses=1] + br bool %cond584, label %bb113, label %bb3 + +bb3: ; preds = %bb2, %bb0 + %reg115 = load short** %yyss ; [#uses=1] + store short* %reg115, short** %yyssp + %reg116 = load %YYSTYPE** %yyvs ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg116, %YYSTYPE** %yyvsp + %reg117 = load short** %yyssp ; [#uses=1] + store short 0, short* %reg117 + br label %bb4 + +bb4: ; preds = %bb14, %bb15, %bb31, %bb35, %bb102, %bb112, %bb3 + %reg458 = phi uint [ %reg476, %bb112 ], [ 1, %bb102 ], [ %reg458, %bb35 ], [ %cast768, %bb31 ], [ %cast658, %bb15 ], [ %cast658, %bb14 ], [ 0, %bb3 ] ; [#uses=2] + %reg458-idxcast = cast uint %reg458 to long ; [#uses=3] + %reg594 = getelementptr [43 x short]* %yydefred, long 0, long %reg458-idxcast ; [#uses=1] + %reg125 = load short* %reg594 ; [#uses=1] + %cast599 = cast short %reg125 to int ; [#uses=2] + %cond600 = setne int %cast599, 0 ; [#uses=1] + br bool %cond600, label %bb36, label %bb5 + +bb5: ; preds = %bb4 + %reg127 = load int* %yychar ; [#uses=1] + %cond603 = setge int %reg127, 0 ; [#uses=1] + br bool %cond603, label %bb8, label %bb6 + +bb6: ; preds = %bb5 + %reg607 = call int %yylex( ) ; [#uses=1] + store int %reg607, int* %yychar + %reg129 = load int* %yychar ; [#uses=1] + %cond609 = setge int %reg129, 0 ; [#uses=1] + br bool %cond609, label %bb8, label %bb7 + +bb7: ; preds = %bb6 + store int 0, int* %yychar + br label %bb8 + +bb8: ; preds = %bb7, %bb6, %bb5 + %reg615 = getelementptr [43 x short]* %yysindex, long 0, long %reg458-idxcast ; [#uses=1] + %reg137 = load short* %reg615 ; [#uses=1] + %cast620 = cast short %reg137 to int ; [#uses=2] + %cond621 = seteq int %cast620, 0 ; [#uses=1] + br bool %cond621, label %bb16, label %bb9 + +bb9: ; preds = %bb8 + %reg139 = load int* %yychar ; [#uses=2] + %reg460 = add int %cast620, %reg139 ; [#uses=3] + %cond624 = setlt int %reg460, 0 ; [#uses=1] + br bool %cond624, label %bb16, label %bb10 + +bb10: ; preds = %bb9 + %cond627 = setgt int %reg460, 262 ; [#uses=1] + br bool %cond627, label %bb16, label %bb11 + +bb11: ; preds = %bb10 + %reg460-idxcast = cast int %reg460 to long ; [#uses=2] + %reg632 = getelementptr [263 x short]* %yycheck, long 0, long %reg460-idxcast ; [#uses=1] + %reg148 = load short* %reg632 ; [#uses=1] + %cast637 = cast short %reg148 to int ; [#uses=1] + %cond639 = setne int %cast637, %reg139 ; [#uses=1] + br bool %cond639, label %bb16, label %bb12 + +bb12: ; preds = %bb11 + %reg150 = load short** %yyssp ; [#uses=1] + %cast640 = cast short* %reg150 to sbyte* ; [#uses=1] + %reg151 = load short** %yysslim ; [#uses=1] + %cast641 = cast short* %reg151 to sbyte* ; [#uses=1] + %cond642 = setlt sbyte* %cast640, %cast641 ; [#uses=1] + br bool %cond642, label %bb14, label %bb13 + +bb13: ; preds = %bb12 + %reg644 = call int %yygrowstack( ) ; [#uses=1] + %cond644 = setne int %reg644, 0 ; [#uses=1] + br bool %cond644, label %bb113, label %bb14 + +bb14: ; preds = %bb13, %bb12 + %reg153 = load short** %yyssp ; [#uses=1] + %reg647 = getelementptr short* %reg153, long 1 ; [#uses=2] + store short* %reg647, short** %yyssp + %reg653 = getelementptr [263 x short]* %yytable, long 0, long %reg460-idxcast ; [#uses=1] + %reg162 = load short* %reg653 ; [#uses=2] + %cast658 = cast short %reg162 to uint ; [#uses=2] + store short %reg162, short* %reg647 + %reg164 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg661 = getelementptr %YYSTYPE* %reg164, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg661, %YYSTYPE** %yyvsp + %reg167 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg661.idx1 = getelementptr %YYSTYPE* %reg164, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg167, %IntList* %reg661.idx1 + store int -1, int* %yychar + %reg169 = load int* %yyerrflag ; [#uses=2] + %cond669 = setle int %reg169, 0 ; [#uses=1] + br bool %cond669, label %bb4, label %bb15 + +bb15: ; preds = %bb14 + %reg171 = add int %reg169, -1 ; [#uses=1] + store int %reg171, int* %yyerrflag + br label %bb4 + +bb16: ; preds = %bb11, %bb10, %bb9, %bb8 + %reg677 = getelementptr [43 x short]* %yyrindex, long 0, long %reg458-idxcast ; [#uses=1] + %reg178 = load short* %reg677 ; [#uses=1] + %cast682 = cast short %reg178 to int ; [#uses=2] + %cond683 = seteq int %cast682, 0 ; [#uses=1] + br bool %cond683, label %bb21, label %bb17 + +bb17: ; preds = %bb16 + %reg180 = load int* %yychar ; [#uses=2] + %reg463 = add int %cast682, %reg180 ; [#uses=3] + %cond686 = setlt int %reg463, 0 ; [#uses=1] + br bool %cond686, label %bb21, label %bb18 + +bb18: ; preds = %bb17 + %cond689 = setgt int %reg463, 262 ; [#uses=1] + br bool %cond689, label %bb21, label %bb19 + +bb19: ; preds = %bb18 + %reg463-idxcast = cast int %reg463 to long ; [#uses=2] + %reg694 = getelementptr [263 x short]* %yycheck, long 0, long %reg463-idxcast ; [#uses=1] + %reg189 = load short* %reg694 ; [#uses=1] + %cast699 = cast short %reg189 to int ; [#uses=1] + %cond701 = setne int %cast699, %reg180 ; [#uses=1] + br bool %cond701, label %bb21, label %bb20 + +bb20: ; preds = %bb19 + %reg704 = getelementptr [263 x short]* %yytable, long 0, long %reg463-idxcast ; [#uses=1] + %reg197 = load short* %reg704 ; [#uses=1] + %cast709 = cast short %reg197 to int ; [#uses=1] + br label %bb36 + +bb21: ; preds = %bb19, %bb18, %bb17, %bb16 + %reg198 = load int* %yyerrflag ; [#uses=1] + %cond711 = setne int %reg198, 0 ; [#uses=1] + br bool %cond711, label %bb23, label %bb22 + +bb22: ; preds = %bb21 + call void %yyerror( sbyte* getelementptr ([13 x sbyte]* %.LC01, long 0, long 0) ) + %reg200 = load int* %yynerrs ; [#uses=1] + %reg201 = add int %reg200, 1 ; [#uses=1] + store int %reg201, int* %yynerrs + br label %bb23 + +bb23: ; preds = %bb22, %bb21 + %reg202 = load int* %yyerrflag ; [#uses=1] + %cond719 = setgt int %reg202, 2 ; [#uses=1] + br bool %cond719, label %bb34, label %bb24 + +bb24: ; preds = %bb23 + store int 3, int* %yyerrflag + %reg241 = load short** %yyss ; [#uses=1] + %cast778 = cast short* %reg241 to sbyte* ; [#uses=1] + br label %bb25 + +bb25: ; preds = %bb33, %bb24 + %reg204 = load short** %yyssp ; [#uses=4] + %reg206 = load short* %reg204 ; [#uses=1] + %reg206-idxcast = cast short %reg206 to long ; [#uses=1] + %reg727 = getelementptr [43 x short]* %yysindex, long 0, long %reg206-idxcast ; [#uses=1] + %reg212 = load short* %reg727 ; [#uses=2] + %cast732 = cast short %reg212 to int ; [#uses=2] + %cond733 = seteq int %cast732, 0 ; [#uses=1] + br bool %cond733, label %bb32, label %bb26 + +bb26: ; preds = %bb25 + %reg466 = add int %cast732, 256 ; [#uses=2] + %cond736 = setlt int %reg466, 0 ; [#uses=1] + br bool %cond736, label %bb32, label %bb27 + +bb27: ; preds = %bb26 + %cond739 = setgt int %reg466, 262 ; [#uses=1] + br bool %cond739, label %bb32, label %bb28 + +bb28: ; preds = %bb27 + %reg212-idxcast = cast short %reg212 to long ; [#uses=1] + %reg212-idxcast-offset = add long %reg212-idxcast, 256 ; [#uses=2] + %reg744 = getelementptr [263 x short]* %yycheck, long 0, long %reg212-idxcast-offset ; [#uses=1] + %reg221 = load short* %reg744 ; [#uses=1] + %cond748 = setne short %reg221, 256 ; [#uses=1] + br bool %cond748, label %bb32, label %bb29 + +bb29: ; preds = %bb28 + %cast750 = cast short* %reg204 to sbyte* ; [#uses=1] + %reg223 = load short** %yysslim ; [#uses=1] + %cast751 = cast short* %reg223 to sbyte* ; [#uses=1] + %cond752 = setlt sbyte* %cast750, %cast751 ; [#uses=1] + br bool %cond752, label %bb31, label %bb30 + +bb30: ; preds = %bb29 + %reg754 = call int %yygrowstack( ) ; [#uses=1] + %cond754 = setne int %reg754, 0 ; [#uses=1] + br bool %cond754, label %bb113, label %bb31 + +bb31: ; preds = %bb30, %bb29 + %reg225 = load short** %yyssp ; [#uses=1] + %reg757 = getelementptr short* %reg225, long 1 ; [#uses=2] + store short* %reg757, short** %yyssp + %reg763 = getelementptr [263 x short]* %yytable, long 0, long %reg212-idxcast-offset ; [#uses=1] + %reg234 = load short* %reg763 ; [#uses=2] + %cast768 = cast short %reg234 to uint ; [#uses=1] + store short %reg234, short* %reg757 + %reg236 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg771 = getelementptr %YYSTYPE* %reg236, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg771, %YYSTYPE** %yyvsp + %reg239 = load %IntList* getelementptr (%YYSTYPE* %yylval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg771.idx1 = getelementptr %YYSTYPE* %reg236, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg239, %IntList* %reg771.idx1 + br label %bb4 + +bb32: ; preds = %bb28, %bb27, %bb26, %bb25 + %cast777 = cast short* %reg204 to sbyte* ; [#uses=1] + %cond779 = setle sbyte* %cast777, %cast778 ; [#uses=1] + br bool %cond779, label %UnifiedExitNode, label %bb33 + +bb33: ; preds = %bb32 + %reg781 = getelementptr short* %reg204, long -1 ; [#uses=1] + store short* %reg781, short** %yyssp + %reg244 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg786 = getelementptr %YYSTYPE* %reg244, long -1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg786, %YYSTYPE** %yyvsp + br label %bb25 + +bb34: ; preds = %bb23 + %reg246 = load int* %yychar ; [#uses=1] + %cond791 = seteq int %reg246, 0 ; [#uses=1] + br bool %cond791, label %UnifiedExitNode, label %bb35 + +bb35: ; preds = %bb34 + store int -1, int* %yychar + br label %bb4 + +bb36: ; preds = %bb20, %bb4 + %reg468 = phi int [ %cast709, %bb20 ], [ %cast599, %bb4 ] ; [#uses=31] + %reg468-idxcast = cast int %reg468 to long ; [#uses=2] + %reg796 = getelementptr [25 x short]* %yylen, long 0, long %reg468-idxcast ; [#uses=1] + %reg254 = load short* %reg796 ; [#uses=2] + %reg259 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg254-idxcast = cast short %reg254 to long ; [#uses=1] + %reg254-idxcast-scale = mul long %reg254-idxcast, -1 ; [#uses=1] + %reg254-idxcast-scale-offset = add long %reg254-idxcast-scale, 1 ; [#uses=1] + %reg261.idx1 = getelementptr %YYSTYPE* %reg259, long %reg254-idxcast-scale-offset, ubyte 0 ; <%IntList*> [#uses=1] + %reg261 = load %IntList* %reg261.idx1 ; <%IntList> [#uses=1] + store %IntList %reg261, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %cond812 = seteq int %reg468, 13 ; [#uses=1] + br bool %cond812, label %bb85, label %bb37 + +bb37: ; preds = %bb36 + %cond814 = setgt int %reg468, 13 ; [#uses=1] + br bool %cond814, label %bb56, label %bb38 + +bb38: ; preds = %bb37 + %cond817 = seteq int %reg468, 7 ; [#uses=1] + br bool %cond817, label %bb79, label %bb39 + +bb39: ; preds = %bb38 + %cond819 = setgt int %reg468, 7 ; [#uses=1] + br bool %cond819, label %bb48, label %bb40 + +bb40: ; preds = %bb39 + %cond822 = seteq int %reg468, 4 ; [#uses=1] + br bool %cond822, label %bb76, label %bb41 + +bb41: ; preds = %bb40 + %cond824 = setgt int %reg468, 4 ; [#uses=1] + br bool %cond824, label %bb45, label %bb42 + +bb42: ; preds = %bb41 + %cond827 = seteq int %reg468, 2 ; [#uses=1] + br bool %cond827, label %bb74, label %bb43 + +bb43: ; preds = %bb42 + %cond829 = seteq int %reg468, 3 ; [#uses=1] + br bool %cond829, label %bb75, label %bb97 + +bb45: ; preds = %bb41 + %cond831 = seteq int %reg468, 5 ; [#uses=1] + br bool %cond831, label %bb77, label %bb46 + +bb46: ; preds = %bb45 + %cond833 = seteq int %reg468, 6 ; [#uses=1] + br bool %cond833, label %bb78, label %bb97 + +bb48: ; preds = %bb39 + %cond835 = seteq int %reg468, 10 ; [#uses=1] + br bool %cond835, label %bb82, label %bb49 + +bb49: ; preds = %bb48 + %cond837 = setgt int %reg468, 10 ; [#uses=1] + br bool %cond837, label %bb53, label %bb50 + +bb50: ; preds = %bb49 + %cond840 = seteq int %reg468, 8 ; [#uses=1] + br bool %cond840, label %bb80, label %bb51 + +bb51: ; preds = %bb50 + %cond842 = seteq int %reg468, 9 ; [#uses=1] + br bool %cond842, label %bb81, label %bb97 + +bb53: ; preds = %bb49 + %cond844 = seteq int %reg468, 11 ; [#uses=1] + br bool %cond844, label %bb83, label %bb54 + +bb54: ; preds = %bb53 + %cond846 = seteq int %reg468, 12 ; [#uses=1] + br bool %cond846, label %bb84, label %bb97 + +bb56: ; preds = %bb37 + %cond848 = seteq int %reg468, 19 ; [#uses=1] + br bool %cond848, label %bb91, label %bb57 + +bb57: ; preds = %bb56 + %cond850 = setgt int %reg468, 19 ; [#uses=1] + br bool %cond850, label %bb66, label %bb58 + +bb58: ; preds = %bb57 + %cond853 = seteq int %reg468, 16 ; [#uses=1] + br bool %cond853, label %bb88, label %bb59 + +bb59: ; preds = %bb58 + %cond855 = setgt int %reg468, 16 ; [#uses=1] + br bool %cond855, label %bb63, label %bb60 + +bb60: ; preds = %bb59 + %cond858 = seteq int %reg468, 14 ; [#uses=1] + br bool %cond858, label %bb86, label %bb61 + +bb61: ; preds = %bb60 + %cond860 = seteq int %reg468, 15 ; [#uses=1] + br bool %cond860, label %bb87, label %bb97 + +bb63: ; preds = %bb59 + %cond862 = seteq int %reg468, 17 ; [#uses=1] + br bool %cond862, label %bb89, label %bb64 + +bb64: ; preds = %bb63 + %cond864 = seteq int %reg468, 18 ; [#uses=1] + br bool %cond864, label %bb90, label %bb97 + +bb66: ; preds = %bb57 + %cond866 = seteq int %reg468, 22 ; [#uses=1] + br bool %cond866, label %bb94, label %bb67 + +bb67: ; preds = %bb66 + %cond868 = setgt int %reg468, 22 ; [#uses=1] + br bool %cond868, label %bb71, label %bb68 + +bb68: ; preds = %bb67 + %cond871 = seteq int %reg468, 20 ; [#uses=1] + br bool %cond871, label %bb92, label %bb69 + +bb69: ; preds = %bb68 + %cond873 = seteq int %reg468, 21 ; [#uses=1] + br bool %cond873, label %bb93, label %bb97 + +bb71: ; preds = %bb67 + %cond875 = seteq int %reg468, 23 ; [#uses=1] + br bool %cond875, label %bb95, label %bb72 + +bb72: ; preds = %bb71 + %cond877 = seteq int %reg468, 24 ; [#uses=1] + br bool %cond877, label %bb96, label %bb97 + +bb74: ; preds = %bb42 + call void %yyfinished( ) + br label %bb97 + +bb75: ; preds = %bb43 + %reg262 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg264.idx1 = getelementptr %YYSTYPE* %reg262, long -2, ubyte 0 ; <%IntList*> [#uses=1] + %reg264 = load %IntList* %reg264.idx1 ; <%IntList> [#uses=1] + %reg265.idx = getelementptr %YYSTYPE* %reg262, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg265 = load %IntList* %reg265.idx ; <%IntList> [#uses=1] + %cast889 = cast %IntList %reg265 to %List ; <%List> [#uses=1] + %cast890 = cast %IntList %reg264 to %List ; <%List> [#uses=1] + call void %doSpec( %List %cast890, %List %cast889 ) + br label %bb97 + +bb76: ; preds = %bb40 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb77: ; preds = %bb45 + %reg269 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast894 = getelementptr %YYSTYPE* %reg269, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg271 = load %IntList* %cast894 ; <%IntList> [#uses=1] + %reg271 = cast %IntList %reg271 to sbyte* ; [#uses=1] + %reg272.idx1 = getelementptr %YYSTYPE* %reg269, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg272 = load %IntList* %reg272.idx1 ; <%IntList> [#uses=1] + %cast901 = cast %IntList %reg272 to %List ; <%List> [#uses=1] + %reg901 = call %List %newList( sbyte* %reg271, %List %cast901 ) ; <%List> [#uses=1] + cast %List %reg901 to %IntList ; <%IntList>:0 [#uses=1] + store %IntList %0, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb78: ; preds = %bb46 + %reg275 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %reg277.idx = getelementptr %YYSTYPE* %reg275, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg277 = load %IntList* %reg277.idx ; <%IntList> [#uses=1] + %cast907 = cast %IntList %reg277 to %List ; <%List> [#uses=1] + %reg907 = call %Arity %newArity( int -1, %List %cast907 ) ; <%Arity> [#uses=1] + cast %Arity %reg907 to %IntList ; <%IntList>:1 [#uses=1] + store %IntList %1, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb79: ; preds = %bb38 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %reg281 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast912 = getelementptr %YYSTYPE* %reg281, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg282 = load %IntList* %cast912 ; <%IntList> [#uses=1] + %reg282 = cast %IntList %reg282 to %List ; <%List> [#uses=1] + call void %doGram( %List %reg282 ) + br label %bb97 + +bb80: ; preds = %bb50 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + %reg285 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast917 = getelementptr %YYSTYPE* %reg285, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg286 = load %IntList* %cast917 ; <%IntList> [#uses=1] + %reg286 = cast %IntList %reg286 to sbyte* ; [#uses=1] + call void %doStart( sbyte* %reg286 ) + br label %bb97 + +bb81: ; preds = %bb51 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb82: ; preds = %bb48 + %reg290 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast923 = getelementptr %YYSTYPE* %reg290, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg292 = load %IntList* %cast923 ; <%IntList> [#uses=1] + %reg292 = cast %IntList %reg292 to sbyte* ; [#uses=1] + %reg293.idx1 = getelementptr %YYSTYPE* %reg290, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg293 = load %IntList* %reg293.idx1 ; <%IntList> [#uses=1] + %cast930 = cast %IntList %reg293 to %List ; <%List> [#uses=1] + %reg930 = call %List %newList( sbyte* %reg292, %List %cast930 ) ; <%List> [#uses=1] + cast %List %reg930 to %IntList ; <%IntList>:2 [#uses=1] + store %IntList %2, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb83: ; preds = %bb53 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb84: ; preds = %bb54 + %reg298 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast936 = getelementptr %YYSTYPE* %reg298, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg300 = load %IntList* %cast936 ; <%IntList> [#uses=1] + %reg300 = cast %IntList %reg300 to sbyte* ; [#uses=1] + %reg301.idx1 = getelementptr %YYSTYPE* %reg298, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg301 = load %IntList* %reg301.idx1 ; <%IntList> [#uses=1] + %cast943 = cast %IntList %reg301 to %List ; <%List> [#uses=1] + %reg943 = call %List %newList( sbyte* %reg300, %List %cast943 ) ; <%List> [#uses=1] + cast %List %reg943 to %IntList ; <%IntList>:3 [#uses=1] + store %IntList %3, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb85: ; preds = %bb36 + %reg304 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast9521 = getelementptr %YYSTYPE* %reg304, long -2, ubyte 0 ; <%IntList*> [#uses=1] + %reg306 = load %IntList* %cast9521 ; <%IntList> [#uses=1] + %reg306 = cast %IntList %reg306 to sbyte* ; [#uses=1] + %cast953 = cast %YYSTYPE* %reg304 to int* ; [#uses=1] + %reg307 = load int* %cast953 ; [#uses=1] + %reg955 = call %Binding %newBinding( sbyte* %reg306, int %reg307 ) ; <%Binding> [#uses=1] + cast %Binding %reg955 to %IntList ; <%IntList>:4 [#uses=1] + store %IntList %4, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb86: ; preds = %bb60 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb87: ; preds = %bb61 + %reg312 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast961 = getelementptr %YYSTYPE* %reg312, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg314 = load %IntList* %cast961 ; <%IntList> [#uses=1] + %reg314 = cast %IntList %reg314 to sbyte* ; [#uses=1] + %reg315.idx1 = getelementptr %YYSTYPE* %reg312, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg315 = load %IntList* %reg315.idx1 ; <%IntList> [#uses=1] + %cast968 = cast %IntList %reg315 to %List ; <%List> [#uses=1] + %reg968 = call %List %newList( sbyte* %reg314, %List %cast968 ) ; <%List> [#uses=1] + cast %List %reg968 to %IntList ; <%IntList>:5 [#uses=1] + store %IntList %5, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb88: ; preds = %bb58 + %reg318 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=4] + %cast9791 = getelementptr %YYSTYPE* %reg318, long -6, ubyte 0 ; <%IntList*> [#uses=1] + %reg322 = load %IntList* %cast9791 ; <%IntList> [#uses=1] + %reg322 = cast %IntList %reg322 to sbyte* ; [#uses=1] + %reg323.idx1 = getelementptr %YYSTYPE* %reg318, long -4, ubyte 0 ; <%IntList*> [#uses=1] + %reg323 = load %IntList* %reg323.idx1 ; <%IntList> [#uses=1] + %reg987 = getelementptr %YYSTYPE* %reg318, long -2 ; <%YYSTYPE*> [#uses=1] + %cast989 = cast %YYSTYPE* %reg987 to int* ; [#uses=1] + %reg324 = load int* %cast989 ; [#uses=1] + %reg325.idx1 = getelementptr %YYSTYPE* %reg318, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg325 = load %IntList* %reg325.idx1 ; <%IntList> [#uses=1] + %cast998 = cast %IntList %reg323 to %PatternAST ; <%PatternAST> [#uses=1] + %reg996 = call %RuleAST %newRuleAST( sbyte* %reg322, %PatternAST %cast998, int %reg324, %IntList %reg325 ) ; <%RuleAST> [#uses=1] + cast %RuleAST %reg996 to %IntList ; <%IntList>:6 [#uses=1] + store %IntList %6, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb89: ; preds = %bb63 + %reg328 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast1002 = getelementptr %YYSTYPE* %reg328, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg329 = load %IntList* %cast1002 ; <%IntList> [#uses=1] + %reg329 = cast %IntList %reg329 to sbyte* ; [#uses=1] + %reg1004 = call %PatternAST %newPatternAST( sbyte* %reg329, %List null ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1004 to %IntList ; <%IntList>:7 [#uses=1] + store %IntList %7, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb90: ; preds = %bb64 + %reg333 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %cast10131 = getelementptr %YYSTYPE* %reg333, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg335 = load %IntList* %cast10131 ; <%IntList> [#uses=1] + %reg335 = cast %IntList %reg335 to sbyte* ; [#uses=1] + %reg1015 = call %List %newList( sbyte* %reg335, %List null ) ; <%List> [#uses=1] + %cast10211 = getelementptr %YYSTYPE* %reg333, long -3, ubyte 0 ; <%IntList*> [#uses=1] + %reg338 = load %IntList* %cast10211 ; <%IntList> [#uses=1] + %reg338 = cast %IntList %reg338 to sbyte* ; [#uses=1] + %reg1023 = call %PatternAST %newPatternAST( sbyte* %reg338, %List %reg1015 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1023 to %IntList ; <%IntList>:8 [#uses=1] + store %IntList %8, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb91: ; preds = %bb56 + %reg341 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=3] + %cast10331 = getelementptr %YYSTYPE* %reg341, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg344 = load %IntList* %cast10331 ; <%IntList> [#uses=1] + %reg344 = cast %IntList %reg344 to sbyte* ; [#uses=1] + %reg1035 = call %List %newList( sbyte* %reg344, %List null ) ; <%List> [#uses=1] + %cast10411 = getelementptr %YYSTYPE* %reg341, long -3, ubyte 0 ; <%IntList*> [#uses=1] + %reg347 = load %IntList* %cast10411 ; <%IntList> [#uses=1] + %reg347 = cast %IntList %reg347 to sbyte* ; [#uses=1] + %reg1043 = call %List %newList( sbyte* %reg347, %List %reg1035 ) ; <%List> [#uses=1] + %cast10491 = getelementptr %YYSTYPE* %reg341, long -5, ubyte 0 ; <%IntList*> [#uses=1] + %reg349 = load %IntList* %cast10491 ; <%IntList> [#uses=1] + %reg349 = cast %IntList %reg349 to sbyte* ; [#uses=1] + %reg1051 = call %PatternAST %newPatternAST( sbyte* %reg349, %List %reg1043 ) ; <%PatternAST> [#uses=1] + cast %PatternAST %reg1051 to %IntList ; <%IntList>:9 [#uses=1] + store %IntList %9, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb92: ; preds = %bb68 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb93: ; preds = %bb69 + %reg354 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1059 = getelementptr %YYSTYPE* %reg354, long -2 ; <%YYSTYPE*> [#uses=1] + %cast1061 = cast %YYSTYPE* %reg1059 to int* ; [#uses=1] + %reg356 = load int* %cast1061 ; [#uses=1] + %reg357.idx1 = getelementptr %YYSTYPE* %reg354, long -1, ubyte 0 ; <%IntList*> [#uses=1] + %reg357 = load %IntList* %reg357.idx1 ; <%IntList> [#uses=1] + %reg1068 = call %IntList %newIntList( int %reg356, %IntList %reg357 ) ; <%IntList> [#uses=1] + store %IntList %reg1068, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb94: ; preds = %bb66 + store %IntList null, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb95: ; preds = %bb71 + %reg362 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1076 = getelementptr %YYSTYPE* %reg362, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1078 = cast %YYSTYPE* %reg1076 to int* ; [#uses=1] + %reg364 = load int* %cast1078 ; [#uses=1] + %reg365.idx = getelementptr %YYSTYPE* %reg362, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg365 = load %IntList* %reg365.idx ; <%IntList> [#uses=1] + %reg1081 = call %IntList %newIntList( int %reg364, %IntList %reg365 ) ; <%IntList> [#uses=1] + store %IntList %reg1081, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb96: ; preds = %bb72 + %reg368 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1088 = getelementptr %YYSTYPE* %reg368, long -1 ; <%YYSTYPE*> [#uses=1] + %cast1090 = cast %YYSTYPE* %reg1088 to int* ; [#uses=1] + %reg370 = load int* %cast1090 ; [#uses=1] + %reg371.idx = getelementptr %YYSTYPE* %reg368, long 0, ubyte 0 ; <%IntList*> [#uses=1] + %reg371 = load %IntList* %reg371.idx ; <%IntList> [#uses=1] + %reg1093 = call %IntList %newIntList( int %reg370, %IntList %reg371 ) ; <%IntList> [#uses=1] + store %IntList %reg1093, %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) + br label %bb97 + +bb97: ; preds = %bb96, %bb95, %bb94, %bb93, %bb92, %bb91, %bb90, %bb89, %bb88, %bb87, %bb86, %bb85, %bb84, %bb83, %bb82, %bb81, %bb80, %bb79, %bb78, %bb77, %bb76, %bb75, %bb74, %bb72, %bb69, %bb64, %bb61, %bb54, %bb51, %bb46, %bb43 + %cast1097 = cast short %reg254 to ulong ; [#uses=3] + %reg375 = add ulong %cast1097, %cast1097 ; [#uses=1] + %reg377 = load short** %yyssp ; [#uses=1] + %cast379 = cast short* %reg377 to ulong ; [#uses=1] + %reg381 = sub ulong %cast379, %reg375 ; [#uses=1] + %cast1099 = cast ulong %reg381 to short* ; [#uses=1] + store short* %cast1099, short** %yyssp + %reg382 = load short** %yyssp ; [#uses=3] + %reg383 = load short* %reg382 ; [#uses=1] + %cast1103 = cast short %reg383 to int ; [#uses=3] + %reg385 = mul ulong %cast1097, 8 ; [#uses=1] + %reg387 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=1] + %cast389 = cast %YYSTYPE* %reg387 to ulong ; [#uses=1] + %reg391 = sub ulong %cast389, %reg385 ; [#uses=1] + %cast1108 = cast ulong %reg391 to %YYSTYPE* ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %cast1108, %YYSTYPE** %yyvsp + %reg1111 = getelementptr [25 x short]* %yylhs, long 0, long %reg468-idxcast ; [#uses=1] + %reg398 = load short* %reg1111 ; [#uses=2] + %cast1116 = cast short %reg398 to int ; [#uses=1] + %cond1117 = setne int %cast1103, 0 ; [#uses=1] + br bool %cond1117, label %bb104, label %bb98 + +bb98: ; preds = %bb97 + %cond1119 = setne int %cast1116, 0 ; [#uses=1] + br bool %cond1119, label %bb104, label %bb99 + +bb99: ; preds = %bb98 + %reg1122 = getelementptr short* %reg382, long 1 ; [#uses=2] + store short* %reg1122, short** %yyssp + store short 1, short* %reg1122 + %reg403 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1128 = getelementptr %YYSTYPE* %reg403, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1128, %YYSTYPE** %yyvsp + %reg406 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg1128.idx1 = getelementptr %YYSTYPE* %reg403, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg406, %IntList* %reg1128.idx1 + %reg407 = load int* %yychar ; [#uses=1] + %cond1135 = setge int %reg407, 0 ; [#uses=1] + br bool %cond1135, label %bb102, label %bb100 + +bb100: ; preds = %bb99 + %reg1139 = call int %yylex( ) ; [#uses=1] + store int %reg1139, int* %yychar + %reg409 = load int* %yychar ; [#uses=1] + %cond1141 = setge int %reg409, 0 ; [#uses=1] + br bool %cond1141, label %bb102, label %bb101 + +bb101: ; preds = %bb100 + store int 0, int* %yychar + br label %bb102 + +bb102: ; preds = %bb101, %bb100, %bb99 + %reg411 = load int* %yychar ; [#uses=1] + %cond1146 = setne int %reg411, 0 ; [#uses=1] + br bool %cond1146, label %bb4, label %UnifiedExitNode + +bb104: ; preds = %bb98, %bb97 + %reg398-idxcast = cast short %reg398 to long ; [#uses=2] + %reg1150 = getelementptr [12 x short]* %yygindex, long 0, long %reg398-idxcast ; [#uses=1] + %reg418 = load short* %reg1150 ; [#uses=1] + %cast1155 = cast short %reg418 to int ; [#uses=2] + %cond1156 = seteq int %cast1155, 0 ; [#uses=1] + br bool %cond1156, label %bb109, label %bb105 + +bb105: ; preds = %bb104 + %reg473 = add int %cast1155, %cast1103 ; [#uses=3] + %cond1158 = setlt int %reg473, 0 ; [#uses=1] + br bool %cond1158, label %bb109, label %bb106 + +bb106: ; preds = %bb105 + %cond1161 = setgt int %reg473, 262 ; [#uses=1] + br bool %cond1161, label %bb109, label %bb107 + +bb107: ; preds = %bb106 + %reg473-idxcast = cast int %reg473 to long ; [#uses=2] + %reg1166 = getelementptr [263 x short]* %yycheck, long 0, long %reg473-idxcast ; [#uses=1] + %reg428 = load short* %reg1166 ; [#uses=1] + %cast1171 = cast short %reg428 to int ; [#uses=1] + %cond1172 = setne int %cast1171, %cast1103 ; [#uses=1] + br bool %cond1172, label %bb109, label %bb108 + +bb108: ; preds = %bb107 + %reg1175 = getelementptr [263 x short]* %yytable, long 0, long %reg473-idxcast ; [#uses=1] + %reg435 = load short* %reg1175 ; [#uses=1] + %cast1180 = cast short %reg435 to uint ; [#uses=1] + br label %bb110 + +bb109: ; preds = %bb107, %bb106, %bb105, %bb104 + %reg1183 = getelementptr [12 x short]* %yydgoto, long 0, long %reg398-idxcast ; [#uses=1] + %reg442 = load short* %reg1183 ; [#uses=1] + %cast1188 = cast short %reg442 to uint ; [#uses=1] + br label %bb110 + +bb110: ; preds = %bb109, %bb108 + %reg476 = phi uint [ %cast1188, %bb109 ], [ %cast1180, %bb108 ] ; [#uses=2] + %cast1189 = cast short* %reg382 to sbyte* ; [#uses=1] + %reg444 = load short** %yysslim ; [#uses=1] + %cast1190 = cast short* %reg444 to sbyte* ; [#uses=1] + %cond1191 = setlt sbyte* %cast1189, %cast1190 ; [#uses=1] + br bool %cond1191, label %bb112, label %bb111 + +bb111: ; preds = %bb110 + %reg1193 = call int %yygrowstack( ) ; [#uses=1] + %cond1193 = setne int %reg1193, 0 ; [#uses=1] + br bool %cond1193, label %bb113, label %bb112 + +bb112: ; preds = %bb111, %bb110 + %reg446 = load short** %yyssp ; [#uses=1] + %reg1196 = getelementptr short* %reg446, long 1 ; [#uses=2] + store short* %reg1196, short** %yyssp + %cast1357 = cast uint %reg476 to short ; [#uses=1] + store short %cast1357, short* %reg1196 + %reg449 = load %YYSTYPE** %yyvsp ; <%YYSTYPE*> [#uses=2] + %reg1202 = getelementptr %YYSTYPE* %reg449, long 1 ; <%YYSTYPE*> [#uses=1] + store %YYSTYPE* %reg1202, %YYSTYPE** %yyvsp + %reg452 = load %IntList* getelementptr (%YYSTYPE* %yyval, long 0, ubyte 0) ; <%IntList> [#uses=1] + %reg1202.idx1 = getelementptr %YYSTYPE* %reg449, long 1, ubyte 0 ; <%IntList*> [#uses=1] + store %IntList %reg452, %IntList* %reg1202.idx1 + br label %bb4 + +bb113: ; preds = %bb111, %bb30, %bb13, %bb2 + call void %yyerror( sbyte* getelementptr ([20 x sbyte]* %.LC1, long 0, long 0) ) + br label %UnifiedExitNode + +UnifiedExitNode: ; preds = %bb113, %bb102, %bb34, %bb32 + %UnifiedRetVal = phi int [ 1, %bb113 ], [ 1, %bb34 ], [ 1, %bb32 ], [ 0, %bb102 ] ; [#uses=1] + ret int %UnifiedRetVal +} + +declare %List %newList(sbyte*, %List) + +declare %IntList %newIntList(int, %IntList) + +declare void %doStart(sbyte*) + +declare void %yyerror(sbyte*) + +declare void %doSpec(%List, %List) + +declare %Arity %newArity(int, %List) + +declare %Binding %newBinding(sbyte*, int) + +declare %PatternAST %newPatternAST(sbyte*, %List) + +declare %RuleAST %newRuleAST(sbyte*, %PatternAST, int, %IntList) + +declare void %yyfinished() + +declare int %yylex() + +declare void %doGram(%List) + +declare int %yygrowstack()