[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Transforms / SimplifyCFG / implied-cond-matching-imm.ll
blob60ef813659821c72552f9d5a803d9d364b49ff14
1 ; RUN: opt %s -S -simplifycfg | FileCheck %s
3 ; cmp1 implies cmp2 is false
4 ; CHECK-LABEL: @test1
5 ; CHECK-NOT: call void @is(i1 true)
6 ; CHECK: call void @is(i1 false)
7 define void @test1(i32 %a) {
8   %cmp1 = icmp eq i32 %a, 0
9   br i1 %cmp1, label %taken, label %untaken
11 taken:
12   %cmp2 = icmp eq i32 %a, 1
13   br i1 %cmp2, label %istrue, label %isfalse
15 istrue:
16   call void @is(i1 true)
17   ret void
19 isfalse:
20   call void @is(i1 false)
21   ret void
23 untaken:
24   ret void
27 ; cmp1 implies cmp2 is false
28 ; CHECK-LABEL: @test2
29 ; CHECK-NOT: call void @is(i1 true)
30 ; CHECK: call void @is(i1 false)
31 define void @test2(i32 %a) {
32   %cmp1 = icmp ugt i32 %a, 5
33   br i1 %cmp1, label %untaken, label %taken
35 taken:
36   %cmp2 = icmp ugt i32 %a, 6
37   br i1 %cmp2, label %istrue, label %isfalse
39 istrue:
40   call void @is(i1 true)
41   ret void
43 isfalse:
44   call void @is(i1 false)
45   ret void
47 untaken:
48   ret void
51 ; cmp1 implies cmp2 is false
52 ; CHECK-LABEL: @test3
53 ; CHECK-NOT: call void @is(i1 true)
54 ; CHECK: call void @is(i1 false)
55 define void @test3(i32 %a) {
56   %cmp1 = icmp ugt i32 %a, 1
57   br i1 %cmp1, label %taken, label %untaken
59 taken:
60   %cmp2 = icmp eq i32 %a, 0
61   br i1 %cmp2, label %istrue, label %isfalse
63 istrue:
64   call void @is(i1 true)
65   ret void
67 isfalse:
68   call void @is(i1 false)
69   ret void
71 untaken:
72   ret void
75 ; cmp1 implies cmp2 is true
76 ; CHECK-LABEL: @test4
77 ; CHECK: call void @is(i1 true)
78 ; CHECK-NOT: call void @is(i1 false)
79 define void @test4(i32 %a) {
80   %cmp1 = icmp sgt i32 %a, 1
81   br i1 %cmp1, label %taken, label %untaken
83 taken:
84   %cmp2 = icmp ugt i32 %a, 0
85   br i1 %cmp2, label %istrue, label %isfalse
87 istrue:
88   call void @is(i1 true)
89   ret void
91 isfalse:
92   call void @is(i1 false)
93   ret void
95 untaken:
96   ret void
99 ; cmp1 implies cmp2 is true
100 ; CHECK-LABEL: @test5
101 ; CHECK: call void @is(i1 true)
102 ; CHECK-NOT: call void @is(i1 false)
103 define void @test5(i32 %a) {
104   %cmp1 = icmp sgt i32 %a, 5
105   br i1 %cmp1, label %taken, label %untaken
107 taken:
108   %cmp2 = icmp sgt i32 %a, -1
109   br i1 %cmp2, label %istrue, label %isfalse
111 istrue:
112   call void @is(i1 true)
113   ret void
115 isfalse:
116   call void @is(i1 false)
117   ret void
119 untaken:
120   ret void
123 declare void @is(i1)