1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
; 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
}
|