1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mipsel -relocation-model=pic -O0 -fast-isel-abort=1 -mcpu=mips32r2 \ 2*9880d681SAndroid Build Coastguard Worker; RUN: < %s | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker@i = global i32 75, align 4 5*9880d681SAndroid Build Coastguard Worker@s = global i16 -345, align 2 6*9880d681SAndroid Build Coastguard Worker@c = global i8 118, align 1 7*9880d681SAndroid Build Coastguard Worker@f = global float 0x40BE623360000000, align 4 8*9880d681SAndroid Build Coastguard Worker@d = global double 1.298330e+03, align 8 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 11*9880d681SAndroid Build Coastguard Workerdefine i32 @reti() { 12*9880d681SAndroid Build Coastguard Workerentry: 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: reti: 14*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* @i, align 4 15*9880d681SAndroid Build Coastguard Worker ret i32 %0 16*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 17*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 18*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 19*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_I_ADDR:[0-9]+]], %got(i)($[[REG_GP]]) 20*9880d681SAndroid Build Coastguard Worker; CHECK: lw $2, 0($[[REG_I_ADDR]]) 21*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 25*9880d681SAndroid Build Coastguard Workerdefine i16 @retus() { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: retus: 28*9880d681SAndroid Build Coastguard Worker %0 = load i16, i16* @s, align 2 29*9880d681SAndroid Build Coastguard Worker ret i16 %0 30*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 31*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 32*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 33*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_S_ADDR:[0-9]+]], %got(s)($[[REG_GP]]) 34*9880d681SAndroid Build Coastguard Worker; CHECK: lhu $2, 0($[[REG_S_ADDR]]) 35*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 39*9880d681SAndroid Build Coastguard Workerdefine signext i16 @rets() { 40*9880d681SAndroid Build Coastguard Workerentry: 41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: rets: 42*9880d681SAndroid Build Coastguard Worker %0 = load i16, i16* @s, align 2 43*9880d681SAndroid Build Coastguard Worker ret i16 %0 44*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 45*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 46*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 47*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_S_ADDR:[0-9]+]], %got(s)($[[REG_GP]]) 48*9880d681SAndroid Build Coastguard Worker; CHECK: lhu $[[REG_S:[0-9]+]], 0($[[REG_S_ADDR]]) 49*9880d681SAndroid Build Coastguard Worker; CHECK: seh $2, $[[REG_S]] 50*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 54*9880d681SAndroid Build Coastguard Workerdefine i8 @retuc() { 55*9880d681SAndroid Build Coastguard Workerentry: 56*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: retuc: 57*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* @c, align 1 58*9880d681SAndroid Build Coastguard Worker ret i8 %0 59*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 60*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 61*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 62*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_C_ADDR:[0-9]+]], %got(c)($[[REG_GP]]) 63*9880d681SAndroid Build Coastguard Worker; CHECK: lbu $2, 0($[[REG_C_ADDR]]) 64*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 68*9880d681SAndroid Build Coastguard Workerdefine signext i8 @retc() { 69*9880d681SAndroid Build Coastguard Workerentry: 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: retc: 71*9880d681SAndroid Build Coastguard Worker %0 = load i8, i8* @c, align 1 72*9880d681SAndroid Build Coastguard Worker ret i8 %0 73*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 74*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 75*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 76*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_C_ADDR:[0-9]+]], %got(c)($[[REG_GP]]) 77*9880d681SAndroid Build Coastguard Worker; CHECK: lbu $[[REG_C:[0-9]+]], 0($[[REG_C_ADDR]]) 78*9880d681SAndroid Build Coastguard Worker; CHECK: seb $2, $[[REG_C]] 79*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 83*9880d681SAndroid Build Coastguard Workerdefine float @retf() { 84*9880d681SAndroid Build Coastguard Workerentry: 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: retf: 86*9880d681SAndroid Build Coastguard Worker %0 = load float, float* @f, align 4 87*9880d681SAndroid Build Coastguard Worker ret float %0 88*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 89*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 90*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 91*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_F_ADDR:[0-9]+]], %got(f)($[[REG_GP]]) 92*9880d681SAndroid Build Coastguard Worker; CHECK: lwc1 $f0, 0($[[REG_F_ADDR]]) 93*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind 97*9880d681SAndroid Build Coastguard Workerdefine double @retd() { 98*9880d681SAndroid Build Coastguard Workerentry: 99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: retd: 100*9880d681SAndroid Build Coastguard Worker %0 = load double, double* @d, align 8 101*9880d681SAndroid Build Coastguard Worker ret double %0 102*9880d681SAndroid Build Coastguard Worker; CHECK: lui $[[REG_GPa:[0-9]+]], %hi(_gp_disp) 103*9880d681SAndroid Build Coastguard Worker; CHECK: addiu $[[REG_GPb:[0-9]+]], $[[REG_GPa]], %lo(_gp_disp) 104*9880d681SAndroid Build Coastguard Worker; CHECK: addu $[[REG_GP:[0-9]+]], $[[REG_GPb]], $25 105*9880d681SAndroid Build Coastguard Worker; CHECK: lw $[[REG_D_ADDR:[0-9]+]], %got(d)($[[REG_GP]]) 106*9880d681SAndroid Build Coastguard Worker; CHECK: ldc1 $f0, 0($[[REG_D_ADDR]]) 107*9880d681SAndroid Build Coastguard Worker; CHECK: jr $ra 108*9880d681SAndroid Build Coastguard Worker} 109