Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Analysis / ValueTracking / knownbits-abs.ll
blobfc09bab35dac3a6a2de37ab939fad4ea3e0d7478
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=instsimplify -S < %s | FileCheck %s
3 declare i8 @llvm.abs.i8(i8, i1)
5 define i1 @abs_low_bit_set(i8 %x) {
6 ; CHECK-LABEL: @abs_low_bit_set(
7 ; CHECK-NEXT:    ret i1 false
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
17 define 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]]
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
32 define i1 @abs_negative(i8 %x) {
33 ; CHECK-LABEL: @abs_negative(
34 ; CHECK-NEXT:    ret i1 false
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
44 define i1 @abs_negative2(i8 %x) {
45 ; CHECK-LABEL: @abs_negative2(
46 ; CHECK-NEXT:    ret i1 false
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
55 define 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]]
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