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