Use the llvm-upgrade program to upgrade llvm assembly.
[oota-llvm.git] / test / CodeGen / Generic / 2006-03-01-dagcombineinfloop.ll
1 ; RUN: llvm-upgrade < %s | llvm-as | llc
2 ; Infinite loop in the dag combiner, reduced from 176.gcc.
3
4         %struct._obstack_chunk = type { sbyte*, %struct._obstack_chunk*, [4 x sbyte] }
5         %struct.anon = type { int }
6         %struct.lang_decl = type opaque
7         %struct.lang_type = type { int, [1 x %struct.tree_node*] }
8         %struct.obstack = type { int, %struct._obstack_chunk*, sbyte*, sbyte*, sbyte*, int, int, %struct._obstack_chunk* (...)*, void (...)*, sbyte*, ubyte }
9         %struct.rtx_def = type { ushort, ubyte, ubyte, [1 x %struct.anon] }
10         %struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, ubyte, ubyte, ubyte, ubyte }
11         %struct.tree_decl = type { [12 x sbyte], sbyte*, int, %struct.tree_node*, uint, ubyte, ubyte, ubyte, ubyte, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.anon, { %struct.rtx_def* }, %struct.tree_node*, %struct.lang_decl* }
12         %struct.tree_list = type { [12 x sbyte], %struct.tree_node*, %struct.tree_node* }
13         %struct.tree_node = type { %struct.tree_decl }
14         %struct.tree_type = type { [12 x sbyte], %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, uint, ubyte, ubyte, ubyte, ubyte, uint, %struct.tree_node*, %struct.tree_node*, %struct.anon, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.obstack*, %struct.lang_type* }
15 %void_type_node = external global %struct.tree_node*            ; <%struct.tree_node**> [#uses=1]
16 %char_type_node = external global %struct.tree_node*            ; <%struct.tree_node**> [#uses=1]
17 %short_integer_type_node = external global %struct.tree_node*           ; <%struct.tree_node**> [#uses=1]
18 %short_unsigned_type_node = external global %struct.tree_node*          ; <%struct.tree_node**> [#uses=1]
19 %float_type_node = external global %struct.tree_node*           ; <%struct.tree_node**> [#uses=1]
20 %signed_char_type_node = external global %struct.tree_node*             ; <%struct.tree_node**> [#uses=1]
21 %unsigned_char_type_node = external global %struct.tree_node*           ; <%struct.tree_node**> [#uses=1]
22
23 implementation   ; Functions:
24
25 fastcc int %self_promoting_args_p(%struct.tree_node* %parms) {
26 entry:
27         %tmp915 = seteq %struct.tree_node* %parms, null         ; <bool> [#uses=1]
28         br bool %tmp915, label %return, label %cond_true92.preheader
29
30 cond_true:              ; preds = %cond_true92
31         %tmp9.not = setne %struct.tree_node* %tmp2, %tmp7               ; <bool> [#uses=1]
32         %tmp14 = seteq %struct.tree_node* %tmp2, null           ; <bool> [#uses=1]
33         %bothcond = or bool %tmp9.not, %tmp14           ; <bool> [#uses=1]
34         br bool %bothcond, label %return, label %cond_next18
35
36 cond_next12:            ; preds = %cond_true92
37         %tmp14.old = seteq %struct.tree_node* %tmp2, null               ; <bool> [#uses=1]
38         br bool %tmp14.old, label %return, label %cond_next18
39
40 cond_next18:            ; preds = %cond_next12, %cond_true
41         %tmp20 = cast %struct.tree_node* %tmp2 to %struct.tree_type*            ; <%struct.tree_type*> [#uses=1]
42         %tmp21 = getelementptr %struct.tree_type* %tmp20, int 0, uint 17                ; <%struct.tree_node**> [#uses=1]
43         %tmp22 = load %struct.tree_node** %tmp21                ; <%struct.tree_node*> [#uses=6]
44         %tmp24 = seteq %struct.tree_node* %tmp22, %tmp23                ; <bool> [#uses=1]
45         br bool %tmp24, label %return, label %cond_next28
46
47 cond_next28:            ; preds = %cond_next18
48         %tmp30 = cast %struct.tree_node* %tmp2 to %struct.tree_common*          ; <%struct.tree_common*> [#uses=1]
49         %tmp = getelementptr %struct.tree_common* %tmp30, int 0, uint 2         ; <ubyte*> [#uses=1]
50         %tmp = cast ubyte* %tmp to uint*                ; <uint*> [#uses=1]
51         %tmp = load uint* %tmp          ; <uint> [#uses=1]
52         %tmp32 = cast uint %tmp to ubyte                ; <ubyte> [#uses=1]
53         %tmp33 = seteq ubyte %tmp32, 7          ; <bool> [#uses=1]
54         br bool %tmp33, label %cond_true34, label %cond_next84
55
56 cond_true34:            ; preds = %cond_next28
57         %tmp40 = seteq %struct.tree_node* %tmp22, %tmp39                ; <bool> [#uses=1]
58         %tmp49 = seteq %struct.tree_node* %tmp22, %tmp48                ; <bool> [#uses=1]
59         %bothcond6 = or bool %tmp40, %tmp49             ; <bool> [#uses=1]
60         %tmp58 = seteq %struct.tree_node* %tmp22, %tmp57                ; <bool> [#uses=1]
61         %bothcond7 = or bool %bothcond6, %tmp58         ; <bool> [#uses=1]
62         %tmp67 = seteq %struct.tree_node* %tmp22, %tmp66                ; <bool> [#uses=1]
63         %bothcond8 = or bool %bothcond7, %tmp67         ; <bool> [#uses=1]
64         %tmp76 = seteq %struct.tree_node* %tmp22, %tmp75                ; <bool> [#uses=1]
65         %bothcond9 = or bool %bothcond8, %tmp76         ; <bool> [#uses=2]
66         %brmerge = or bool %bothcond9, %tmp             ; <bool> [#uses=1]
67         %bothcond9 = cast bool %bothcond9 to int                ; <int> [#uses=1]
68         %.mux = xor int %bothcond9, 1           ; <int> [#uses=1]
69         br bool %brmerge, label %return, label %cond_true92
70
71 cond_next84:            ; preds = %cond_next28
72         br bool %tmp, label %return, label %cond_true92
73
74 cond_true92.preheader:          ; preds = %entry
75         %tmp7 = load %struct.tree_node** %void_type_node                ; <%struct.tree_node*> [#uses=1]
76         %tmp23 = load %struct.tree_node** %float_type_node              ; <%struct.tree_node*> [#uses=1]
77         %tmp39 = load %struct.tree_node** %char_type_node               ; <%struct.tree_node*> [#uses=1]
78         %tmp48 = load %struct.tree_node** %signed_char_type_node                ; <%struct.tree_node*> [#uses=1]
79         %tmp57 = load %struct.tree_node** %unsigned_char_type_node              ; <%struct.tree_node*> [#uses=1]
80         %tmp66 = load %struct.tree_node** %short_integer_type_node              ; <%struct.tree_node*> [#uses=1]
81         %tmp75 = load %struct.tree_node** %short_unsigned_type_node             ; <%struct.tree_node*> [#uses=1]
82         br label %cond_true92
83
84 cond_true92:            ; preds = %cond_true92.preheader, %cond_next84, %cond_true34
85         %t.0.0 = phi %struct.tree_node* [ %parms, %cond_true92.preheader ], [ %tmp6, %cond_true34 ], [ %tmp6, %cond_next84 ]            ; <%struct.tree_node*> [#uses=2]
86         %tmp = cast %struct.tree_node* %t.0.0 to %struct.tree_list*             ; <%struct.tree_list*> [#uses=1]
87         %tmp = getelementptr %struct.tree_list* %tmp, int 0, uint 2             ; <%struct.tree_node**> [#uses=1]
88         %tmp2 = load %struct.tree_node** %tmp           ; <%struct.tree_node*> [#uses=5]
89         %tmp4 = cast %struct.tree_node* %t.0.0 to %struct.tree_common*          ; <%struct.tree_common*> [#uses=1]
90         %tmp5 = getelementptr %struct.tree_common* %tmp4, int 0, uint 0         ; <%struct.tree_node**> [#uses=1]
91         %tmp6 = load %struct.tree_node** %tmp5          ; <%struct.tree_node*> [#uses=3]
92         %tmp = seteq %struct.tree_node* %tmp6, null             ; <bool> [#uses=3]
93         br bool %tmp, label %cond_true, label %cond_next12
94
95 return:         ; preds = %cond_next84, %cond_true34, %cond_next18, %cond_next12, %cond_true, %entry
96         %retval.0 = phi int [ 1, %entry ], [ 1, %cond_next84 ], [ %.mux, %cond_true34 ], [ 0, %cond_next18 ], [ 0, %cond_next12 ], [ 0, %cond_true ]            ; <int> [#uses=1]
97         ret int %retval.0
98 }