blob: 1e53cc5bc7faa4adfe1a675c83848959c3bb8fe0 [file] [log] [blame]
Philip Reames2d858742015-11-10 18:46:14 +00001; RUN: opt -S -instsimplify < %s | FileCheck %s
2
3define i1 @test(i32 %a) {
4; CHECK-LABEL: @test
5; CHECK: ret i1 false
6 %rhs = add i32 %a, -1
7 %and = and i32 %a, %rhs
8 %res = icmp eq i32 %and, 1
9 ret i1 %res
10}
11
12define i1 @test2(i32 %a) {
13; CHECK-LABEL: @test2
14; CHECK: ret i1 false
15 %rhs = add i32 %a, 1
16 %and = and i32 %a, %rhs
17 %res = icmp eq i32 %and, 1
18 ret i1 %res
19}
20
21define i1 @test3(i32 %a) {
22; CHECK-LABEL: @test3
23; CHECK: ret i1 false
24 %rhs = add i32 %a, 7
25 %and = and i32 %a, %rhs
26 %res = icmp eq i32 %and, 1
27 ret i1 %res
28}
29
30@B = external global i32
31declare void @llvm.assume(i1)
32
33; Known bits without a constant
34define i1 @test4(i32 %a) {
35; CHECK-LABEL: @test4
36; CHECK: ret i1 false
37 %b = load i32, i32* @B
38 %b.and = and i32 %b, 1
39 %b.cnd = icmp eq i32 %b.and, 1
40 call void @llvm.assume(i1 %b.cnd)
41
42 %rhs = add i32 %a, %b
43 %and = and i32 %a, %rhs
44 %res = icmp eq i32 %and, 1
45 ret i1 %res
46}
47
48; Negative test - even number
49define i1 @test5(i32 %a) {
50; CHECK-LABEL: @test5
51; CHECK: ret i1 %res
52 %rhs = add i32 %a, 2
53 %and = and i32 %a, %rhs
54 %res = icmp eq i32 %and, 1
55 ret i1 %res
56}
57
58define i1 @test6(i32 %a) {
59; CHECK-LABEL: @test6
60; CHECK: ret i1 false
61 %lhs = add i32 %a, -1
62 %and = and i32 %lhs, %a
63 %res = icmp eq i32 %and, 1
64 ret i1 %res
65}