Test case that shows some poor results for register allocation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4167 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGen/Generic/BurgBadRegAlloc.ll b/test/CodeGen/Generic/BurgBadRegAlloc.ll
new file mode 100644
index 0000000..6bbee84
--- /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		; <int*> [#uses=3]
+%yyerrflag = external global int		; <int*> [#uses=6]
+%yychar = external global int		; <int*> [#uses=15]
+%yyssp = external global short*		; <short**> [#uses=15]
+%yyvsp = external global %YYSTYPE*		; <%YYSTYPE**> [#uses=30]
+%yyval = external global %YYSTYPE		; <%YYSTYPE*> [#uses=1]
+%yyss = external global short*		; <short**> [#uses=3]
+%yysslim = external global short*		; <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		; <short*> [#uses=1]
+	%cond581 = setne short* %reg113, null		; <bool> [#uses=1]
+	br bool %cond581, label %bb3, label %bb2
+
+bb2:		; preds = %bb0
+	%reg584 = call int %yygrowstack( )		; <int> [#uses=1]
+	%cond584 = setne int %reg584, 0		; <bool> [#uses=1]
+	br bool %cond584, label %bb113, label %bb3
+
+bb3:		; preds = %bb2, %bb0
+	%reg115 = load short** %yyss		; <short*> [#uses=1]
+	store short* %reg115, short** %yyssp
+	%reg116 = load %YYSTYPE** %yyvs		; <%YYSTYPE*> [#uses=1]
+	store %YYSTYPE* %reg116, %YYSTYPE** %yyvsp
+	%reg117 = load short** %yyssp		; <short*> [#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 ]		; <uint> [#uses=2]
+	%reg458-idxcast = cast uint %reg458 to long		; <long> [#uses=3]
+	%reg594 = getelementptr [43 x short]* %yydefred, long 0, long %reg458-idxcast		; <short*> [#uses=1]
+	%reg125 = load short* %reg594		; <short> [#uses=1]
+	%cast599 = cast short %reg125 to int		; <int> [#uses=2]
+	%cond600 = setne int %cast599, 0		; <bool> [#uses=1]
+	br bool %cond600, label %bb36, label %bb5
+
+bb5:		; preds = %bb4
+	%reg127 = load int* %yychar		; <int> [#uses=1]
+	%cond603 = setge int %reg127, 0		; <bool> [#uses=1]
+	br bool %cond603, label %bb8, label %bb6
+
+bb6:		; preds = %bb5
+	%reg607 = call int %yylex( )		; <int> [#uses=1]
+	store int %reg607, int* %yychar
+	%reg129 = load int* %yychar		; <int> [#uses=1]
+	%cond609 = setge int %reg129, 0		; <bool> [#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		; <short*> [#uses=1]
+	%reg137 = load short* %reg615		; <short> [#uses=1]
+	%cast620 = cast short %reg137 to int		; <int> [#uses=2]
+	%cond621 = seteq int %cast620, 0		; <bool> [#uses=1]
+	br bool %cond621, label %bb16, label %bb9
+
+bb9:		; preds = %bb8
+	%reg139 = load int* %yychar		; <int> [#uses=2]
+	%reg460 = add int %cast620, %reg139		; <int> [#uses=3]
+	%cond624 = setlt int %reg460, 0		; <bool> [#uses=1]
+	br bool %cond624, label %bb16, label %bb10
+
+bb10:		; preds = %bb9
+	%cond627 = setgt int %reg460, 262		; <bool> [#uses=1]
+	br bool %cond627, label %bb16, label %bb11
+
+bb11:		; preds = %bb10
+	%reg460-idxcast = cast int %reg460 to long		; <long> [#uses=2]
+	%reg632 = getelementptr [263 x short]* %yycheck, long 0, long %reg460-idxcast		; <short*> [#uses=1]
+	%reg148 = load short* %reg632		; <short> [#uses=1]
+	%cast637 = cast short %reg148 to int		; <int> [#uses=1]
+	%cond639 = setne int %cast637, %reg139		; <bool> [#uses=1]
+	br bool %cond639, label %bb16, label %bb12
+
+bb12:		; preds = %bb11
+	%reg150 = load short** %yyssp		; <short*> [#uses=1]
+	%cast640 = cast short* %reg150 to sbyte*		; <sbyte*> [#uses=1]
+	%reg151 = load short** %yysslim		; <short*> [#uses=1]
+	%cast641 = cast short* %reg151 to sbyte*		; <sbyte*> [#uses=1]
+	%cond642 = setlt sbyte* %cast640, %cast641		; <bool> [#uses=1]
+	br bool %cond642, label %bb14, label %bb13
+
+bb13:		; preds = %bb12
+	%reg644 = call int %yygrowstack( )		; <int> [#uses=1]
+	%cond644 = setne int %reg644, 0		; <bool> [#uses=1]
+	br bool %cond644, label %bb113, label %bb14
+
+bb14:		; preds = %bb13, %bb12
+	%reg153 = load short** %yyssp		; <short*> [#uses=1]
+	%reg647 = getelementptr short* %reg153, long 1		; <short*> [#uses=2]
+	store short* %reg647, short** %yyssp
+	%reg653 = getelementptr [263 x short]* %yytable, long 0, long %reg460-idxcast		; <short*> [#uses=1]
+	%reg162 = load short* %reg653		; <short> [#uses=2]
+	%cast658 = cast short %reg162 to uint		; <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		; <int> [#uses=2]
+	%cond669 = setle int %reg169, 0		; <bool> [#uses=1]
+	br bool %cond669, label %bb4, label %bb15
+
+bb15:		; preds = %bb14
+	%reg171 = add int %reg169, -1		; <int> [#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		; <short*> [#uses=1]
+	%reg178 = load short* %reg677		; <short> [#uses=1]
+	%cast682 = cast short %reg178 to int		; <int> [#uses=2]
+	%cond683 = seteq int %cast682, 0		; <bool> [#uses=1]
+	br bool %cond683, label %bb21, label %bb17
+
+bb17:		; preds = %bb16
+	%reg180 = load int* %yychar		; <int> [#uses=2]
+	%reg463 = add int %cast682, %reg180		; <int> [#uses=3]
+	%cond686 = setlt int %reg463, 0		; <bool> [#uses=1]
+	br bool %cond686, label %bb21, label %bb18
+
+bb18:		; preds = %bb17
+	%cond689 = setgt int %reg463, 262		; <bool> [#uses=1]
+	br bool %cond689, label %bb21, label %bb19
+
+bb19:		; preds = %bb18
+	%reg463-idxcast = cast int %reg463 to long		; <long> [#uses=2]
+	%reg694 = getelementptr [263 x short]* %yycheck, long 0, long %reg463-idxcast		; <short*> [#uses=1]
+	%reg189 = load short* %reg694		; <short> [#uses=1]
+	%cast699 = cast short %reg189 to int		; <int> [#uses=1]
+	%cond701 = setne int %cast699, %reg180		; <bool> [#uses=1]
+	br bool %cond701, label %bb21, label %bb20
+
+bb20:		; preds = %bb19
+	%reg704 = getelementptr [263 x short]* %yytable, long 0, long %reg463-idxcast		; <short*> [#uses=1]
+	%reg197 = load short* %reg704		; <short> [#uses=1]
+	%cast709 = cast short %reg197 to int		; <int> [#uses=1]
+	br label %bb36
+
+bb21:		; preds = %bb19, %bb18, %bb17, %bb16
+	%reg198 = load int* %yyerrflag		; <int> [#uses=1]
+	%cond711 = setne int %reg198, 0		; <bool> [#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		; <int> [#uses=1]
+	%reg201 = add int %reg200, 1		; <int> [#uses=1]
+	store int %reg201, int* %yynerrs
+	br label %bb23
+
+bb23:		; preds = %bb22, %bb21
+	%reg202 = load int* %yyerrflag		; <int> [#uses=1]
+	%cond719 = setgt int %reg202, 2		; <bool> [#uses=1]
+	br bool %cond719, label %bb34, label %bb24
+
+bb24:		; preds = %bb23
+	store int 3, int* %yyerrflag
+	%reg241 = load short** %yyss		; <short*> [#uses=1]
+	%cast778 = cast short* %reg241 to sbyte*		; <sbyte*> [#uses=1]
+	br label %bb25
+
+bb25:		; preds = %bb33, %bb24
+	%reg204 = load short** %yyssp		; <short*> [#uses=4]
+	%reg206 = load short* %reg204		; <short> [#uses=1]
+	%reg206-idxcast = cast short %reg206 to long		; <long> [#uses=1]
+	%reg727 = getelementptr [43 x short]* %yysindex, long 0, long %reg206-idxcast		; <short*> [#uses=1]
+	%reg212 = load short* %reg727		; <short> [#uses=2]
+	%cast732 = cast short %reg212 to int		; <int> [#uses=2]
+	%cond733 = seteq int %cast732, 0		; <bool> [#uses=1]
+	br bool %cond733, label %bb32, label %bb26
+
+bb26:		; preds = %bb25
+	%reg466 = add int %cast732, 256		; <int> [#uses=2]
+	%cond736 = setlt int %reg466, 0		; <bool> [#uses=1]
+	br bool %cond736, label %bb32, label %bb27
+
+bb27:		; preds = %bb26
+	%cond739 = setgt int %reg466, 262		; <bool> [#uses=1]
+	br bool %cond739, label %bb32, label %bb28
+
+bb28:		; preds = %bb27
+	%reg212-idxcast = cast short %reg212 to long		; <long> [#uses=1]
+	%reg212-idxcast-offset = add long %reg212-idxcast, 256		; <long> [#uses=2]
+	%reg744 = getelementptr [263 x short]* %yycheck, long 0, long %reg212-idxcast-offset		; <short*> [#uses=1]
+	%reg221 = load short* %reg744		; <short> [#uses=1]
+	%cond748 = setne short %reg221, 256		; <bool> [#uses=1]
+	br bool %cond748, label %bb32, label %bb29
+
+bb29:		; preds = %bb28
+	%cast750 = cast short* %reg204 to sbyte*		; <sbyte*> [#uses=1]
+	%reg223 = load short** %yysslim		; <short*> [#uses=1]
+	%cast751 = cast short* %reg223 to sbyte*		; <sbyte*> [#uses=1]
+	%cond752 = setlt sbyte* %cast750, %cast751		; <bool> [#uses=1]
+	br bool %cond752, label %bb31, label %bb30
+
+bb30:		; preds = %bb29
+	%reg754 = call int %yygrowstack( )		; <int> [#uses=1]
+	%cond754 = setne int %reg754, 0		; <bool> [#uses=1]
+	br bool %cond754, label %bb113, label %bb31
+
+bb31:		; preds = %bb30, %bb29
+	%reg225 = load short** %yyssp		; <short*> [#uses=1]
+	%reg757 = getelementptr short* %reg225, long 1		; <short*> [#uses=2]
+	store short* %reg757, short** %yyssp
+	%reg763 = getelementptr [263 x short]* %yytable, long 0, long %reg212-idxcast-offset		; <short*> [#uses=1]
+	%reg234 = load short* %reg763		; <short> [#uses=2]
+	%cast768 = cast short %reg234 to uint		; <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*		; <sbyte*> [#uses=1]
+	%cond779 = setle sbyte* %cast777, %cast778		; <bool> [#uses=1]
+	br bool %cond779, label %UnifiedExitNode, label %bb33
+
+bb33:		; preds = %bb32
+	%reg781 = getelementptr short* %reg204, long -1		; <short*> [#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		; <int> [#uses=1]
+	%cond791 = seteq int %reg246, 0		; <bool> [#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 ]		; <int> [#uses=31]
+	%reg468-idxcast = cast int %reg468 to long		; <long> [#uses=2]
+	%reg796 = getelementptr [25 x short]* %yylen, long 0, long %reg468-idxcast		; <short*> [#uses=1]
+	%reg254 = load short* %reg796		; <short> [#uses=2]
+	%reg259 = load %YYSTYPE** %yyvsp		; <%YYSTYPE*> [#uses=1]
+	%reg254-idxcast = cast short %reg254 to long		; <long> [#uses=1]
+	%reg254-idxcast-scale = mul long %reg254-idxcast, -1		; <long> [#uses=1]
+	%reg254-idxcast-scale-offset = add long %reg254-idxcast-scale, 1		; <long> [#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		; <bool> [#uses=1]
+	br bool %cond812, label %bb85, label %bb37
+
+bb37:		; preds = %bb36
+	%cond814 = setgt int %reg468, 13		; <bool> [#uses=1]
+	br bool %cond814, label %bb56, label %bb38
+
+bb38:		; preds = %bb37
+	%cond817 = seteq int %reg468, 7		; <bool> [#uses=1]
+	br bool %cond817, label %bb79, label %bb39
+
+bb39:		; preds = %bb38
+	%cond819 = setgt int %reg468, 7		; <bool> [#uses=1]
+	br bool %cond819, label %bb48, label %bb40
+
+bb40:		; preds = %bb39
+	%cond822 = seteq int %reg468, 4		; <bool> [#uses=1]
+	br bool %cond822, label %bb76, label %bb41
+
+bb41:		; preds = %bb40
+	%cond824 = setgt int %reg468, 4		; <bool> [#uses=1]
+	br bool %cond824, label %bb45, label %bb42
+
+bb42:		; preds = %bb41
+	%cond827 = seteq int %reg468, 2		; <bool> [#uses=1]
+	br bool %cond827, label %bb74, label %bb43
+
+bb43:		; preds = %bb42
+	%cond829 = seteq int %reg468, 3		; <bool> [#uses=1]
+	br bool %cond829, label %bb75, label %bb97
+
+bb45:		; preds = %bb41
+	%cond831 = seteq int %reg468, 5		; <bool> [#uses=1]
+	br bool %cond831, label %bb77, label %bb46
+
+bb46:		; preds = %bb45
+	%cond833 = seteq int %reg468, 6		; <bool> [#uses=1]
+	br bool %cond833, label %bb78, label %bb97
+
+bb48:		; preds = %bb39
+	%cond835 = seteq int %reg468, 10		; <bool> [#uses=1]
+	br bool %cond835, label %bb82, label %bb49
+
+bb49:		; preds = %bb48
+	%cond837 = setgt int %reg468, 10		; <bool> [#uses=1]
+	br bool %cond837, label %bb53, label %bb50
+
+bb50:		; preds = %bb49
+	%cond840 = seteq int %reg468, 8		; <bool> [#uses=1]
+	br bool %cond840, label %bb80, label %bb51
+
+bb51:		; preds = %bb50
+	%cond842 = seteq int %reg468, 9		; <bool> [#uses=1]
+	br bool %cond842, label %bb81, label %bb97
+
+bb53:		; preds = %bb49
+	%cond844 = seteq int %reg468, 11		; <bool> [#uses=1]
+	br bool %cond844, label %bb83, label %bb54
+
+bb54:		; preds = %bb53
+	%cond846 = seteq int %reg468, 12		; <bool> [#uses=1]
+	br bool %cond846, label %bb84, label %bb97
+
+bb56:		; preds = %bb37
+	%cond848 = seteq int %reg468, 19		; <bool> [#uses=1]
+	br bool %cond848, label %bb91, label %bb57
+
+bb57:		; preds = %bb56
+	%cond850 = setgt int %reg468, 19		; <bool> [#uses=1]
+	br bool %cond850, label %bb66, label %bb58
+
+bb58:		; preds = %bb57
+	%cond853 = seteq int %reg468, 16		; <bool> [#uses=1]
+	br bool %cond853, label %bb88, label %bb59
+
+bb59:		; preds = %bb58
+	%cond855 = setgt int %reg468, 16		; <bool> [#uses=1]
+	br bool %cond855, label %bb63, label %bb60
+
+bb60:		; preds = %bb59
+	%cond858 = seteq int %reg468, 14		; <bool> [#uses=1]
+	br bool %cond858, label %bb86, label %bb61
+
+bb61:		; preds = %bb60
+	%cond860 = seteq int %reg468, 15		; <bool> [#uses=1]
+	br bool %cond860, label %bb87, label %bb97
+
+bb63:		; preds = %bb59
+	%cond862 = seteq int %reg468, 17		; <bool> [#uses=1]
+	br bool %cond862, label %bb89, label %bb64
+
+bb64:		; preds = %bb63
+	%cond864 = seteq int %reg468, 18		; <bool> [#uses=1]
+	br bool %cond864, label %bb90, label %bb97
+
+bb66:		; preds = %bb57
+	%cond866 = seteq int %reg468, 22		; <bool> [#uses=1]
+	br bool %cond866, label %bb94, label %bb67
+
+bb67:		; preds = %bb66
+	%cond868 = setgt int %reg468, 22		; <bool> [#uses=1]
+	br bool %cond868, label %bb71, label %bb68
+
+bb68:		; preds = %bb67
+	%cond871 = seteq int %reg468, 20		; <bool> [#uses=1]
+	br bool %cond871, label %bb92, label %bb69
+
+bb69:		; preds = %bb68
+	%cond873 = seteq int %reg468, 21		; <bool> [#uses=1]
+	br bool %cond873, label %bb93, label %bb97
+
+bb71:		; preds = %bb67
+	%cond875 = seteq int %reg468, 23		; <bool> [#uses=1]
+	br bool %cond875, label %bb95, label %bb72
+
+bb72:		; preds = %bb71
+	%cond877 = seteq int %reg468, 24		; <bool> [#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*		; <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*		; <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*		; <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*		; <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*		; <sbyte*> [#uses=1]
+	%cast953 = cast %YYSTYPE* %reg304 to int*		; <int*> [#uses=1]
+	%reg307 = load int* %cast953		; <int> [#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*		; <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*		; <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*		; <int*> [#uses=1]
+	%reg324 = load int* %cast989		; <int> [#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*		; <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*		; <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*		; <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*		; <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*		; <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*		; <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*		; <int*> [#uses=1]
+	%reg356 = load int* %cast1061		; <int> [#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*		; <int*> [#uses=1]
+	%reg364 = load int* %cast1078		; <int> [#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*		; <int*> [#uses=1]
+	%reg370 = load int* %cast1090		; <int> [#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		; <ulong> [#uses=3]
+	%reg375 = add ulong %cast1097, %cast1097		; <ulong> [#uses=1]
+	%reg377 = load short** %yyssp		; <short*> [#uses=1]
+	%cast379 = cast short* %reg377 to ulong		; <ulong> [#uses=1]
+	%reg381 = sub ulong %cast379, %reg375		; <ulong> [#uses=1]
+	%cast1099 = cast ulong %reg381 to short*		; <short*> [#uses=1]
+	store short* %cast1099, short** %yyssp
+	%reg382 = load short** %yyssp		; <short*> [#uses=3]
+	%reg383 = load short* %reg382		; <short> [#uses=1]
+	%cast1103 = cast short %reg383 to int		; <int> [#uses=3]
+	%reg385 = mul ulong %cast1097, 8		; <ulong> [#uses=1]
+	%reg387 = load %YYSTYPE** %yyvsp		; <%YYSTYPE*> [#uses=1]
+	%cast389 = cast %YYSTYPE* %reg387 to ulong		; <ulong> [#uses=1]
+	%reg391 = sub ulong %cast389, %reg385		; <ulong> [#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		; <short*> [#uses=1]
+	%reg398 = load short* %reg1111		; <short> [#uses=2]
+	%cast1116 = cast short %reg398 to int		; <int> [#uses=1]
+	%cond1117 = setne int %cast1103, 0		; <bool> [#uses=1]
+	br bool %cond1117, label %bb104, label %bb98
+
+bb98:		; preds = %bb97
+	%cond1119 = setne int %cast1116, 0		; <bool> [#uses=1]
+	br bool %cond1119, label %bb104, label %bb99
+
+bb99:		; preds = %bb98
+	%reg1122 = getelementptr short* %reg382, long 1		; <short*> [#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		; <int> [#uses=1]
+	%cond1135 = setge int %reg407, 0		; <bool> [#uses=1]
+	br bool %cond1135, label %bb102, label %bb100
+
+bb100:		; preds = %bb99
+	%reg1139 = call int %yylex( )		; <int> [#uses=1]
+	store int %reg1139, int* %yychar
+	%reg409 = load int* %yychar		; <int> [#uses=1]
+	%cond1141 = setge int %reg409, 0		; <bool> [#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		; <int> [#uses=1]
+	%cond1146 = setne int %reg411, 0		; <bool> [#uses=1]
+	br bool %cond1146, label %bb4, label %UnifiedExitNode
+
+bb104:		; preds = %bb98, %bb97
+	%reg398-idxcast = cast short %reg398 to long		; <long> [#uses=2]
+	%reg1150 = getelementptr [12 x short]* %yygindex, long 0, long %reg398-idxcast		; <short*> [#uses=1]
+	%reg418 = load short* %reg1150		; <short> [#uses=1]
+	%cast1155 = cast short %reg418 to int		; <int> [#uses=2]
+	%cond1156 = seteq int %cast1155, 0		; <bool> [#uses=1]
+	br bool %cond1156, label %bb109, label %bb105
+
+bb105:		; preds = %bb104
+	%reg473 = add int %cast1155, %cast1103		; <int> [#uses=3]
+	%cond1158 = setlt int %reg473, 0		; <bool> [#uses=1]
+	br bool %cond1158, label %bb109, label %bb106
+
+bb106:		; preds = %bb105
+	%cond1161 = setgt int %reg473, 262		; <bool> [#uses=1]
+	br bool %cond1161, label %bb109, label %bb107
+
+bb107:		; preds = %bb106
+	%reg473-idxcast = cast int %reg473 to long		; <long> [#uses=2]
+	%reg1166 = getelementptr [263 x short]* %yycheck, long 0, long %reg473-idxcast		; <short*> [#uses=1]
+	%reg428 = load short* %reg1166		; <short> [#uses=1]
+	%cast1171 = cast short %reg428 to int		; <int> [#uses=1]
+	%cond1172 = setne int %cast1171, %cast1103		; <bool> [#uses=1]
+	br bool %cond1172, label %bb109, label %bb108
+
+bb108:		; preds = %bb107
+	%reg1175 = getelementptr [263 x short]* %yytable, long 0, long %reg473-idxcast		; <short*> [#uses=1]
+	%reg435 = load short* %reg1175		; <short> [#uses=1]
+	%cast1180 = cast short %reg435 to uint		; <uint> [#uses=1]
+	br label %bb110
+
+bb109:		; preds = %bb107, %bb106, %bb105, %bb104
+	%reg1183 = getelementptr [12 x short]* %yydgoto, long 0, long %reg398-idxcast		; <short*> [#uses=1]
+	%reg442 = load short* %reg1183		; <short> [#uses=1]
+	%cast1188 = cast short %reg442 to uint		; <uint> [#uses=1]
+	br label %bb110
+
+bb110:		; preds = %bb109, %bb108
+	%reg476 = phi uint [ %cast1188, %bb109 ], [ %cast1180, %bb108 ]		; <uint> [#uses=2]
+	%cast1189 = cast short* %reg382 to sbyte*		; <sbyte*> [#uses=1]
+	%reg444 = load short** %yysslim		; <short*> [#uses=1]
+	%cast1190 = cast short* %reg444 to sbyte*		; <sbyte*> [#uses=1]
+	%cond1191 = setlt sbyte* %cast1189, %cast1190		; <bool> [#uses=1]
+	br bool %cond1191, label %bb112, label %bb111
+
+bb111:		; preds = %bb110
+	%reg1193 = call int %yygrowstack( )		; <int> [#uses=1]
+	%cond1193 = setne int %reg1193, 0		; <bool> [#uses=1]
+	br bool %cond1193, label %bb113, label %bb112
+
+bb112:		; preds = %bb111, %bb110
+	%reg446 = load short** %yyssp		; <short*> [#uses=1]
+	%reg1196 = getelementptr short* %reg446, long 1		; <short*> [#uses=2]
+	store short* %reg1196, short** %yyssp
+	%cast1357 = cast uint %reg476 to short		; <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 ]		; <int> [#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()