1261e5d09SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2261e5d09SNoah Goldstein; RUN: opt -passes=instsimplify -S < %s | FileCheck %s 3261e5d09SNoah Goldsteindeclare i8 @llvm.abs.i8(i8, i1) 4261e5d09SNoah Goldstein 5261e5d09SNoah Goldsteindefine i1 @abs_low_bit_set(i8 %x) { 6261e5d09SNoah Goldstein; CHECK-LABEL: @abs_low_bit_set( 7*4fd3401eSNoah Goldstein; CHECK-NEXT: ret i1 false 8261e5d09SNoah Goldstein; 9261e5d09SNoah Goldstein %xx = and i8 %x, 240 10261e5d09SNoah Goldstein %v = or i8 %xx, 4 11261e5d09SNoah Goldstein %abs = call i8 @llvm.abs.i8(i8 %v, i1 true) 12261e5d09SNoah Goldstein %and = and i8 %abs, 4 13261e5d09SNoah Goldstein %r = icmp eq i8 %and, 0 14261e5d09SNoah Goldstein ret i1 %r 15261e5d09SNoah Goldstein} 16261e5d09SNoah Goldstein 17261e5d09SNoah Goldsteindefine i1 @abs_unknown_low_bit_set_fail(i8 %x) { 18261e5d09SNoah Goldstein; CHECK-LABEL: @abs_unknown_low_bit_set_fail( 19261e5d09SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = or i8 [[X:%.*]], 2 20261e5d09SNoah Goldstein; CHECK-NEXT: [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[V]], i1 true) 21261e5d09SNoah Goldstein; CHECK-NEXT: [[AND:%.*]] = and i8 [[ABS]], 2 22261e5d09SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AND]], 0 23261e5d09SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 24261e5d09SNoah Goldstein; 25261e5d09SNoah Goldstein %v = or i8 %x, 2 26261e5d09SNoah Goldstein %abs = call i8 @llvm.abs.i8(i8 %v, i1 true) 27261e5d09SNoah Goldstein %and = and i8 %abs, 2 28261e5d09SNoah Goldstein %r = icmp eq i8 %and, 0 29261e5d09SNoah Goldstein ret i1 %r 30261e5d09SNoah Goldstein} 31261e5d09SNoah Goldstein 32261e5d09SNoah Goldsteindefine i1 @abs_negative(i8 %x) { 33261e5d09SNoah Goldstein; CHECK-LABEL: @abs_negative( 34*4fd3401eSNoah Goldstein; CHECK-NEXT: ret i1 false 35261e5d09SNoah Goldstein; 36261e5d09SNoah Goldstein %xx = and i8 %x, 240 37261e5d09SNoah Goldstein %v = or i8 %xx, 132 38261e5d09SNoah Goldstein %abs = call i8 @llvm.abs.i8(i8 %v, i1 true) 39261e5d09SNoah Goldstein %and = and i8 %abs, 8 40261e5d09SNoah Goldstein %r = icmp eq i8 %and, 0 41261e5d09SNoah Goldstein ret i1 %r 42261e5d09SNoah Goldstein} 43261e5d09SNoah Goldstein 44261e5d09SNoah Goldsteindefine i1 @abs_negative2(i8 %x) { 45261e5d09SNoah Goldstein; CHECK-LABEL: @abs_negative2( 46*4fd3401eSNoah Goldstein; CHECK-NEXT: ret i1 false 47261e5d09SNoah Goldstein; 48261e5d09SNoah Goldstein %v = or i8 %x, 131 49261e5d09SNoah Goldstein %abs = call i8 @llvm.abs.i8(i8 %v, i1 true) 50261e5d09SNoah Goldstein %and = and i8 %abs, 2 51261e5d09SNoah Goldstein %r = icmp eq i8 %and, 2 52261e5d09SNoah Goldstein ret i1 %r 53261e5d09SNoah Goldstein} 54261e5d09SNoah Goldstein 55261e5d09SNoah Goldsteindefine i1 @abs_negative_no_carry_info_fail(i8 %x) { 56261e5d09SNoah Goldstein; CHECK-LABEL: @abs_negative_no_carry_info_fail( 57261e5d09SNoah Goldstein; CHECK-NEXT: [[V:%.*]] = or i8 [[X:%.*]], -126 58261e5d09SNoah Goldstein; CHECK-NEXT: [[ABS:%.*]] = call i8 @llvm.abs.i8(i8 [[V]], i1 true) 59261e5d09SNoah Goldstein; CHECK-NEXT: [[AND:%.*]] = and i8 [[ABS]], 2 60261e5d09SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp eq i8 [[AND]], 0 61261e5d09SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 62261e5d09SNoah Goldstein; 63261e5d09SNoah Goldstein %v = or i8 %x, 130 64261e5d09SNoah Goldstein %abs = call i8 @llvm.abs.i8(i8 %v, i1 true) 65261e5d09SNoah Goldstein %and = and i8 %abs, 2 66261e5d09SNoah Goldstein %r = icmp eq i8 %and, 0 67261e5d09SNoah Goldstein ret i1 %r 68261e5d09SNoah Goldstein} 69