1; RUN: opt -reassociate -disable-output < %s 2 3 4; rdar://7507855 5define fastcc i32 @test1() nounwind { 6entry: 7 %cond = select i1 undef, i32 1, i32 -1 ; <i32> [#uses=2] 8 br label %for.cond 9 10for.cond: ; preds = %for.body, %entry 11 %sub889 = sub i32 undef, undef ; <i32> [#uses=1] 12 %sub891 = sub i32 %sub889, %cond ; <i32> [#uses=0] 13 %add896 = sub i32 0, %cond ; <i32> [#uses=0] 14 ret i32 undef 15} 16 17; PR5981 18define i32 @test2() nounwind ssp { 19entry: 20 %0 = load i32, i32* undef, align 4 21 %1 = mul nsw i32 undef, %0 22 %2 = mul nsw i32 undef, %0 23 %3 = add nsw i32 undef, %1 24 %4 = add nsw i32 %3, %2 25 %5 = add nsw i32 %4, 4 26 %6 = shl i32 %0, 3 27 %7 = add nsw i32 %5, %6 28 br label %bb4.i9 29 30bb4.i9: 31 %8 = add nsw i32 undef, %1 32 ret i32 0 33} 34 35 36define i32 @test3(i32 %Arg, i32 %x1, i32 %x2, i32 %x3) { 37 %A = mul i32 %x1, %Arg 38 %B = mul i32 %Arg, %x2 ;; Part of add operation being factored, also used by C 39 %C = mul i32 %x3, %B 40 41 %D = add i32 %A, %B 42 %E = add i32 %D, %C 43 ret i32 %E 44} 45 46 47; rdar://9096268 48define void @x66303361ae3f602889d1b7d0f86e5455(i8* %arg) nounwind { 49_: 50 br label %_33 51 52_33: ; preds = %_33, %_ 53 %tmp348 = load i8, i8* %arg, align 1 54 %tmp349 = lshr i8 %tmp348, 7 55 %tmp350 = or i8 %tmp349, 42 56 %tmp351 = add i8 %tmp350, -42 57 %tmp352 = zext i8 %tmp351 to i32 58 %tmp358 = add i32 %tmp352, -501049439 59 %tmp359 = mul i32 %tmp358, %tmp358 60 %tmp360 = mul i32 %tmp352, %tmp352 61 %tmp361 = sub i32 %tmp359, %tmp360 62 %tmp362 = mul i32 %tmp361, -920056735 63 %tmp363 = add i32 %tmp362, 501049439 64 %tmp364 = add i32 %tmp362, -2000262972 65 %tmp365 = sub i32 %tmp363, %tmp364 66 %tmp366 = sub i32 -501049439, %tmp362 67 %tmp367 = add i32 %tmp365, %tmp366 68 br label %_33 69} 70 71define void @test(i32 %a, i32 %b, i32 %c, i32 %d) { 72 %tmp.2 = xor i32 %a, %b ; <i32> [#uses=1] 73 %tmp.5 = xor i32 %c, %d ; <i32> [#uses=1] 74 %tmp.6 = xor i32 %tmp.2, %tmp.5 ; <i32> [#uses=1] 75 %tmp.9 = xor i32 %c, %a ; <i32> [#uses=1] 76 %tmp.12 = xor i32 %b, %d ; <i32> [#uses=1] 77 %tmp.13 = xor i32 %tmp.9, %tmp.12 ; <i32> [#uses=1] 78 %tmp.16 = xor i32 %tmp.6, %tmp.13 ; <i32> [#uses=0] 79 ret void 80} 81 82define i128 @foo() { 83 %mul = mul i128 0, 0 84 ret i128 %mul 85} 86 87define void @infinite_loop() { 88entry: 89 br label %loop 90loop: 91 %x = phi i32 [undef, %entry], [%x, %loop] 92 %dead = add i32 %x, 0 93 br label %loop 94unreachable1: 95 %y1 = add i32 %y1, 0 96 %z1 = add i32 %y1, 0 97 ret void 98unreachable2: 99 %y2 = add i32 %y2, 0 100 %z2 = add i32 %y2, %y2 101 ret void 102unreachable3: 103 %y3 = add i32 %y3, %y3 104 %z3 = add i32 %y3, 0 105 ret void 106unreachable4: 107 %y4 = add i32 %y4, %y4 108 %z4 = add i32 %y4, %y4 109 ret void 110} 111 112; PR13185 113define void @pr13185(i16 %p) { 114entry: 115 br label %for.cond 116 117for.cond: ; preds = %for.cond, %entry 118 %x.0 = phi i32 [ undef, %entry ], [ %conv, %for.cond ] 119 %conv = zext i16 %p to i32 120 br label %for.cond 121} 122 123; PR12963 124@a = external global i8 125define i8 @f0(i8 %x) { 126 %t0 = load i8, i8* @a 127 %t1 = mul i8 %x, %x 128 %t2 = mul i8 %t1, %t1 129 %t3 = mul i8 %t2, %t2 130 %t4 = mul i8 %t3, %x 131 %t5 = mul i8 %t4, %t4 132 %t6 = mul i8 %t5, %x 133 %t7 = mul i8 %t6, %t0 134 ret i8 %t7 135} 136 137define i32 @sozefx_(i32 %x, i32 %y) { 138 %t0 = sub i32 %x, %x 139 %t1 = mul i32 %t0, %t0 140 %t2 = mul i32 %x, %t0 141 %t3 = mul i32 %t1, %t1 142 %t4 = add i32 %t2, %t3 143 %t5 = mul i32 %x, %y 144 %t6 = add i32 %t4, %t5 145 ret i32 %t6 146} 147 148define i32 @bar(i32 %arg, i32 %arg1, i32 %arg2) { 149 %tmp1 = mul i32 %arg1, 2 150 %tmp2 = mul i32 %tmp1, 3 151 %tmp3 = mul i32 %arg2, 2 152 %tmp4 = add i32 %tmp1, 1 ; dead code 153 %ret = add i32 %tmp2, %tmp3 154 ret i32 %ret 155} 156 157; PR14060 158define i8 @hang(i8 %p, i8 %p0, i8 %p1, i8 %p2, i8 %p3, i8 %p4, i8 %p5, i8 %p6, i8 %p7, i8 %p8, i8 %p9) { 159 %tmp = zext i1 false to i8 160 %tmp16 = or i8 %tmp, 1 161 %tmp22 = or i8 %p7, %p0 162 %tmp23 = or i8 %tmp16, %tmp22 163 %tmp28 = or i8 %p9, %p1 164 %tmp31 = or i8 %tmp23, %p2 165 %tmp32 = or i8 %tmp31, %tmp28 166 %tmp38 = or i8 %p8, %p3 167 %tmp39 = or i8 %tmp16, %tmp38 168 %tmp43 = or i8 %tmp39, %p4 169 %tmp44 = or i8 %tmp43, 1 170 %tmp47 = or i8 %tmp32, %p5 171 %tmp50 = or i8 %tmp47, %p6 172 %tmp51 = or i8 %tmp44, %tmp50 173 ret i8 %tmp51 174} 175