[InstCombine] Preserve metadata when merging loads that are phi
[oota-llvm.git] / test / Transforms / SimplifyCFG / common-dest-folding.ll
1 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
2
3 ;CHECK: @foo
4 ;CHECK: and i32 %c1, %k
5 ;CHECK: icmp eq i32
6 ;CHECK: and i32 %c2, %k
7 ;CHECK: icmp eq i32
8 ;CHECK: or i1
9 ;CHECK: ret
10 define i32 @foo(i32 %k, i32 %c1, i32 %c2) {
11   %1 = and i32 %c1, %k
12   %2 = icmp eq i32 %1, 0
13   br i1 %2, label %8, label %3
14
15 ; <label>:3                                       ; preds = %0
16   %4 = and i32 %c2, %k
17   %5 = icmp eq i32 %4, 0
18   br i1 %5, label %8, label %6
19
20 ; <label>:6                                       ; preds = %3
21   %7 = tail call i32 (...) @bar() nounwind
22   br label %8
23
24 ; <label>:8                                       ; preds = %3, %0, %6
25   ret i32 undef
26 }
27
28 ;CHECK: @conduse
29 ;CHECK: shl i32 1, %c1
30 ;CHECK-NEXT: shl i32 1, %c2
31 ;CHECK-NEXT: and i32
32 ;CHECK-NEXT: icmp eq i32
33 ;CHECK-NEXT: and i32
34 ;CHECK-NEXT: icmp eq i32
35 ;CHECK: ret
36 define i32 @conduse(i32 %k, i32 %c1, i32 %c2) #0 {
37 bb:
38   %tmp = shl i32 1, %c1
39   %tmp4 = shl i32 1, %c2
40   %tmp1 = and i32 %tmp, %k
41   %tmp2 = icmp eq i32 %tmp1, 0
42   br i1 %tmp2, label %bb9, label %bb3
43
44 bb3:                                              ; preds = %bb
45   %tmp5 = and i32 %tmp4, %k
46   %tmp6 = icmp eq i32 %tmp5, 0
47   br i1 %tmp6, label %bb9, label %bb7
48
49 bb7:                                              ; preds = %bb3
50   %tmp8 = tail call i32 (...) @bar() #1
51   br label %bb9
52
53 bb9:                                              ; preds = %bb7, %bb3, %bb
54   ret i32 undef
55 }
56
57 declare i32 @bar(...)