1457308a4SNoah Goldstein; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2457308a4SNoah Goldstein; RUN: opt -passes=instsimplify < %s -S | FileCheck %s 3457308a4SNoah Goldstein 4457308a4SNoah Goldsteindefine i1 @shl_C_X_ugt(i8 %x) { 5457308a4SNoah Goldstein; CHECK-LABEL: @shl_C_X_ugt( 60f8b40a8SNoah Goldstein; CHECK-NEXT: ret i1 false 7457308a4SNoah Goldstein; 8457308a4SNoah Goldstein %shl = shl i8 7, %x 9457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 224 10457308a4SNoah Goldstein ret i1 %r 11457308a4SNoah Goldstein} 12457308a4SNoah Goldstein 13457308a4SNoah Goldsteindefine i1 @shl_C_X_ugt2(i8 %x) { 14457308a4SNoah Goldstein; CHECK-LABEL: @shl_C_X_ugt2( 150f8b40a8SNoah Goldstein; CHECK-NEXT: ret i1 false 16457308a4SNoah Goldstein; 17457308a4SNoah Goldstein %shl = shl i8 5, %x 18457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 192 19457308a4SNoah Goldstein ret i1 %r 20457308a4SNoah Goldstein} 21457308a4SNoah Goldstein 22457308a4SNoah Goldsteindefine i1 @shl_C_X_ugt_fail(i8 %x) { 23457308a4SNoah Goldstein; CHECK-LABEL: @shl_C_X_ugt_fail( 24457308a4SNoah Goldstein; CHECK-NEXT: [[SHL:%.*]] = shl i8 1, [[X:%.*]] 25457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], 127 26457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 27457308a4SNoah Goldstein; 28457308a4SNoah Goldstein %shl = shl i8 1, %x 29457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 127 30457308a4SNoah Goldstein ret i1 %r 31457308a4SNoah Goldstein} 32457308a4SNoah Goldstein 33457308a4SNoah Goldsteindefine i1 @shl_C_X_ugt_fail2(i8 %x) { 34457308a4SNoah Goldstein; CHECK-LABEL: @shl_C_X_ugt_fail2( 35457308a4SNoah Goldstein; CHECK-NEXT: [[SHL:%.*]] = shl i8 3, [[X:%.*]] 36457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -66 37457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 38457308a4SNoah Goldstein; 39457308a4SNoah Goldstein %shl = shl i8 3, %x 40457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 190 41457308a4SNoah Goldstein ret i1 %r 42457308a4SNoah Goldstein} 43457308a4SNoah Goldstein 44457308a4SNoah Goldsteindefine i1 @shl_C_X_ugt_fail3(i8 %x) { 45457308a4SNoah Goldstein; CHECK-LABEL: @shl_C_X_ugt_fail3( 46457308a4SNoah Goldstein; CHECK-NEXT: [[SHL:%.*]] = shl i8 -1, [[X:%.*]] 47457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -2 48457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 49457308a4SNoah Goldstein; 50457308a4SNoah Goldstein %shl = shl i8 -1, %x 51457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 254 52457308a4SNoah Goldstein ret i1 %r 53457308a4SNoah Goldstein} 54457308a4SNoah Goldstein 55457308a4SNoah Goldsteindefine i1 @shl_C_X_ugt_todo(i8 %x) { 56457308a4SNoah Goldstein; CHECK-LABEL: @shl_C_X_ugt_todo( 57457308a4SNoah Goldstein; CHECK-NEXT: [[SHL:%.*]] = shl i8 -127, [[X:%.*]] 58457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -116 59457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 60457308a4SNoah Goldstein; 61457308a4SNoah Goldstein %shl = shl i8 129, %x 62457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 140 63457308a4SNoah Goldstein ret i1 %r 64457308a4SNoah Goldstein} 65457308a4SNoah Goldstein 66457308a4SNoah Goldsteindefine i1 @shl_X_C_ugt(i8 %x) { 67457308a4SNoah Goldstein; CHECK-LABEL: @shl_X_C_ugt( 680f8b40a8SNoah Goldstein; CHECK-NEXT: ret i1 false 69457308a4SNoah Goldstein; 70457308a4SNoah Goldstein %shl = shl i8 %x, 6 71457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 192 72457308a4SNoah Goldstein ret i1 %r 73457308a4SNoah Goldstein} 74457308a4SNoah Goldstein 75457308a4SNoah Goldsteindefine i1 @shl_X_C_ugt_fail(i8 %x) { 76457308a4SNoah Goldstein; CHECK-LABEL: @shl_X_C_ugt_fail( 77457308a4SNoah Goldstein; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 6 78457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -65 79457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 80457308a4SNoah Goldstein; 81457308a4SNoah Goldstein %shl = shl i8 %x, 6 82457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 191 83457308a4SNoah Goldstein ret i1 %r 84457308a4SNoah Goldstein} 85457308a4SNoah Goldstein 86457308a4SNoah Goldsteindefine i1 @shl_X_C_ugt_fail2(i8 %x) { 87457308a4SNoah Goldstein; CHECK-LABEL: @shl_X_C_ugt_fail2( 88457308a4SNoah Goldstein; CHECK-NEXT: [[SHL:%.*]] = shl i8 [[X:%.*]], 5 89457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[SHL]], -64 90457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 91457308a4SNoah Goldstein; 92457308a4SNoah Goldstein %shl = shl i8 %x, 5 93457308a4SNoah Goldstein %r = icmp ugt i8 %shl, 192 94457308a4SNoah Goldstein ret i1 %r 95457308a4SNoah Goldstein} 96457308a4SNoah Goldstein 97457308a4SNoah Goldsteindefine i1 @and_ugt(i8 %xx) { 98457308a4SNoah Goldstein; CHECK-LABEL: @and_ugt( 9950ece4cbSNoah Goldstein; CHECK-NEXT: ret i1 false 100457308a4SNoah Goldstein; 101457308a4SNoah Goldstein %x = mul i8 %xx, %xx ; thwart complexity-based canonicalization 102457308a4SNoah Goldstein %negx = sub i8 0, %x 103457308a4SNoah Goldstein %x_p2 = and i8 %negx, %x 104457308a4SNoah Goldstein %r = icmp ugt i8 %x_p2, 128 105457308a4SNoah Goldstein ret i1 %r 106457308a4SNoah Goldstein} 107457308a4SNoah Goldstein 108457308a4SNoah Goldsteindefine i1 @and_ugt2(i8 %xx) { 109457308a4SNoah Goldstein; CHECK-LABEL: @and_ugt2( 11050ece4cbSNoah Goldstein; CHECK-NEXT: ret i1 false 111457308a4SNoah Goldstein; 112457308a4SNoah Goldstein %x = mul i8 %xx, %xx ; thwart complexity-based canonicalization 113457308a4SNoah Goldstein %negx = sub i8 0, %x 114457308a4SNoah Goldstein %x_p2 = and i8 %x, %negx 115457308a4SNoah Goldstein %r = icmp ugt i8 %x_p2, 128 116457308a4SNoah Goldstein ret i1 %r 117457308a4SNoah Goldstein} 118457308a4SNoah Goldstein 119457308a4SNoah Goldsteindefine i1 @and_ugt_fail(i8 %xx) { 120457308a4SNoah Goldstein; CHECK-LABEL: @and_ugt_fail( 121457308a4SNoah Goldstein; CHECK-NEXT: [[X:%.*]] = mul i8 [[XX:%.*]], [[XX]] 122457308a4SNoah Goldstein; CHECK-NEXT: [[NEGX:%.*]] = sub i8 0, [[X]] 123457308a4SNoah Goldstein; CHECK-NEXT: [[X_P2:%.*]] = and i8 [[X]], [[NEGX]] 124457308a4SNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[X_P2]], 127 125457308a4SNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 126457308a4SNoah Goldstein; 127457308a4SNoah Goldstein %x = mul i8 %xx, %xx ; thwart complexity-based canonicalization 128457308a4SNoah Goldstein %negx = sub i8 0, %x 129457308a4SNoah Goldstein %x_p2 = and i8 %x, %negx 130457308a4SNoah Goldstein %r = icmp ugt i8 %x_p2, 127 131457308a4SNoah Goldstein ret i1 %r 132457308a4SNoah Goldstein} 133aa7076fcSNoah Goldstein 134aa7076fcSNoah Goldsteindefine i1 @urem_okay(i8 %x) { 135aa7076fcSNoah Goldstein; CHECK-LABEL: @urem_okay( 136*9facaaddSNoah Goldstein; CHECK-NEXT: ret i1 true 137aa7076fcSNoah Goldstein; 138aa7076fcSNoah Goldstein %val = urem i8 34, %x 139aa7076fcSNoah Goldstein %r = icmp ule i8 %val, 35 140aa7076fcSNoah Goldstein ret i1 %r 141aa7076fcSNoah Goldstein} 142aa7076fcSNoah Goldstein 143aa7076fcSNoah Goldsteindefine i1 @urem_fail(i8 %x) { 144aa7076fcSNoah Goldstein; CHECK-LABEL: @urem_fail( 145aa7076fcSNoah Goldstein; CHECK-NEXT: [[VAL:%.*]] = urem i8 34, [[X:%.*]] 146aa7076fcSNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[VAL]], 33 147aa7076fcSNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 148aa7076fcSNoah Goldstein; 149aa7076fcSNoah Goldstein %val = urem i8 34, %x 150aa7076fcSNoah Goldstein %r = icmp ule i8 %val, 33 151aa7076fcSNoah Goldstein ret i1 %r 152aa7076fcSNoah Goldstein} 153aa7076fcSNoah Goldstein 154aa7076fcSNoah Goldsteindefine i1 @srem_posC_okay0(i8 %x) { 155aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_posC_okay0( 156*9facaaddSNoah Goldstein; CHECK-NEXT: ret i1 true 157aa7076fcSNoah Goldstein; 158aa7076fcSNoah Goldstein %val = srem i8 34, %x 159aa7076fcSNoah Goldstein %r = icmp sle i8 %val, 34 160aa7076fcSNoah Goldstein ret i1 %r 161aa7076fcSNoah Goldstein} 162aa7076fcSNoah Goldstein 163aa7076fcSNoah Goldsteindefine i1 @srem_posC_okay1(i8 %x) { 164aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_posC_okay1( 165*9facaaddSNoah Goldstein; CHECK-NEXT: ret i1 true 166aa7076fcSNoah Goldstein; 167aa7076fcSNoah Goldstein %val = srem i8 34, %x 168aa7076fcSNoah Goldstein %r = icmp sge i8 %val, -3 169aa7076fcSNoah Goldstein ret i1 %r 170aa7076fcSNoah Goldstein} 171aa7076fcSNoah Goldstein 172aa7076fcSNoah Goldsteindefine i1 @srem_negC_okay0(i8 %x) { 173aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_negC_okay0( 174*9facaaddSNoah Goldstein; CHECK-NEXT: ret i1 true 175aa7076fcSNoah Goldstein; 176aa7076fcSNoah Goldstein %val = srem i8 -34, %x 177aa7076fcSNoah Goldstein %r = icmp sle i8 %val, 0 178aa7076fcSNoah Goldstein ret i1 %r 179aa7076fcSNoah Goldstein} 180aa7076fcSNoah Goldstein 181aa7076fcSNoah Goldsteindefine i1 @srem_negC_okay1(i8 %x) { 182aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_negC_okay1( 183*9facaaddSNoah Goldstein; CHECK-NEXT: ret i1 true 184aa7076fcSNoah Goldstein; 185aa7076fcSNoah Goldstein %val = srem i8 -34, %x 186aa7076fcSNoah Goldstein %r = icmp sge i8 %val, -34 187aa7076fcSNoah Goldstein ret i1 %r 188aa7076fcSNoah Goldstein} 189aa7076fcSNoah Goldstein 190aa7076fcSNoah Goldsteindefine i1 @srem_posC_fail0(i8 %x) { 191aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_posC_fail0( 192aa7076fcSNoah Goldstein; CHECK-NEXT: [[VAL:%.*]] = srem i8 34, [[X:%.*]] 193aa7076fcSNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp sle i8 [[VAL]], 32 194aa7076fcSNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 195aa7076fcSNoah Goldstein; 196aa7076fcSNoah Goldstein %val = srem i8 34, %x 197aa7076fcSNoah Goldstein %r = icmp sle i8 %val, 32 198aa7076fcSNoah Goldstein ret i1 %r 199aa7076fcSNoah Goldstein} 200aa7076fcSNoah Goldstein 201aa7076fcSNoah Goldsteindefine i1 @srem_posC_fail1(i8 %x) { 202aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_posC_fail1( 203aa7076fcSNoah Goldstein; CHECK-NEXT: [[VAL:%.*]] = srem i8 34, [[X:%.*]] 204aa7076fcSNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[VAL]], 1 205aa7076fcSNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 206aa7076fcSNoah Goldstein; 207aa7076fcSNoah Goldstein %val = srem i8 34, %x 208aa7076fcSNoah Goldstein %r = icmp sge i8 %val, 1 209aa7076fcSNoah Goldstein ret i1 %r 210aa7076fcSNoah Goldstein} 211aa7076fcSNoah Goldstein 212aa7076fcSNoah Goldsteindefine i1 @srem_negC_fail0(i8 %x) { 213aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_negC_fail0( 214aa7076fcSNoah Goldstein; CHECK-NEXT: [[VAL:%.*]] = srem i8 -34, [[X:%.*]] 215aa7076fcSNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp sle i8 [[VAL]], -1 216aa7076fcSNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 217aa7076fcSNoah Goldstein; 218aa7076fcSNoah Goldstein %val = srem i8 -34, %x 219aa7076fcSNoah Goldstein %r = icmp sle i8 %val, -1 220aa7076fcSNoah Goldstein ret i1 %r 221aa7076fcSNoah Goldstein} 222aa7076fcSNoah Goldstein 223aa7076fcSNoah Goldsteindefine i1 @srem_negC_fail1(i8 %x) { 224aa7076fcSNoah Goldstein; CHECK-LABEL: @srem_negC_fail1( 225aa7076fcSNoah Goldstein; CHECK-NEXT: [[VAL:%.*]] = srem i8 -34, [[X:%.*]] 226aa7076fcSNoah Goldstein; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[VAL]], -33 227aa7076fcSNoah Goldstein; CHECK-NEXT: ret i1 [[R]] 228aa7076fcSNoah Goldstein; 229aa7076fcSNoah Goldstein %val = srem i8 -34, %x 230aa7076fcSNoah Goldstein %r = icmp sge i8 %val, -33 231aa7076fcSNoah Goldstein ret i1 %r 232aa7076fcSNoah Goldstein} 233