1*bb59eb8eSJacob Young; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2*bb59eb8eSJacob Young; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3*bb59eb8eSJacob Young 4*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_smin(i32 %x) { 5*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_smin( 6*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 7*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[X]], -2147483648 8*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 9*bb59eb8eSJacob Young; 10*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 11*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -2147483648 12*bb59eb8eSJacob Young ret i1 %c 13*bb59eb8eSJacob Young} 14*bb59eb8eSJacob Young 15*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_sminp1(i32 %x) { 16*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_sminp1( 17*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 18*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], -2147483648 19*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[R]], -2147483647 20*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 21*bb59eb8eSJacob Young; 22*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 23*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -2147483647 24*bb59eb8eSJacob Young ret i1 %c 25*bb59eb8eSJacob Young} 26*bb59eb8eSJacob Young 27*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_smaxm1(i32 %x) { 28*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_smaxm1( 29*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 30*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], -2147483648 31*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[R]], 2147483646 32*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 33*bb59eb8eSJacob Young; 34*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 35*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 2147483646 36*bb59eb8eSJacob Young ret i1 %c 37*bb59eb8eSJacob Young} 38*bb59eb8eSJacob Young 39*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmin_smax(i32 %x) { 40*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmin_smax( 41*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 42*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[X]], -2147483648 43*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 44*bb59eb8eSJacob Young; 45*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 46*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 2147483647 47*bb59eb8eSJacob Young ret i1 %c 48*bb59eb8eSJacob Young} 49*bb59eb8eSJacob Young 50*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_smin(i32 %x) { 51*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_smin( 52*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 53*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], -2147483648 54*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 55*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 56*bb59eb8eSJacob Young; 57*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 58*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483648 59*bb59eb8eSJacob Young ret i1 %c 60*bb59eb8eSJacob Young} 61*bb59eb8eSJacob Young 62*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_sminp1(i32 %x) { 63*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_sminp1( 64*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 65*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], -2147483648 66*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 67*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 68*bb59eb8eSJacob Young; 69*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 70*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483647 71*bb59eb8eSJacob Young ret i1 %c 72*bb59eb8eSJacob Young} 73*bb59eb8eSJacob Young 74*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_sminp2(i32 %x) { 75*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_sminp2( 76*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 77*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], -2147483648 78*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[R]], -2147483646 79*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 80*bb59eb8eSJacob Young; 81*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 82*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483646 83*bb59eb8eSJacob Young ret i1 %c 84*bb59eb8eSJacob Young} 85*bb59eb8eSJacob Young 86*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmin_smax(i32 %x) { 87*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmin_smax( 88*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 89*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], -2147483648 90*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[R]], 2147483647 91*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 92*bb59eb8eSJacob Young; 93*bb59eb8eSJacob Young %r = srem i32 %x, -2147483648 94*bb59eb8eSJacob Young %c = icmp ult i32 %r, 2147483647 95*bb59eb8eSJacob Young ret i1 %c 96*bb59eb8eSJacob Young} 97*bb59eb8eSJacob Young 98*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_smin(i32 %x) { 99*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_smin( 100*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 101*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 102*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 103*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 104*bb59eb8eSJacob Young; 105*bb59eb8eSJacob Young %r = srem i32 %x, 5 106*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -2147483648 107*bb59eb8eSJacob Young ret i1 %c 108*bb59eb8eSJacob Young} 109*bb59eb8eSJacob Young 110*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_m5(i32 %x) { 111*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_m5( 112*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 113*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 114*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 115*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 116*bb59eb8eSJacob Young; 117*bb59eb8eSJacob Young %r = srem i32 %x, 5 118*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -5 119*bb59eb8eSJacob Young ret i1 %c 120*bb59eb8eSJacob Young} 121*bb59eb8eSJacob Young 122*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_m4(i32 %x) { 123*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_m4( 124*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 125*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 126*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[R]], -4 127*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 128*bb59eb8eSJacob Young; 129*bb59eb8eSJacob Young %r = srem i32 %x, 5 130*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -4 131*bb59eb8eSJacob Young ret i1 %c 132*bb59eb8eSJacob Young} 133*bb59eb8eSJacob Young 134*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_3(i32 %x) { 135*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_3( 136*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 137*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 138*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[R]], 3 139*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 140*bb59eb8eSJacob Young; 141*bb59eb8eSJacob Young %r = srem i32 %x, 5 142*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 3 143*bb59eb8eSJacob Young ret i1 %c 144*bb59eb8eSJacob Young} 145*bb59eb8eSJacob Young 146*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_4(i32 %x) { 147*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_4( 148*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 149*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 150*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 151*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 152*bb59eb8eSJacob Young; 153*bb59eb8eSJacob Young %r = srem i32 %x, 5 154*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 4 155*bb59eb8eSJacob Young ret i1 %c 156*bb59eb8eSJacob Young} 157*bb59eb8eSJacob Young 158*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_srem5_smaxm1(i32 %x) { 159*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_srem5_smaxm1( 160*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 161*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 162*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 163*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 164*bb59eb8eSJacob Young; 165*bb59eb8eSJacob Young %r = srem i32 %x, 5 166*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 2147483646 167*bb59eb8eSJacob Young ret i1 %c 168*bb59eb8eSJacob Young} 169*bb59eb8eSJacob Young 170*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_sminp1(i32 %x) { 171*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_sminp1( 172*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 173*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 174*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 175*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 176*bb59eb8eSJacob Young; 177*bb59eb8eSJacob Young %r = srem i32 %x, 5 178*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483647 179*bb59eb8eSJacob Young ret i1 %c 180*bb59eb8eSJacob Young} 181*bb59eb8eSJacob Young 182*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_m4(i32 %x) { 183*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_m4( 184*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 185*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 186*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 187*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 188*bb59eb8eSJacob Young; 189*bb59eb8eSJacob Young %r = srem i32 %x, 5 190*bb59eb8eSJacob Young %c = icmp ult i32 %r, -4 191*bb59eb8eSJacob Young ret i1 %c 192*bb59eb8eSJacob Young} 193*bb59eb8eSJacob Young 194*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_m3(i32 %x) { 195*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_m3( 196*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 197*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 198*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[R]], -3 199*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 200*bb59eb8eSJacob Young; 201*bb59eb8eSJacob Young %r = srem i32 %x, 5 202*bb59eb8eSJacob Young %c = icmp ult i32 %r, -3 203*bb59eb8eSJacob Young ret i1 %c 204*bb59eb8eSJacob Young} 205*bb59eb8eSJacob Young 206*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_4(i32 %x) { 207*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_4( 208*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 209*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 210*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[R]], 4 211*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 212*bb59eb8eSJacob Young; 213*bb59eb8eSJacob Young %r = srem i32 %x, 5 214*bb59eb8eSJacob Young %c = icmp ult i32 %r, 4 215*bb59eb8eSJacob Young ret i1 %c 216*bb59eb8eSJacob Young} 217*bb59eb8eSJacob Young 218*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_5(i32 %x) { 219*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_5( 220*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 221*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 222*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 223*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 224*bb59eb8eSJacob Young; 225*bb59eb8eSJacob Young %r = srem i32 %x, 5 226*bb59eb8eSJacob Young %c = icmp ult i32 %r, 5 227*bb59eb8eSJacob Young ret i1 %c 228*bb59eb8eSJacob Young} 229*bb59eb8eSJacob Young 230*bb59eb8eSJacob Youngdefine i1 @icmp_ult_srem5_smax(i32 %x) { 231*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_srem5_smax( 232*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 233*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 5 234*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 235*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 236*bb59eb8eSJacob Young; 237*bb59eb8eSJacob Young %r = srem i32 %x, 5 238*bb59eb8eSJacob Young %c = icmp ult i32 %r, 2147483647 239*bb59eb8eSJacob Young ret i1 %c 240*bb59eb8eSJacob Young} 241*bb59eb8eSJacob Young 242*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smin(i32 %x) { 243*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smin( 244*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 245*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 246*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 247*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 248*bb59eb8eSJacob Young; 249*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 250*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -2147483648 251*bb59eb8eSJacob Young ret i1 %c 252*bb59eb8eSJacob Young} 253*bb59eb8eSJacob Young 254*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_sminp1(i32 %x) { 255*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_sminp1( 256*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 257*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 258*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 259*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 260*bb59eb8eSJacob Young; 261*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 262*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -2147483647 263*bb59eb8eSJacob Young ret i1 %c 264*bb59eb8eSJacob Young} 265*bb59eb8eSJacob Young 266*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_sminp2(i32 %x) { 267*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_sminp2( 268*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 269*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 270*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[R]], -2147483646 271*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 272*bb59eb8eSJacob Young; 273*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 274*bb59eb8eSJacob Young %c = icmp ugt i32 %r, -2147483646 275*bb59eb8eSJacob Young ret i1 %c 276*bb59eb8eSJacob Young} 277*bb59eb8eSJacob Young 278*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smaxm2(i32 %x) { 279*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smaxm2( 280*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 281*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 282*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ugt i32 [[R]], 2147483645 283*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 284*bb59eb8eSJacob Young; 285*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 286*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 2147483645 287*bb59eb8eSJacob Young ret i1 %c 288*bb59eb8eSJacob Young} 289*bb59eb8eSJacob Young 290*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smaxm1(i32 %x) { 291*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smaxm1( 292*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 293*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 294*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 295*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 296*bb59eb8eSJacob Young; 297*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 298*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 2147483646 299*bb59eb8eSJacob Young ret i1 %c 300*bb59eb8eSJacob Young} 301*bb59eb8eSJacob Young 302*bb59eb8eSJacob Youngdefine i1 @icmp_ugt_sremsmax_smax(i32 %x) { 303*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ugt_sremsmax_smax( 304*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 305*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 306*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], 0 307*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 308*bb59eb8eSJacob Young; 309*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 310*bb59eb8eSJacob Young %c = icmp ugt i32 %r, 2147483647 311*bb59eb8eSJacob Young ret i1 %c 312*bb59eb8eSJacob Young} 313*bb59eb8eSJacob Young 314*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_smin(i32 %x) { 315*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_smin( 316*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 317*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 318*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 319*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 320*bb59eb8eSJacob Young; 321*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 322*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483648 323*bb59eb8eSJacob Young ret i1 %c 324*bb59eb8eSJacob Young} 325*bb59eb8eSJacob Young 326*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_sminp1(i32 %x) { 327*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_sminp1( 328*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 329*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 330*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 331*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 332*bb59eb8eSJacob Young; 333*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 334*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483647 335*bb59eb8eSJacob Young ret i1 %c 336*bb59eb8eSJacob Young} 337*bb59eb8eSJacob Young 338*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_sminp2(i32 %x) { 339*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_sminp2( 340*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 341*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 342*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 343*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 344*bb59eb8eSJacob Young; 345*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 346*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483646 347*bb59eb8eSJacob Young ret i1 %c 348*bb59eb8eSJacob Young} 349*bb59eb8eSJacob Young 350*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_sminp3(i32 %x) { 351*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_sminp3( 352*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 353*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 354*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[R]], -2147483645 355*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 356*bb59eb8eSJacob Young; 357*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 358*bb59eb8eSJacob Young %c = icmp ult i32 %r, -2147483645 359*bb59eb8eSJacob Young ret i1 %c 360*bb59eb8eSJacob Young} 361*bb59eb8eSJacob Young 362*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_smaxm1(i32 %x) { 363*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_smaxm1( 364*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 365*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 366*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp ult i32 [[R]], 2147483646 367*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 368*bb59eb8eSJacob Young; 369*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 370*bb59eb8eSJacob Young %c = icmp ult i32 %r, 2147483646 371*bb59eb8eSJacob Young ret i1 %c 372*bb59eb8eSJacob Young} 373*bb59eb8eSJacob Young 374*bb59eb8eSJacob Youngdefine i1 @icmp_ult_sremsmax_smax(i32 %x) { 375*bb59eb8eSJacob Young; CHECK-LABEL: define i1 @icmp_ult_sremsmax_smax( 376*bb59eb8eSJacob Young; CHECK-SAME: i32 [[X:%.*]]) { 377*bb59eb8eSJacob Young; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 2147483647 378*bb59eb8eSJacob Young; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], -1 379*bb59eb8eSJacob Young; CHECK-NEXT: ret i1 [[C]] 380*bb59eb8eSJacob Young; 381*bb59eb8eSJacob Young %r = srem i32 %x, 2147483647 382*bb59eb8eSJacob Young %c = icmp ult i32 %r, 2147483647 383*bb59eb8eSJacob Young ret i1 %c 384*bb59eb8eSJacob Young} 385