Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Generic / 2006-03-01-dagcombineinfloop.ll
blob8d406df1242dac2bf8d0d5ac3c0b49ef0d9ebce5
1 ; RUN: llc < %s
2 ; Infinite loop in the dag combiner, reduced from 176.gcc.      
3 %struct._obstack_chunk = type { ptr, ptr, [4 x i8] }
4         %struct.anon = type { i32 }
5         %struct.lang_decl = type opaque
6         %struct.lang_type = type { i32, [1 x ptr] }
7         %struct.obstack = type { i32, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, ptr, i8 }
8         %struct.rtx_def = type { i16, i8, i8, [1 x %struct.anon] }
9         %struct.tree_common = type { ptr, ptr, i8, i8, i8, i8 }
10         %struct.tree_decl = type { [12 x i8], ptr, i32, ptr, i32, i8, i8, i8, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, %struct.anon, { ptr }, ptr, ptr }
11         %struct.tree_list = type { [12 x i8], ptr, ptr }
12         %struct.tree_node = type { %struct.tree_decl }
13         %struct.tree_type = type { [12 x i8], ptr, ptr, ptr, i32, i8, i8, i8, i8, i32, ptr, ptr, %struct.anon, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
14 @void_type_node = external global ptr           ; <ptr> [#uses=1]
15 @char_type_node = external global ptr           ; <ptr> [#uses=1]
16 @short_integer_type_node = external global ptr          ; <ptr> [#uses=1]
17 @short_unsigned_type_node = external global ptr         ; <ptr> [#uses=1]
18 @float_type_node = external global ptr          ; <ptr> [#uses=1]
19 @signed_char_type_node = external global ptr            ; <ptr> [#uses=1]
20 @unsigned_char_type_node = external global ptr          ; <ptr> [#uses=1]
22 define fastcc i32 @self_promoting_args_p(ptr %parms) {
23 entry:
24         %tmp915 = icmp eq ptr %parms, null              ; <i1> [#uses=1]
25         br i1 %tmp915, label %return, label %cond_true92.preheader
27 cond_true:              ; preds = %cond_true92
28         %tmp9.not = icmp ne ptr %tmp2, %tmp7            ; <i1> [#uses=1]
29         %tmp14 = icmp eq ptr %tmp2, null                ; <i1> [#uses=1]
30         %bothcond = or i1 %tmp9.not, %tmp14             ; <i1> [#uses=1]
31         br i1 %bothcond, label %return, label %cond_next18
33 cond_next12:            ; preds = %cond_true92
34         %tmp14.old = icmp eq ptr %tmp2, null            ; <i1> [#uses=1]
35         br i1 %tmp14.old, label %return, label %cond_next18
37 cond_next18:            ; preds = %cond_next12, %cond_true
38         %tmp21 = getelementptr %struct.tree_type, ptr %tmp2, i32 0, i32 17              ; <ptr> [#uses=1]
39         %tmp22 = load ptr, ptr %tmp21           ; <ptr> [#uses=6]
40         %tmp24 = icmp eq ptr %tmp22, %tmp23             ; <i1> [#uses=1]
41         br i1 %tmp24, label %return, label %cond_next28
43 cond_next28:            ; preds = %cond_next18
44         %tmp = getelementptr %struct.tree_common, ptr %tmp2, i32 0, i32 2               ; <ptr> [#uses=1]
45         %tmp.upgrd.2 = load i32, ptr %tmp               ; <i32> [#uses=1]
46         %tmp32 = trunc i32 %tmp.upgrd.2 to i8           ; <i8> [#uses=1]
47         %tmp33 = icmp eq i8 %tmp32, 7           ; <i1> [#uses=1]
48         br i1 %tmp33, label %cond_true34, label %cond_next84
50 cond_true34:            ; preds = %cond_next28
51         %tmp40 = icmp eq ptr %tmp22, %tmp39             ; <i1> [#uses=1]
52         %tmp49 = icmp eq ptr %tmp22, %tmp48             ; <i1> [#uses=1]
53         %bothcond6 = or i1 %tmp40, %tmp49               ; <i1> [#uses=1]
54         %tmp58 = icmp eq ptr %tmp22, %tmp57             ; <i1> [#uses=1]
55         %bothcond7 = or i1 %bothcond6, %tmp58           ; <i1> [#uses=1]
56         %tmp67 = icmp eq ptr %tmp22, %tmp66             ; <i1> [#uses=1]
57         %bothcond8 = or i1 %bothcond7, %tmp67           ; <i1> [#uses=1]
58         %tmp76 = icmp eq ptr %tmp22, %tmp75             ; <i1> [#uses=1]
59         %bothcond9 = or i1 %bothcond8, %tmp76           ; <i1> [#uses=2]
60         %brmerge = or i1 %bothcond9, %tmp.upgrd.6               ; <i1> [#uses=1]
61         %bothcond9.upgrd.3 = zext i1 %bothcond9 to i32          ; <i32> [#uses=1]
62         %.mux = xor i32 %bothcond9.upgrd.3, 1           ; <i32> [#uses=1]
63         br i1 %brmerge, label %return, label %cond_true92
65 cond_next84:            ; preds = %cond_next28
66         br i1 %tmp.upgrd.6, label %return, label %cond_true92
68 cond_true92.preheader:          ; preds = %entry
69         %tmp7 = load ptr, ptr @void_type_node           ; <ptr> [#uses=1]
70         %tmp23 = load ptr, ptr @float_type_node         ; <ptr> [#uses=1]
71         %tmp39 = load ptr, ptr @char_type_node          ; <ptr> [#uses=1]
72         %tmp48 = load ptr, ptr @signed_char_type_node           ; <ptr> [#uses=1]
73         %tmp57 = load ptr, ptr @unsigned_char_type_node         ; <ptr> [#uses=1]
74         %tmp66 = load ptr, ptr @short_integer_type_node         ; <ptr> [#uses=1]
75         %tmp75 = load ptr, ptr @short_unsigned_type_node                ; <ptr> [#uses=1]
76         br label %cond_true92
78 cond_true92:            ; preds = %cond_true92.preheader, %cond_next84, %cond_true34
79         %t.0.0 = phi ptr [ %parms, %cond_true92.preheader ], [ %tmp6, %cond_true34 ], [ %tmp6, %cond_next84 ]           ; <ptr> [#uses=2]
80         %tmp.upgrd.5 = getelementptr %struct.tree_list, ptr %t.0.0, i32 0, i32 2                ; <ptr> [#uses=1]
81         %tmp2 = load ptr, ptr %tmp.upgrd.5              ; <ptr> [#uses=5]
82         %tmp5 = getelementptr %struct.tree_common, ptr %t.0.0, i32 0, i32 0             ; <ptr> [#uses=1]
83         %tmp6 = load ptr, ptr %tmp5             ; <ptr> [#uses=3]
84         %tmp.upgrd.6 = icmp eq ptr %tmp6, null          ; <i1> [#uses=3]
85         br i1 %tmp.upgrd.6, label %cond_true, label %cond_next12
87 return:         ; preds = %cond_next84, %cond_true34, %cond_next18, %cond_next12, %cond_true, %entry
88         %retval.0 = phi i32 [ 1, %entry ], [ 1, %cond_next84 ], [ %.mux, %cond_true34 ], [ 0, %cond_next18 ], [ 0, %cond_next12 ], [ 0, %cond_true ]            ; <i32> [#uses=1]
89         ret i32 %retval.0