1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32 -O0 -relocation-model=pic \ 2*9880d681SAndroid Build Coastguard Worker; RUN: -fast-isel-abort=1 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -O0 -relocation-model=pic \ 4*9880d681SAndroid Build Coastguard Worker; RUN: -fast-isel-abort=1 | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@sj = global i32 200000, align 4 7*9880d681SAndroid Build Coastguard Worker@sk = global i32 -47, align 4 8*9880d681SAndroid Build Coastguard Worker@uj = global i32 200000, align 4 9*9880d681SAndroid Build Coastguard Worker@uk = global i32 43, align 4 10*9880d681SAndroid Build Coastguard Worker@si = common global i32 0, align 4 11*9880d681SAndroid Build Coastguard Worker@ui = common global i32 0, align 4 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine void @divs() { 14*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: divs: 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker ; CHECK: lui $[[GOT1:[0-9]+]], %hi(_gp_disp) 17*9880d681SAndroid Build Coastguard Worker ; CHECK: addiu $[[GOT2:[0-9]+]], $[[GOT1]], %lo(_gp_disp) 18*9880d681SAndroid Build Coastguard Worker ; CHECK: addu $[[GOT:[0-9]+]], $[[GOT2:[0-9]+]], $25 19*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[I_ADDR:[0-9]+]], %got(si)($[[GOT]]) 20*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[K_ADDR:[0-9]+]], %got(sk)($[[GOT]]) 21*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[J_ADDR:[0-9]+]], %got(sj)($[[GOT]]) 22*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[J:[0-9]+]], 0($[[J_ADDR]]) 23*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[K:[0-9]+]], 0($[[K_ADDR]]) 24*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: div $zero, $[[J]], $[[K]] 25*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: teq $[[K]], $zero, 7 26*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mflo $[[RESULT:[0-9]+]] 27*9880d681SAndroid Build Coastguard Worker ; CHECK: sw $[[RESULT]], 0($[[I_ADDR]]) 28*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @sj, align 4 29*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* @sk, align 4 30*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %1, %2 31*9880d681SAndroid Build Coastguard Worker store i32 %div, i32* @si, align 4 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine void @divu() { 36*9880d681SAndroid Build Coastguard Worker ; CHECK-LABEL: divu: 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker ; CHECK: lui $[[GOT1:[0-9]+]], %hi(_gp_disp) 39*9880d681SAndroid Build Coastguard Worker ; CHECK: addiu $[[GOT2:[0-9]+]], $[[GOT1]], %lo(_gp_disp) 40*9880d681SAndroid Build Coastguard Worker ; CHECK: addu $[[GOT:[0-9]+]], $[[GOT2:[0-9]+]], $25 41*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[I_ADDR:[0-9]+]], %got(ui)($[[GOT]]) 42*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[K_ADDR:[0-9]+]], %got(uk)($[[GOT]]) 43*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[J_ADDR:[0-9]+]], %got(uj)($[[GOT]]) 44*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[J:[0-9]+]], 0($[[J_ADDR]]) 45*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: lw $[[K:[0-9]+]], 0($[[K_ADDR]]) 46*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: divu $zero, $[[J]], $[[K]] 47*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: teq $[[K]], $zero, 7 48*9880d681SAndroid Build Coastguard Worker ; CHECK-DAG: mflo $[[RESULT:[0-9]+]] 49*9880d681SAndroid Build Coastguard Worker ; CHECK: sw $[[RESULT]], 0($[[I_ADDR]]) 50*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* @uj, align 4 51*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* @uk, align 4 52*9880d681SAndroid Build Coastguard Worker %div = udiv i32 %1, %2 53*9880d681SAndroid Build Coastguard Worker store i32 %div, i32* @ui, align 4 54*9880d681SAndroid Build Coastguard Worker ret void 55*9880d681SAndroid Build Coastguard Worker} 56