
Should cover most of the tests for GVN, GVNHoist, GVNSink, GlobalOpt, GlobalSplit, InstCombine, Reassociate, SROA and TailCallElim that had not been updated earlier.
175 lines
4.2 KiB
LLVM
175 lines
4.2 KiB
LLVM
; RUN: opt -passes=reassociate -disable-output < %s
|
|
|
|
|
|
; rdar://7507855
|
|
define fastcc i32 @test1() nounwind {
|
|
entry:
|
|
%cond = select i1 undef, i32 1, i32 -1 ; <i32> [#uses=2]
|
|
br label %for.cond
|
|
|
|
for.cond: ; preds = %for.body, %entry
|
|
%sub889 = sub i32 undef, undef ; <i32> [#uses=1]
|
|
%sub891 = sub i32 %sub889, %cond ; <i32> [#uses=0]
|
|
%add896 = sub i32 0, %cond ; <i32> [#uses=0]
|
|
ret i32 undef
|
|
}
|
|
|
|
; PR5981
|
|
define i32 @test2() nounwind ssp {
|
|
entry:
|
|
%0 = load i32, ptr undef, align 4
|
|
%1 = mul nsw i32 undef, %0
|
|
%2 = mul nsw i32 undef, %0
|
|
%3 = add nsw i32 undef, %1
|
|
%4 = add nsw i32 %3, %2
|
|
%5 = add nsw i32 %4, 4
|
|
%6 = shl i32 %0, 3
|
|
%7 = add nsw i32 %5, %6
|
|
br label %bb4.i9
|
|
|
|
bb4.i9:
|
|
%8 = add nsw i32 undef, %1
|
|
ret i32 0
|
|
}
|
|
|
|
|
|
define i32 @test3(i32 %Arg, i32 %x1, i32 %x2, i32 %x3) {
|
|
%A = mul i32 %x1, %Arg
|
|
%B = mul i32 %Arg, %x2 ;; Part of add operation being factored, also used by C
|
|
%C = mul i32 %x3, %B
|
|
|
|
%D = add i32 %A, %B
|
|
%E = add i32 %D, %C
|
|
ret i32 %E
|
|
}
|
|
|
|
|
|
; rdar://9096268
|
|
define void @x66303361ae3f602889d1b7d0f86e5455(ptr %arg) nounwind {
|
|
_:
|
|
br label %_33
|
|
|
|
_33: ; preds = %_33, %_
|
|
%tmp348 = load i8, ptr %arg, align 1
|
|
%tmp349 = lshr i8 %tmp348, 7
|
|
%tmp350 = or i8 %tmp349, 42
|
|
%tmp351 = add i8 %tmp350, -42
|
|
%tmp352 = zext i8 %tmp351 to i32
|
|
%tmp358 = add i32 %tmp352, -501049439
|
|
%tmp359 = mul i32 %tmp358, %tmp358
|
|
%tmp360 = mul i32 %tmp352, %tmp352
|
|
%tmp361 = sub i32 %tmp359, %tmp360
|
|
%tmp362 = mul i32 %tmp361, -920056735
|
|
%tmp363 = add i32 %tmp362, 501049439
|
|
%tmp364 = add i32 %tmp362, -2000262972
|
|
%tmp365 = sub i32 %tmp363, %tmp364
|
|
%tmp366 = sub i32 -501049439, %tmp362
|
|
%tmp367 = add i32 %tmp365, %tmp366
|
|
br label %_33
|
|
}
|
|
|
|
define void @test(i32 %a, i32 %b, i32 %c, i32 %d) {
|
|
%tmp.2 = xor i32 %a, %b ; <i32> [#uses=1]
|
|
%tmp.5 = xor i32 %c, %d ; <i32> [#uses=1]
|
|
%tmp.6 = xor i32 %tmp.2, %tmp.5 ; <i32> [#uses=1]
|
|
%tmp.9 = xor i32 %c, %a ; <i32> [#uses=1]
|
|
%tmp.12 = xor i32 %b, %d ; <i32> [#uses=1]
|
|
%tmp.13 = xor i32 %tmp.9, %tmp.12 ; <i32> [#uses=1]
|
|
%tmp.16 = xor i32 %tmp.6, %tmp.13 ; <i32> [#uses=0]
|
|
ret void
|
|
}
|
|
|
|
define i128 @foo() {
|
|
%mul = mul i128 0, 0
|
|
ret i128 %mul
|
|
}
|
|
|
|
define void @infinite_loop() {
|
|
entry:
|
|
br label %loop
|
|
loop:
|
|
%x = phi i32 [undef, %entry], [%x, %loop]
|
|
%dead = add i32 %x, 0
|
|
br label %loop
|
|
unreachable1:
|
|
%y1 = add i32 %y1, 0
|
|
%z1 = add i32 %y1, 0
|
|
ret void
|
|
unreachable2:
|
|
%y2 = add i32 %y2, 0
|
|
%z2 = add i32 %y2, %y2
|
|
ret void
|
|
unreachable3:
|
|
%y3 = add i32 %y3, %y3
|
|
%z3 = add i32 %y3, 0
|
|
ret void
|
|
unreachable4:
|
|
%y4 = add i32 %y4, %y4
|
|
%z4 = add i32 %y4, %y4
|
|
ret void
|
|
}
|
|
|
|
; PR13185
|
|
define void @pr13185(i16 %p) {
|
|
entry:
|
|
br label %for.cond
|
|
|
|
for.cond: ; preds = %for.cond, %entry
|
|
%x.0 = phi i32 [ undef, %entry ], [ %conv, %for.cond ]
|
|
%conv = zext i16 %p to i32
|
|
br label %for.cond
|
|
}
|
|
|
|
; PR12963
|
|
@a = external global i8
|
|
define i8 @f0(i8 %x) {
|
|
%t0 = load i8, ptr @a
|
|
%t1 = mul i8 %x, %x
|
|
%t2 = mul i8 %t1, %t1
|
|
%t3 = mul i8 %t2, %t2
|
|
%t4 = mul i8 %t3, %x
|
|
%t5 = mul i8 %t4, %t4
|
|
%t6 = mul i8 %t5, %x
|
|
%t7 = mul i8 %t6, %t0
|
|
ret i8 %t7
|
|
}
|
|
|
|
define i32 @sozefx_(i32 %x, i32 %y) {
|
|
%t0 = sub i32 %x, %x
|
|
%t1 = mul i32 %t0, %t0
|
|
%t2 = mul i32 %x, %t0
|
|
%t3 = mul i32 %t1, %t1
|
|
%t4 = add i32 %t2, %t3
|
|
%t5 = mul i32 %x, %y
|
|
%t6 = add i32 %t4, %t5
|
|
ret i32 %t6
|
|
}
|
|
|
|
define i32 @bar(i32 %arg, i32 %arg1, i32 %arg2) {
|
|
%tmp1 = mul i32 %arg1, 2
|
|
%tmp2 = mul i32 %tmp1, 3
|
|
%tmp3 = mul i32 %arg2, 2
|
|
%tmp4 = add i32 %tmp1, 1 ; dead code
|
|
%ret = add i32 %tmp2, %tmp3
|
|
ret i32 %ret
|
|
}
|
|
|
|
; PR14060
|
|
define i8 @hang(i8 %p, i8 %p0, i8 %p1, i8 %p2, i8 %p3, i8 %p4, i8 %p5, i8 %p6, i8 %p7, i8 %p8, i8 %p9) {
|
|
%tmp = zext i1 false to i8
|
|
%tmp16 = or i8 %tmp, 1
|
|
%tmp22 = or i8 %p7, %p0
|
|
%tmp23 = or i8 %tmp16, %tmp22
|
|
%tmp28 = or i8 %p9, %p1
|
|
%tmp31 = or i8 %tmp23, %p2
|
|
%tmp32 = or i8 %tmp31, %tmp28
|
|
%tmp38 = or i8 %p8, %p3
|
|
%tmp39 = or i8 %tmp16, %tmp38
|
|
%tmp43 = or i8 %tmp39, %p4
|
|
%tmp44 = or i8 %tmp43, 1
|
|
%tmp47 = or i8 %tmp32, %p5
|
|
%tmp50 = or i8 %tmp47, %p6
|
|
%tmp51 = or i8 %tmp44, %tmp50
|
|
ret i8 %tmp51
|
|
}
|