xref: /llvm-project/llvm/test/Analysis/ValueTracking/knownbits-abs.ll (revision 4fd3401e76b6a153c617a13aa399bf5095f206f9)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -passes=instsimplify -S < %s | FileCheck %s
3declare i8 @llvm.abs.i8(i8, i1)
4
5define i1 @abs_low_bit_set(i8 %x) {
6; CHECK-LABEL: @abs_low_bit_set(
7; CHECK-NEXT:    ret i1 false
8;
9  %xx = and i8 %x, 240
10  %v = or i8 %xx, 4
11  %abs = call i8 @llvm.abs.i8(i8 %v, i1 true)
12  %and = and i8 %abs, 4
13  %r = icmp eq i8 %and, 0
14  ret i1 %r
15}
16
17define i1 @abs_unknown_low_bit_set_fail(i8 %x) {
18; CHECK-LABEL: @abs_unknown_low_bit_set_fail(
19; CHECK-NEXT:    [[V:%.*]] = or i8 [[X:%.*]], 2
20; CHECK-NEXT:    [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[V]], i1 true)
21; CHECK-NEXT:    [[AND:%.*]] = and i8 [[ABS]], 2
22; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[AND]], 0
23; CHECK-NEXT:    ret i1 [[R]]
24;
25  %v = or i8 %x, 2
26  %abs = call i8 @llvm.abs.i8(i8 %v, i1 true)
27  %and = and i8 %abs, 2
28  %r = icmp eq i8 %and, 0
29  ret i1 %r
30}
31
32define i1 @abs_negative(i8 %x) {
33; CHECK-LABEL: @abs_negative(
34; CHECK-NEXT:    ret i1 false
35;
36  %xx = and i8 %x, 240
37  %v = or i8 %xx, 132
38  %abs = call i8 @llvm.abs.i8(i8 %v, i1 true)
39  %and = and i8 %abs, 8
40  %r = icmp eq i8 %and, 0
41  ret i1 %r
42}
43
44define i1 @abs_negative2(i8 %x) {
45; CHECK-LABEL: @abs_negative2(
46; CHECK-NEXT:    ret i1 false
47;
48  %v = or i8 %x, 131
49  %abs = call i8 @llvm.abs.i8(i8 %v, i1 true)
50  %and = and i8 %abs, 2
51  %r = icmp eq i8 %and, 2
52  ret i1 %r
53}
54
55define i1 @abs_negative_no_carry_info_fail(i8 %x) {
56; CHECK-LABEL: @abs_negative_no_carry_info_fail(
57; CHECK-NEXT:    [[V:%.*]] = or i8 [[X:%.*]], -126
58; CHECK-NEXT:    [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[V]], i1 true)
59; CHECK-NEXT:    [[AND:%.*]] = and i8 [[ABS]], 2
60; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 [[AND]], 0
61; CHECK-NEXT:    ret i1 [[R]]
62;
63  %v = or i8 %x, 130
64  %abs = call i8 @llvm.abs.i8(i8 %v, i1 true)
65  %and = and i8 %abs, 2
66  %r = icmp eq i8 %and, 0
67  ret i1 %r
68}
69