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] 21 22define fastcc i32 @self_promoting_args_p(ptr %parms) { 23entry: 24 %tmp915 = icmp eq ptr %parms, null ; <i1> [#uses=1] 25 br i1 %tmp915, label %return, label %cond_true92.preheader 26 27cond_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 32 33cond_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 36 37cond_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 42 43cond_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 49 50cond_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 64 65cond_next84: ; preds = %cond_next28 66 br i1 %tmp.upgrd.6, label %return, label %cond_true92 67 68cond_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 77 78cond_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 86 87return: ; 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 90} 91