1*65002689SYingwei Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*65002689SYingwei Zheng; RUN: llc -mtriple=riscv64 -mattr=+c,+m -verify-machineinstrs < %s \ 3*65002689SYingwei Zheng; RUN: | FileCheck -check-prefixes=CHECK,NOSFB %s 4*65002689SYingwei Zheng; RUN: llc -mtriple=riscv64 -mcpu=sifive-u74 -verify-machineinstrs < %s \ 5*65002689SYingwei Zheng; RUN: | FileCheck -check-prefixes=CHECK,SFB %s 6*65002689SYingwei Zheng 7*65002689SYingwei Zhengdefine signext i32 @sdiv2_32(i32 signext %0) { 8*65002689SYingwei Zheng; NOSFB-LABEL: sdiv2_32: 9*65002689SYingwei Zheng; NOSFB: # %bb.0: 10*65002689SYingwei Zheng; NOSFB-NEXT: srliw a1, a0, 31 11*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 12*65002689SYingwei Zheng; NOSFB-NEXT: sraiw a0, a0, 1 13*65002689SYingwei Zheng; NOSFB-NEXT: ret 14*65002689SYingwei Zheng; 15*65002689SYingwei Zheng; SFB-LABEL: sdiv2_32: 16*65002689SYingwei Zheng; SFB: # %bb.0: 17*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB0_2 18*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 19*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 1 20*65002689SYingwei Zheng; SFB-NEXT: .LBB0_2: 21*65002689SYingwei Zheng; SFB-NEXT: sraiw a0, a0, 1 22*65002689SYingwei Zheng; SFB-NEXT: ret 23*65002689SYingwei Zheng %res = sdiv i32 %0, 2 24*65002689SYingwei Zheng ret i32 %res 25*65002689SYingwei Zheng} 26*65002689SYingwei Zheng 27*65002689SYingwei Zhengdefine signext i32 @sdivneg2_32(i32 signext %0) { 28*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg2_32: 29*65002689SYingwei Zheng; NOSFB: # %bb.0: 30*65002689SYingwei Zheng; NOSFB-NEXT: srliw a1, a0, 31 31*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 32*65002689SYingwei Zheng; NOSFB-NEXT: sraiw a0, a0, 1 33*65002689SYingwei Zheng; NOSFB-NEXT: neg a0, a0 34*65002689SYingwei Zheng; NOSFB-NEXT: ret 35*65002689SYingwei Zheng; 36*65002689SYingwei Zheng; SFB-LABEL: sdivneg2_32: 37*65002689SYingwei Zheng; SFB: # %bb.0: 38*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB1_2 39*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 40*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 1 41*65002689SYingwei Zheng; SFB-NEXT: .LBB1_2: 42*65002689SYingwei Zheng; SFB-NEXT: sraiw a0, a0, 1 43*65002689SYingwei Zheng; SFB-NEXT: neg a0, a0 44*65002689SYingwei Zheng; SFB-NEXT: ret 45*65002689SYingwei Zheng %res = sdiv i32 %0, -2 46*65002689SYingwei Zheng ret i32 %res 47*65002689SYingwei Zheng} 48*65002689SYingwei Zheng 49*65002689SYingwei Zhengdefine i64 @sdiv2_64(i64 %0) { 50*65002689SYingwei Zheng; NOSFB-LABEL: sdiv2_64: 51*65002689SYingwei Zheng; NOSFB: # %bb.0: 52*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a0, 63 53*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 54*65002689SYingwei Zheng; NOSFB-NEXT: srai a0, a0, 1 55*65002689SYingwei Zheng; NOSFB-NEXT: ret 56*65002689SYingwei Zheng; 57*65002689SYingwei Zheng; SFB-LABEL: sdiv2_64: 58*65002689SYingwei Zheng; SFB: # %bb.0: 59*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB2_2 60*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 61*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 1 62*65002689SYingwei Zheng; SFB-NEXT: .LBB2_2: 63*65002689SYingwei Zheng; SFB-NEXT: srai a0, a0, 1 64*65002689SYingwei Zheng; SFB-NEXT: ret 65*65002689SYingwei Zheng %res = sdiv i64 %0, 2 66*65002689SYingwei Zheng ret i64 %res 67*65002689SYingwei Zheng} 68*65002689SYingwei Zheng 69*65002689SYingwei Zhengdefine i64 @sdivneg2_64(i64 %0) { 70*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg2_64: 71*65002689SYingwei Zheng; NOSFB: # %bb.0: 72*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a0, 63 73*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 74*65002689SYingwei Zheng; NOSFB-NEXT: srai a0, a0, 1 75*65002689SYingwei Zheng; NOSFB-NEXT: neg a0, a0 76*65002689SYingwei Zheng; NOSFB-NEXT: ret 77*65002689SYingwei Zheng; 78*65002689SYingwei Zheng; SFB-LABEL: sdivneg2_64: 79*65002689SYingwei Zheng; SFB: # %bb.0: 80*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB3_2 81*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 82*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 1 83*65002689SYingwei Zheng; SFB-NEXT: .LBB3_2: 84*65002689SYingwei Zheng; SFB-NEXT: srai a0, a0, 1 85*65002689SYingwei Zheng; SFB-NEXT: neg a0, a0 86*65002689SYingwei Zheng; SFB-NEXT: ret 87*65002689SYingwei Zheng %res = sdiv i64 %0, -2 88*65002689SYingwei Zheng ret i64 %res 89*65002689SYingwei Zheng} 90*65002689SYingwei Zheng 91*65002689SYingwei Zhengdefine signext i32 @srem2_32(i32 signext %0) { 92*65002689SYingwei Zheng; NOSFB-LABEL: srem2_32: 93*65002689SYingwei Zheng; NOSFB: # %bb.0: 94*65002689SYingwei Zheng; NOSFB-NEXT: srliw a1, a0, 31 95*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 96*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -2 97*65002689SYingwei Zheng; NOSFB-NEXT: subw a0, a0, a1 98*65002689SYingwei Zheng; NOSFB-NEXT: ret 99*65002689SYingwei Zheng; 100*65002689SYingwei Zheng; SFB-LABEL: srem2_32: 101*65002689SYingwei Zheng; SFB: # %bb.0: 102*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 103*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB4_2 104*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 105*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 1 106*65002689SYingwei Zheng; SFB-NEXT: .LBB4_2: 107*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -2 108*65002689SYingwei Zheng; SFB-NEXT: subw a0, a0, a1 109*65002689SYingwei Zheng; SFB-NEXT: ret 110*65002689SYingwei Zheng %res = srem i32 %0, 2 111*65002689SYingwei Zheng ret i32 %res 112*65002689SYingwei Zheng} 113*65002689SYingwei Zheng 114*65002689SYingwei Zhengdefine signext i32 @sremneg2_32(i32 signext %0) { 115*65002689SYingwei Zheng; NOSFB-LABEL: sremneg2_32: 116*65002689SYingwei Zheng; NOSFB: # %bb.0: 117*65002689SYingwei Zheng; NOSFB-NEXT: srliw a1, a0, 31 118*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 119*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -2 120*65002689SYingwei Zheng; NOSFB-NEXT: subw a0, a0, a1 121*65002689SYingwei Zheng; NOSFB-NEXT: ret 122*65002689SYingwei Zheng; 123*65002689SYingwei Zheng; SFB-LABEL: sremneg2_32: 124*65002689SYingwei Zheng; SFB: # %bb.0: 125*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 126*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB5_2 127*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 128*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 1 129*65002689SYingwei Zheng; SFB-NEXT: .LBB5_2: 130*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -2 131*65002689SYingwei Zheng; SFB-NEXT: subw a0, a0, a1 132*65002689SYingwei Zheng; SFB-NEXT: ret 133*65002689SYingwei Zheng %res = srem i32 %0, -2 134*65002689SYingwei Zheng ret i32 %res 135*65002689SYingwei Zheng} 136*65002689SYingwei Zheng 137*65002689SYingwei Zhengdefine i64 @srem2_64(i64 %0) { 138*65002689SYingwei Zheng; NOSFB-LABEL: srem2_64: 139*65002689SYingwei Zheng; NOSFB: # %bb.0: 140*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a0, 63 141*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 142*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -2 143*65002689SYingwei Zheng; NOSFB-NEXT: sub a0, a0, a1 144*65002689SYingwei Zheng; NOSFB-NEXT: ret 145*65002689SYingwei Zheng; 146*65002689SYingwei Zheng; SFB-LABEL: srem2_64: 147*65002689SYingwei Zheng; SFB: # %bb.0: 148*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 149*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB6_2 150*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 151*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 1 152*65002689SYingwei Zheng; SFB-NEXT: .LBB6_2: 153*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -2 154*65002689SYingwei Zheng; SFB-NEXT: sub a0, a0, a1 155*65002689SYingwei Zheng; SFB-NEXT: ret 156*65002689SYingwei Zheng %res = srem i64 %0, 2 157*65002689SYingwei Zheng ret i64 %res 158*65002689SYingwei Zheng} 159*65002689SYingwei Zheng 160*65002689SYingwei Zhengdefine i64 @sremneg2_64(i64 %0) { 161*65002689SYingwei Zheng; NOSFB-LABEL: sremneg2_64: 162*65002689SYingwei Zheng; NOSFB: # %bb.0: 163*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a0, 63 164*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 165*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -2 166*65002689SYingwei Zheng; NOSFB-NEXT: sub a0, a0, a1 167*65002689SYingwei Zheng; NOSFB-NEXT: ret 168*65002689SYingwei Zheng; 169*65002689SYingwei Zheng; SFB-LABEL: sremneg2_64: 170*65002689SYingwei Zheng; SFB: # %bb.0: 171*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 172*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB7_2 173*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 174*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 1 175*65002689SYingwei Zheng; SFB-NEXT: .LBB7_2: 176*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -2 177*65002689SYingwei Zheng; SFB-NEXT: sub a0, a0, a1 178*65002689SYingwei Zheng; SFB-NEXT: ret 179*65002689SYingwei Zheng %res = srem i64 %0, -2 180*65002689SYingwei Zheng ret i64 %res 181*65002689SYingwei Zheng} 182*65002689SYingwei Zheng 183*65002689SYingwei Zhengdefine signext i32 @sdiv8_32(i32 signext %0) { 184*65002689SYingwei Zheng; NOSFB-LABEL: sdiv8_32: 185*65002689SYingwei Zheng; NOSFB: # %bb.0: 186*65002689SYingwei Zheng; NOSFB-NEXT: slli a1, a0, 1 187*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 188*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 189*65002689SYingwei Zheng; NOSFB-NEXT: sraiw a0, a0, 3 190*65002689SYingwei Zheng; NOSFB-NEXT: ret 191*65002689SYingwei Zheng; 192*65002689SYingwei Zheng; SFB-LABEL: sdiv8_32: 193*65002689SYingwei Zheng; SFB: # %bb.0: 194*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB8_2 195*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 196*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 7 197*65002689SYingwei Zheng; SFB-NEXT: .LBB8_2: 198*65002689SYingwei Zheng; SFB-NEXT: sraiw a0, a0, 3 199*65002689SYingwei Zheng; SFB-NEXT: ret 200*65002689SYingwei Zheng %res = sdiv i32 %0, 8 201*65002689SYingwei Zheng ret i32 %res 202*65002689SYingwei Zheng} 203*65002689SYingwei Zheng 204*65002689SYingwei Zhengdefine signext i32 @sdivneg8_32(i32 signext %0) { 205*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg8_32: 206*65002689SYingwei Zheng; NOSFB: # %bb.0: 207*65002689SYingwei Zheng; NOSFB-NEXT: slli a1, a0, 1 208*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 209*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 210*65002689SYingwei Zheng; NOSFB-NEXT: sraiw a0, a0, 3 211*65002689SYingwei Zheng; NOSFB-NEXT: neg a0, a0 212*65002689SYingwei Zheng; NOSFB-NEXT: ret 213*65002689SYingwei Zheng; 214*65002689SYingwei Zheng; SFB-LABEL: sdivneg8_32: 215*65002689SYingwei Zheng; SFB: # %bb.0: 216*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB9_2 217*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 218*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 7 219*65002689SYingwei Zheng; SFB-NEXT: .LBB9_2: 220*65002689SYingwei Zheng; SFB-NEXT: sraiw a0, a0, 3 221*65002689SYingwei Zheng; SFB-NEXT: neg a0, a0 222*65002689SYingwei Zheng; SFB-NEXT: ret 223*65002689SYingwei Zheng %res = sdiv i32 %0, -8 224*65002689SYingwei Zheng ret i32 %res 225*65002689SYingwei Zheng} 226*65002689SYingwei Zheng 227*65002689SYingwei Zhengdefine i64 @sdiv8_64(i64 %0) { 228*65002689SYingwei Zheng; NOSFB-LABEL: sdiv8_64: 229*65002689SYingwei Zheng; NOSFB: # %bb.0: 230*65002689SYingwei Zheng; NOSFB-NEXT: srai a1, a0, 63 231*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 232*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 233*65002689SYingwei Zheng; NOSFB-NEXT: srai a0, a0, 3 234*65002689SYingwei Zheng; NOSFB-NEXT: ret 235*65002689SYingwei Zheng; 236*65002689SYingwei Zheng; SFB-LABEL: sdiv8_64: 237*65002689SYingwei Zheng; SFB: # %bb.0: 238*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB10_2 239*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 240*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 7 241*65002689SYingwei Zheng; SFB-NEXT: .LBB10_2: 242*65002689SYingwei Zheng; SFB-NEXT: srai a0, a0, 3 243*65002689SYingwei Zheng; SFB-NEXT: ret 244*65002689SYingwei Zheng %res = sdiv i64 %0, 8 245*65002689SYingwei Zheng ret i64 %res 246*65002689SYingwei Zheng} 247*65002689SYingwei Zheng 248*65002689SYingwei Zhengdefine i64 @sdivneg8_64(i64 %0) { 249*65002689SYingwei Zheng; NOSFB-LABEL: sdivneg8_64: 250*65002689SYingwei Zheng; NOSFB: # %bb.0: 251*65002689SYingwei Zheng; NOSFB-NEXT: srai a1, a0, 63 252*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 253*65002689SYingwei Zheng; NOSFB-NEXT: add a0, a0, a1 254*65002689SYingwei Zheng; NOSFB-NEXT: srai a0, a0, 3 255*65002689SYingwei Zheng; NOSFB-NEXT: neg a0, a0 256*65002689SYingwei Zheng; NOSFB-NEXT: ret 257*65002689SYingwei Zheng; 258*65002689SYingwei Zheng; SFB-LABEL: sdivneg8_64: 259*65002689SYingwei Zheng; SFB: # %bb.0: 260*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB11_2 261*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 262*65002689SYingwei Zheng; SFB-NEXT: addi a0, a0, 7 263*65002689SYingwei Zheng; SFB-NEXT: .LBB11_2: 264*65002689SYingwei Zheng; SFB-NEXT: srai a0, a0, 3 265*65002689SYingwei Zheng; SFB-NEXT: neg a0, a0 266*65002689SYingwei Zheng; SFB-NEXT: ret 267*65002689SYingwei Zheng %res = sdiv i64 %0, -8 268*65002689SYingwei Zheng ret i64 %res 269*65002689SYingwei Zheng} 270*65002689SYingwei Zheng 271*65002689SYingwei Zhengdefine signext i32 @srem8_32(i32 signext %0) { 272*65002689SYingwei Zheng; NOSFB-LABEL: srem8_32: 273*65002689SYingwei Zheng; NOSFB: # %bb.0: 274*65002689SYingwei Zheng; NOSFB-NEXT: slli a1, a0, 1 275*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 276*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 277*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -8 278*65002689SYingwei Zheng; NOSFB-NEXT: subw a0, a0, a1 279*65002689SYingwei Zheng; NOSFB-NEXT: ret 280*65002689SYingwei Zheng; 281*65002689SYingwei Zheng; SFB-LABEL: srem8_32: 282*65002689SYingwei Zheng; SFB: # %bb.0: 283*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 284*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB12_2 285*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 286*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 7 287*65002689SYingwei Zheng; SFB-NEXT: .LBB12_2: 288*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -8 289*65002689SYingwei Zheng; SFB-NEXT: subw a0, a0, a1 290*65002689SYingwei Zheng; SFB-NEXT: ret 291*65002689SYingwei Zheng %res = srem i32 %0, 8 292*65002689SYingwei Zheng ret i32 %res 293*65002689SYingwei Zheng} 294*65002689SYingwei Zheng 295*65002689SYingwei Zhengdefine signext i32 @sremneg8_32(i32 signext %0) { 296*65002689SYingwei Zheng; NOSFB-LABEL: sremneg8_32: 297*65002689SYingwei Zheng; NOSFB: # %bb.0: 298*65002689SYingwei Zheng; NOSFB-NEXT: slli a1, a0, 1 299*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 300*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 301*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -8 302*65002689SYingwei Zheng; NOSFB-NEXT: subw a0, a0, a1 303*65002689SYingwei Zheng; NOSFB-NEXT: ret 304*65002689SYingwei Zheng; 305*65002689SYingwei Zheng; SFB-LABEL: sremneg8_32: 306*65002689SYingwei Zheng; SFB: # %bb.0: 307*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 308*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB13_2 309*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 310*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 7 311*65002689SYingwei Zheng; SFB-NEXT: .LBB13_2: 312*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -8 313*65002689SYingwei Zheng; SFB-NEXT: subw a0, a0, a1 314*65002689SYingwei Zheng; SFB-NEXT: ret 315*65002689SYingwei Zheng %res = srem i32 %0, -8 316*65002689SYingwei Zheng ret i32 %res 317*65002689SYingwei Zheng} 318*65002689SYingwei Zheng 319*65002689SYingwei Zhengdefine i64 @srem8_64(i64 %0) { 320*65002689SYingwei Zheng; NOSFB-LABEL: srem8_64: 321*65002689SYingwei Zheng; NOSFB: # %bb.0: 322*65002689SYingwei Zheng; NOSFB-NEXT: srai a1, a0, 63 323*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 324*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 325*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -8 326*65002689SYingwei Zheng; NOSFB-NEXT: sub a0, a0, a1 327*65002689SYingwei Zheng; NOSFB-NEXT: ret 328*65002689SYingwei Zheng; 329*65002689SYingwei Zheng; SFB-LABEL: srem8_64: 330*65002689SYingwei Zheng; SFB: # %bb.0: 331*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 332*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB14_2 333*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 334*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 7 335*65002689SYingwei Zheng; SFB-NEXT: .LBB14_2: 336*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -8 337*65002689SYingwei Zheng; SFB-NEXT: sub a0, a0, a1 338*65002689SYingwei Zheng; SFB-NEXT: ret 339*65002689SYingwei Zheng %res = srem i64 %0, 8 340*65002689SYingwei Zheng ret i64 %res 341*65002689SYingwei Zheng} 342*65002689SYingwei Zheng 343*65002689SYingwei Zhengdefine i64 @sremneg8_64(i64 %0) { 344*65002689SYingwei Zheng; NOSFB-LABEL: sremneg8_64: 345*65002689SYingwei Zheng; NOSFB: # %bb.0: 346*65002689SYingwei Zheng; NOSFB-NEXT: srai a1, a0, 63 347*65002689SYingwei Zheng; NOSFB-NEXT: srli a1, a1, 61 348*65002689SYingwei Zheng; NOSFB-NEXT: add a1, a1, a0 349*65002689SYingwei Zheng; NOSFB-NEXT: andi a1, a1, -8 350*65002689SYingwei Zheng; NOSFB-NEXT: sub a0, a0, a1 351*65002689SYingwei Zheng; NOSFB-NEXT: ret 352*65002689SYingwei Zheng; 353*65002689SYingwei Zheng; SFB-LABEL: sremneg8_64: 354*65002689SYingwei Zheng; SFB: # %bb.0: 355*65002689SYingwei Zheng; SFB-NEXT: mv a1, a0 356*65002689SYingwei Zheng; SFB-NEXT: bgez a0, .LBB15_2 357*65002689SYingwei Zheng; SFB-NEXT: # %bb.1: 358*65002689SYingwei Zheng; SFB-NEXT: addi a1, a0, 7 359*65002689SYingwei Zheng; SFB-NEXT: .LBB15_2: 360*65002689SYingwei Zheng; SFB-NEXT: andi a1, a1, -8 361*65002689SYingwei Zheng; SFB-NEXT: sub a0, a0, a1 362*65002689SYingwei Zheng; SFB-NEXT: ret 363*65002689SYingwei Zheng %res = srem i64 %0, -8 364*65002689SYingwei Zheng ret i64 %res 365*65002689SYingwei Zheng} 366*65002689SYingwei Zheng 367*65002689SYingwei Zheng; Negative tests 368*65002689SYingwei Zhengdefine i64 @sdiv4096(i64 %0) { 369*65002689SYingwei Zheng; CHECK-LABEL: sdiv4096: 370*65002689SYingwei Zheng; CHECK: # %bb.0: 371*65002689SYingwei Zheng; CHECK-NEXT: srai a1, a0, 63 372*65002689SYingwei Zheng; CHECK-NEXT: srli a1, a1, 52 373*65002689SYingwei Zheng; CHECK-NEXT: add a0, a0, a1 374*65002689SYingwei Zheng; CHECK-NEXT: srai a0, a0, 12 375*65002689SYingwei Zheng; CHECK-NEXT: ret 376*65002689SYingwei Zheng %res = sdiv i64 %0, 4096 377*65002689SYingwei Zheng ret i64 %res 378*65002689SYingwei Zheng} 379