bolt/deps/llvm-18.1.8/llvm/test/Analysis/ValueTracking/constant-ranges.ll

133 lines
3.2 KiB
LLVM
Raw Normal View History

2025-02-14 19:21:04 +01:00
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes=instsimplify < %s -S | FileCheck %s
define i1 @shl_C_X_ugt(i8 %x) {
; CHECK-LABEL: @shl_C_X_ugt(
; CHECK-NEXT: ret i1 false
;
%shl = shl i8 7, %x
%r = icmp ugt i8 %shl, 224
ret i1 %r
}
define i1 @shl_C_X_ugt2(i8 %x) {
; CHECK-LABEL: @shl_C_X_ugt2(
; CHECK-NEXT: ret i1 false
;
%shl = shl i8 5, %x
%r = icmp ugt i8 %shl, 192
ret i1 %r
}
define i1 @shl_C_X_ugt_fail(i8 %x) {
; CHECK-LABEL: @shl_C_X_ugt_fail(
; CHECK-NEXT: [[SHL:%.*]] = shl i8 1, [[X:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], 127
; CHECK-NEXT: ret i1 [[R]]
;
%shl = shl i8 1, %x
%r = icmp ugt i8 %shl, 127
ret i1 %r
}
define i1 @shl_C_X_ugt_fail2(i8 %x) {
; CHECK-LABEL: @shl_C_X_ugt_fail2(
; CHECK-NEXT: [[SHL:%.*]] = shl i8 3, [[X:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -66
; CHECK-NEXT: ret i1 [[R]]
;
%shl = shl i8 3, %x
%r = icmp ugt i8 %shl, 190
ret i1 %r
}
define i1 @shl_C_X_ugt_fail3(i8 %x) {
; CHECK-LABEL: @shl_C_X_ugt_fail3(
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -1, [[X:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -2
; CHECK-NEXT: ret i1 [[R]]
;
%shl = shl i8 -1, %x
%r = icmp ugt i8 %shl, 254
ret i1 %r
}
define i1 @shl_C_X_ugt_todo(i8 %x) {
; CHECK-LABEL: @shl_C_X_ugt_todo(
; CHECK-NEXT: [[SHL:%.*]] = shl i8 -127, [[X:%.*]]
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -116
; CHECK-NEXT: ret i1 [[R]]
;
%shl = shl i8 129, %x
%r = icmp ugt i8 %shl, 140
ret i1 %r
}
define i1 @shl_X_C_ugt(i8 %x) {
; CHECK-LABEL: @shl_X_C_ugt(
; CHECK-NEXT: ret i1 false
;
%shl = shl i8 %x, 6
%r = icmp ugt i8 %shl, 192
ret i1 %r
}
define i1 @shl_X_C_ugt_fail(i8 %x) {
; CHECK-LABEL: @shl_X_C_ugt_fail(
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 6
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -65
; CHECK-NEXT: ret i1 [[R]]
;
%shl = shl i8 %x, 6
%r = icmp ugt i8 %shl, 191
ret i1 %r
}
define i1 @shl_X_C_ugt_fail2(i8 %x) {
; CHECK-LABEL: @shl_X_C_ugt_fail2(
; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 5
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -64
; CHECK-NEXT: ret i1 [[R]]
;
%shl = shl i8 %x, 5
%r = icmp ugt i8 %shl, 192
ret i1 %r
}
define i1 @and_ugt(i8 %xx) {
; CHECK-LABEL: @and_ugt(
; CHECK-NEXT: ret i1 false
;
%x = mul i8 %xx, %xx ; thwart complexity-based canonicalization
%negx = sub i8 0, %x
%x_p2 = and i8 %negx, %x
%r = icmp ugt i8 %x_p2, 128
ret i1 %r
}
define i1 @and_ugt2(i8 %xx) {
; CHECK-LABEL: @and_ugt2(
; CHECK-NEXT: ret i1 false
;
%x = mul i8 %xx, %xx ; thwart complexity-based canonicalization
%negx = sub i8 0, %x
%x_p2 = and i8 %x, %negx
%r = icmp ugt i8 %x_p2, 128
ret i1 %r
}
define i1 @and_ugt_fail(i8 %xx) {
; CHECK-LABEL: @and_ugt_fail(
; CHECK-NEXT: [[X:%.*]] = mul i8 [[XX:%.*]], [[XX]]
; CHECK-NEXT: [[NEGX:%.*]] = sub i8 0, [[X]]
; CHECK-NEXT: [[X_P2:%.*]] = and i8 [[X]], [[NEGX]]
; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X_P2]], 127
; CHECK-NEXT: ret i1 [[R]]
;
%x = mul i8 %xx, %xx ; thwart complexity-based canonicalization
%negx = sub i8 0, %x
%x_p2 = and i8 %x, %negx
%r = icmp ugt i8 %x_p2, 127
ret i1 %r
}