blob: c41bbaa04eb7326495d67cf1f3175fc29f625d4f [file] [log] [blame]
Hal Finkel15aeaaf2014-09-07 19:21:07 +00001; RUN: opt < %s -instcombine -S | FileCheck %s
2target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
3target triple = "x86_64-unknown-linux-gnu"
4
5; Function Attrs: nounwind
6declare void @llvm.assume(i1) #1
7
8; Function Attrs: nounwind uwtable
9define i32 @test1(i32 %a) #0 {
10entry:
11; CHECK-LABEL: @test1
12; CHECK: call void @llvm.assume
13; CHECK: ret i32 5
14
15 %and = and i32 %a, 15
16 %cmp = icmp eq i32 %and, 5
17 tail call void @llvm.assume(i1 %cmp)
18
19 %and1 = and i32 %a, 7
20 ret i32 %and1
21}
22
23; Function Attrs: nounwind uwtable
24define i32 @test2(i32 %a) #0 {
25entry:
26; CHECK-LABEL: @test2
27; CHECK: call void @llvm.assume
28; CHECK: ret i32 2
29
30 %and = and i32 %a, 15
31 %nand = xor i32 %and, -1
32 %cmp = icmp eq i32 %nand, 4294967285
33 tail call void @llvm.assume(i1 %cmp)
34
35 %and1 = and i32 %a, 7
36 ret i32 %and1
37}
38
39; Function Attrs: nounwind uwtable
40define i32 @test3(i32 %a) #0 {
41entry:
42; CHECK-LABEL: @test3
43; CHECK: call void @llvm.assume
44; CHECK: ret i32 5
45
46 %v = or i32 %a, 4294967280
47 %cmp = icmp eq i32 %v, 4294967285
48 tail call void @llvm.assume(i1 %cmp)
49
50 %and1 = and i32 %a, 7
51 ret i32 %and1
52}
53
54; Function Attrs: nounwind uwtable
55define i32 @test4(i32 %a) #0 {
56entry:
57; CHECK-LABEL: @test4
58; CHECK: call void @llvm.assume
59; CHECK: ret i32 2
60
61 %v = or i32 %a, 4294967280
62 %nv = xor i32 %v, -1
63 %cmp = icmp eq i32 %nv, 5
64 tail call void @llvm.assume(i1 %cmp)
65
66 %and1 = and i32 %a, 7
67 ret i32 %and1
68}
69
70; Function Attrs: nounwind uwtable
71define i32 @test5(i32 %a) #0 {
72entry:
73; CHECK-LABEL: @test5
74; CHECK: call void @llvm.assume
75; CHECK: ret i32 4
76
77 %v = xor i32 %a, 1
78 %cmp = icmp eq i32 %v, 5
79 tail call void @llvm.assume(i1 %cmp)
80
81 %and1 = and i32 %a, 7
82 ret i32 %and1
83}
84
85; Function Attrs: nounwind uwtable
86define i32 @test6(i32 %a) #0 {
87entry:
88; CHECK-LABEL: @test6
89; CHECK: call void @llvm.assume
90; CHECK: ret i32 5
91
92 %v = shl i32 %a, 2
93 %cmp = icmp eq i32 %v, 20
94 tail call void @llvm.assume(i1 %cmp)
95
96 %and1 = and i32 %a, 63
97 ret i32 %and1
98}
99
100; Function Attrs: nounwind uwtable
101define i32 @test7(i32 %a) #0 {
102entry:
103; CHECK-LABEL: @test7
104; CHECK: call void @llvm.assume
105; CHECK: ret i32 20
106
107 %v = lshr i32 %a, 2
108 %cmp = icmp eq i32 %v, 5
109 tail call void @llvm.assume(i1 %cmp)
110
111 %and1 = and i32 %a, 252
112 ret i32 %and1
113}
114
115; Function Attrs: nounwind uwtable
116define i32 @test8(i32 %a) #0 {
117entry:
118; CHECK-LABEL: @test8
119; CHECK: call void @llvm.assume
120; CHECK: ret i32 20
121
122 %v = lshr i32 %a, 2
123 %cmp = icmp eq i32 %v, 5
124 tail call void @llvm.assume(i1 %cmp)
125
126 %and1 = and i32 %a, 252
127 ret i32 %and1
128}
129
130; Function Attrs: nounwind uwtable
131define i32 @test9(i32 %a) #0 {
132entry:
133; CHECK-LABEL: @test9
134; CHECK: call void @llvm.assume
135; CHECK: ret i32 0
136
137 %cmp = icmp sgt i32 %a, 5
138 tail call void @llvm.assume(i1 %cmp)
139
140 %and1 = and i32 %a, 2147483648
141 ret i32 %and1
142}
143
144; Function Attrs: nounwind uwtable
145define i32 @test10(i32 %a) #0 {
146entry:
147; CHECK-LABEL: @test10
148; CHECK: call void @llvm.assume
149; CHECK: ret i32 -2147483648
150
151 %cmp = icmp sle i32 %a, -2
152 tail call void @llvm.assume(i1 %cmp)
153
154 %and1 = and i32 %a, 2147483648
155 ret i32 %and1
156}
157
158; Function Attrs: nounwind uwtable
159define i32 @test11(i32 %a) #0 {
160entry:
161; CHECK-LABEL: @test11
162; CHECK: call void @llvm.assume
163; CHECK: ret i32 0
164
165 %cmp = icmp ule i32 %a, 256
166 tail call void @llvm.assume(i1 %cmp)
167
168 %and1 = and i32 %a, 3072
169 ret i32 %and1
170}
171
172attributes #0 = { nounwind uwtable }
173attributes #1 = { nounwind }
174