1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instsimplify -S | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i32 @foo(i32 %x) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo( 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[O:%.*]] = and i32 %x, 1 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[N:%.*]] = add i32 [[O]], -1 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 [[N]] 9*9880d681SAndroid Build Coastguard Worker; 10*9880d681SAndroid Build Coastguard Worker %o = and i32 %x, 1 11*9880d681SAndroid Build Coastguard Worker %n = add i32 %o, -1 12*9880d681SAndroid Build Coastguard Worker %t = ashr i32 %n, 17 13*9880d681SAndroid Build Coastguard Worker ret i32 %t 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_eq_both_zero(i8 %a) { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_eq_both_zero( 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 19*9880d681SAndroid Build Coastguard Worker; 20*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 0, %a 21*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 22*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_eq_both_zero(i8 %a) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_eq_both_zero( 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 28*9880d681SAndroid Build Coastguard Worker; 29*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 0, %a 30*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 31*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_ashr_eq_both_zero(i8 %a) { 35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_ashr_eq_both_zero( 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 37*9880d681SAndroid Build Coastguard Worker; 38*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 0, %a 39*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 40*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_ne_both_zero(i8 %a) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_ne_both_zero( 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 46*9880d681SAndroid Build Coastguard Worker; 47*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 0, %a 48*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 49*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_ne_both_zero(i8 %a) { 53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_ne_both_zero( 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 55*9880d681SAndroid Build Coastguard Worker; 56*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 0, %a 57*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 58*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_lshr_ne_both_zero(i8 %a) { 62*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_lshr_ne_both_zero( 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 64*9880d681SAndroid Build Coastguard Worker; 65*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 0, %a 66*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 67*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_ashr_ne_both_zero(i8 %a) { 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_ashr_ne_both_zero( 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 73*9880d681SAndroid Build Coastguard Worker; 74*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 0, %a 75*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 76*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_eq_last_zero(i8 %a) { 80*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_eq_last_zero( 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 82*9880d681SAndroid Build Coastguard Worker; 83*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 128, %a 84*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 85*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_eq_last_zero(i8 %a) { 89*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_eq_last_zero( 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 91*9880d681SAndroid Build Coastguard Worker; 92*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -128, %a 93*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 94*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 95*9880d681SAndroid Build Coastguard Worker} 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_lshr_eq_both_zero(i8 %a) { 98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_lshr_eq_both_zero( 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 100*9880d681SAndroid Build Coastguard Worker; 101*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 0, %a 102*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 103*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_ne_last_zero(i8 %a) { 107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_ne_last_zero( 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 109*9880d681SAndroid Build Coastguard Worker; 110*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 128, %a 111*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 112*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 113*9880d681SAndroid Build Coastguard Worker} 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_ne_last_zero(i8 %a) { 116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_ne_last_zero( 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 118*9880d681SAndroid Build Coastguard Worker; 119*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -128, %a 120*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 121*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_lshr_eq_last_zero(i8 %a) { 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_lshr_eq_last_zero( 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 127*9880d681SAndroid Build Coastguard Worker; 128*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 128, %a 129*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 130*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_ashr_eq_last_zero(i8 %a) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_ashr_eq_last_zero( 135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 136*9880d681SAndroid Build Coastguard Worker; 137*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -128, %a 138*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 0 139*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_lshr_ne_last_zero(i8 %a) { 143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_lshr_ne_last_zero( 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 145*9880d681SAndroid Build Coastguard Worker; 146*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 128, %a 147*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 148*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_ashr_ne_last_zero(i8 %a) { 152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_ashr_ne_last_zero( 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 154*9880d681SAndroid Build Coastguard Worker; 155*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -128, %a 156*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 0 157*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 158*9880d681SAndroid Build Coastguard Worker} 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine i1 @lshr_eq_first_zero(i8 %a) { 161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @lshr_eq_first_zero( 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 163*9880d681SAndroid Build Coastguard Worker; 164*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 0, %a 165*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 2 166*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Workerdefine i1 @ashr_eq_first_zero(i8 %a) { 170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_eq_first_zero( 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 172*9880d681SAndroid Build Coastguard Worker; 173*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 0, %a 174*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 2 175*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 176*9880d681SAndroid Build Coastguard Worker} 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Workerdefine i1 @lshr_ne_first_zero(i8 %a) { 179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @lshr_ne_first_zero( 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 181*9880d681SAndroid Build Coastguard Worker; 182*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 0, %a 183*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 2 184*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdefine i1 @ashr_ne_first_zero(i8 %a) { 188*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_ne_first_zero( 189*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 190*9880d681SAndroid Build Coastguard Worker; 191*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 0, %a 192*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 2 193*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerdefine i1 @ashr_eq_both_minus1(i8 %a) { 197*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_eq_both_minus1( 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 199*9880d681SAndroid Build Coastguard Worker; 200*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -1, %a 201*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, -1 202*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine i1 @ashr_ne_both_minus1(i8 %a) { 206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_ne_both_minus1( 207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 208*9880d681SAndroid Build Coastguard Worker; 209*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -1, %a 210*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, -1 211*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 212*9880d681SAndroid Build Coastguard Worker} 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_eq_both_minus1(i8 %a) { 215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_eq_both_minus1( 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 217*9880d681SAndroid Build Coastguard Worker; 218*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -1, %a 219*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, -1 220*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_ne_both_minus1(i8 %a) { 224*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_ne_both_minus1( 225*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 226*9880d681SAndroid Build Coastguard Worker; 227*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -1, %a 228*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, -1 229*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_eq_opposite_msb(i8 %a) { 233*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_eq_opposite_msb( 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 235*9880d681SAndroid Build Coastguard Worker; 236*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -128, %a 237*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 1 238*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_eq_noexactlog(i8 %a) { 242*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_eq_noexactlog( 243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 244*9880d681SAndroid Build Coastguard Worker; 245*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -90, %a 246*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, -30 247*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_ne_opposite_msb(i8 %a) { 251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_ne_opposite_msb( 252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 253*9880d681SAndroid Build Coastguard Worker; 254*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -128, %a 255*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 1 256*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdefine i1 @ashr_eq_opposite_msb(i8 %a) { 260*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_eq_opposite_msb( 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 262*9880d681SAndroid Build Coastguard Worker; 263*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -128, %a 264*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 1 265*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine i1 @ashr_ne_opposite_msb(i8 %a) { 269*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_ne_opposite_msb( 270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 271*9880d681SAndroid Build Coastguard Worker; 272*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -128, %a 273*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 1 274*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_eq_shift_gt(i8 %a) { 278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_eq_shift_gt( 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 280*9880d681SAndroid Build Coastguard Worker; 281*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -2, %a 282*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, -8 283*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_ne_shift_gt(i8 %a) { 287*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_ne_shift_gt( 288*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 289*9880d681SAndroid Build Coastguard Worker; 290*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -2, %a 291*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, -8 292*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 293*9880d681SAndroid Build Coastguard Worker} 294*9880d681SAndroid Build Coastguard Worker 295*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_ashr_eq_shift_gt(i8 %a) { 296*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_ashr_eq_shift_gt( 297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 298*9880d681SAndroid Build Coastguard Worker; 299*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -2, %a 300*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, -8 301*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_ashr_ne_shift_gt(i8 %a) { 305*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_ashr_ne_shift_gt( 306*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 307*9880d681SAndroid Build Coastguard Worker; 308*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 -2, %a 309*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, -8 310*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 311*9880d681SAndroid Build Coastguard Worker} 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_eq_shift_gt(i8 %a) { 314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_eq_shift_gt( 315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 316*9880d681SAndroid Build Coastguard Worker; 317*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 2, %a 318*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 8 319*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 320*9880d681SAndroid Build Coastguard Worker} 321*9880d681SAndroid Build Coastguard Worker 322*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_ne_shift_gt(i8 %a) { 323*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_ne_shift_gt( 324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 325*9880d681SAndroid Build Coastguard Worker; 326*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 2, %a 327*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 8 328*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 329*9880d681SAndroid Build Coastguard Worker} 330*9880d681SAndroid Build Coastguard Worker 331*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_lshr_eq_shift_gt(i8 %a) { 332*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_lshr_eq_shift_gt( 333*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 334*9880d681SAndroid Build Coastguard Worker; 335*9880d681SAndroid Build Coastguard Worker %shr = lshr i8 2, %a 336*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 8 337*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 338*9880d681SAndroid Build Coastguard Worker} 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Workerdefine i1 @nonexact_lshr_ne_shift_gt(i8 %a) { 341*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nonexact_lshr_ne_shift_gt( 342*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 343*9880d681SAndroid Build Coastguard Worker; 344*9880d681SAndroid Build Coastguard Worker %shr = ashr i8 2, %a 345*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 8 346*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_ashr_ne_noexactlog(i8 %a) { 350*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_ne_noexactlog( 351*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 352*9880d681SAndroid Build Coastguard Worker; 353*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i8 -90, %a 354*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, -30 355*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_eq_noexactlog(i8 %a) { 359*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_eq_noexactlog( 360*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 361*9880d681SAndroid Build Coastguard Worker; 362*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 90, %a 363*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %shr, 30 364*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 365*9880d681SAndroid Build Coastguard Worker} 366*9880d681SAndroid Build Coastguard Worker 367*9880d681SAndroid Build Coastguard Workerdefine i1 @exact_lshr_ne_noexactlog(i8 %a) { 368*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_ne_noexactlog( 369*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 370*9880d681SAndroid Build Coastguard Worker; 371*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i8 90, %a 372*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %shr, 30 373*9880d681SAndroid Build Coastguard Worker ret i1 %cmp 374*9880d681SAndroid Build Coastguard Worker} 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Workerdefine i32 @exact_lshr_lowbit(i32 %shiftval) { 377*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_lshr_lowbit( 378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 7 379*9880d681SAndroid Build Coastguard Worker; 380*9880d681SAndroid Build Coastguard Worker %shr = lshr exact i32 7, %shiftval 381*9880d681SAndroid Build Coastguard Worker ret i32 %shr 382*9880d681SAndroid Build Coastguard Worker} 383*9880d681SAndroid Build Coastguard Worker 384*9880d681SAndroid Build Coastguard Workerdefine i32 @exact_ashr_lowbit(i32 %shiftval) { 385*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @exact_ashr_lowbit( 386*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 7 387*9880d681SAndroid Build Coastguard Worker; 388*9880d681SAndroid Build Coastguard Worker %shr = ashr exact i32 7, %shiftval 389*9880d681SAndroid Build Coastguard Worker ret i32 %shr 390*9880d681SAndroid Build Coastguard Worker} 391*9880d681SAndroid Build Coastguard Worker 392*9880d681SAndroid Build Coastguard Workerdefine i32 @ashr_zero(i32 %shiftval) { 393*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_zero( 394*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 0 395*9880d681SAndroid Build Coastguard Worker; 396*9880d681SAndroid Build Coastguard Worker %shr = ashr i32 0, %shiftval 397*9880d681SAndroid Build Coastguard Worker ret i32 %shr 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Workerdefine i257 @ashr_minus1(i257 %shiftval) { 401*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_minus1( 402*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i257 -1 403*9880d681SAndroid Build Coastguard Worker; 404*9880d681SAndroid Build Coastguard Worker %shr = ashr i257 -1, %shiftval 405*9880d681SAndroid Build Coastguard Worker ret i257 %shr 406*9880d681SAndroid Build Coastguard Worker} 407*9880d681SAndroid Build Coastguard Worker 408*9880d681SAndroid Build Coastguard Workerdefine <2 x i4097> @ashr_zero_vec(<2 x i4097> %shiftval) { 409*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_zero_vec( 410*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i4097> zeroinitializer 411*9880d681SAndroid Build Coastguard Worker; 412*9880d681SAndroid Build Coastguard Worker %shr = ashr <2 x i4097> zeroinitializer, %shiftval 413*9880d681SAndroid Build Coastguard Worker ret <2 x i4097> %shr 414*9880d681SAndroid Build Coastguard Worker} 415*9880d681SAndroid Build Coastguard Worker 416*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ashr_minus1_vec(<2 x i64> %shiftval) { 417*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_minus1_vec( 418*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i64> <i64 -1, i64 -1> 419*9880d681SAndroid Build Coastguard Worker; 420*9880d681SAndroid Build Coastguard Worker %shr = ashr <2 x i64> <i64 -1, i64 -1>, %shiftval 421*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %shr 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Workerdefine <2 x i4> @ashr_zero_minus1_vec(<2 x i4> %shiftval) { 425*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ashr_zero_minus1_vec( 426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret <2 x i4> <i4 0, i4 -1> 427*9880d681SAndroid Build Coastguard Worker; 428*9880d681SAndroid Build Coastguard Worker %shr = ashr <2 x i4> <i4 0, i4 -1>, %shiftval 429*9880d681SAndroid Build Coastguard Worker ret <2 x i4> %shr 430*9880d681SAndroid Build Coastguard Worker} 431*9880d681SAndroid Build Coastguard Worker 432