[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / NewGVN / condprop-xfail.ll
blob8224cf9ef8aa80af364162d3f1b8b7f71ae86e89
1 ; XFAIL: *
2 ; RUN: opt < %s -basic-aa -newgvn -S | FileCheck %s
4 @a = external global i32                ; <i32*> [#uses=7]
6 ;; NewGVN takes two passes to get this, because we prune predicateinfo
7 ; CHECK-LABEL: @test1(
8 define i32 @test1() nounwind {
9 entry:
10         %0 = load i32, i32* @a, align 4
11         %1 = icmp eq i32 %0, 4
12         br i1 %1, label %bb, label %bb1
14 bb:             ; preds = %entry
15         br label %bb8
17 bb1:            ; preds = %entry
18         %2 = load i32, i32* @a, align 4
19         %3 = icmp eq i32 %2, 5
20         br i1 %3, label %bb2, label %bb3
22 bb2:            ; preds = %bb1
23         br label %bb8
25 bb3:            ; preds = %bb1
26         %4 = load i32, i32* @a, align 4
27         %5 = icmp eq i32 %4, 4
28 ; CHECK: br i1 false, label %bb4, label %bb5
29         br i1 %5, label %bb4, label %bb5
31 bb4:            ; preds = %bb3
32         %6 = load i32, i32* @a, align 4
33         %7 = add i32 %6, 5
34         br label %bb8
36 bb5:            ; preds = %bb3
37         %8 = load i32, i32* @a, align 4
38         %9 = icmp eq i32 %8, 5
39 ; CHECK: br i1 false, label %bb6, label %bb7
40         br i1 %9, label %bb6, label %bb7
42 bb6:            ; preds = %bb5
43         %10 = load i32, i32* @a, align 4
44         %11 = add i32 %10, 4
45         br label %bb8
47 bb7:            ; preds = %bb5
48         %12 = load i32, i32* @a, align 4
49         br label %bb8
51 bb8:            ; preds = %bb7, %bb6, %bb4, %bb2, %bb
52         %.0 = phi i32 [ %12, %bb7 ], [ %11, %bb6 ], [ %7, %bb4 ], [ 4, %bb2 ], [ 5, %bb ]
53         br label %return
55 return:         ; preds = %bb8
56         ret i32 %.0
58 ;; NewGVN takes two passes to get test[6,8] and test[6,8]_fp's main part
59 ;; The icmp ne requires an equality table that inserts the inequalities for each
60 ;; discovered equality while processing.
61 ; CHECK-LABEL: @test6(
62 define i1 @test6(i32 %x, i32 %y) {
63   %cmp2 = icmp ne i32 %x, %y
64   %cmp = icmp eq i32 %x, %y
65   %cmp3 = icmp eq i32 %x, %y
66   br i1 %cmp, label %same, label %different
68 same:
69 ; CHECK: ret i1 false
70   ret i1 %cmp2
72 different:
73 ; CHECK: ret i1 false
74   ret i1 %cmp3
77 ; CHECK-LABEL: @test6_fp(
78 define i1 @test6_fp(float %x, float %y) {
79   %cmp2 = fcmp une float %x, %y
80   %cmp = fcmp oeq float %x, %y
81   %cmp3 = fcmp oeq float  %x, %y
82   br i1 %cmp, label %same, label %different
84 same:
85 ; CHECK: ret i1 false
86   ret i1 %cmp2
88 different:
89 ; CHECK: ret i1 false
90   ret i1 %cmp3
92 ; CHECK-LABEL: @test8(
93 define i1 @test8(i32 %x, i32 %y) {
94   %cmp2 = icmp sle i32 %x, %y
95   %cmp = icmp sgt i32 %x, %y
96   %cmp3 = icmp sgt i32 %x, %y
97   br i1 %cmp, label %same, label %different
99 same:
100 ; CHECK: ret i1 false
101   ret i1 %cmp2
103 different:
104 ; CHECK: ret i1 false
105   ret i1 %cmp3
108 ; CHECK-LABEL: @test8_fp(
109 define i1 @test8_fp(float %x, float %y) {
110   %cmp2 = fcmp ule float %x, %y
111   %cmp = fcmp ogt float %x, %y
112   %cmp3 = fcmp ogt float %x, %y
113   br i1 %cmp, label %same, label %different
115 same:
116 ; CHECK: ret i1 false
117   ret i1 %cmp2
119 different:
120 ; CHECK: ret i1 false
121   ret i1 %cmp3