1 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mattr=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=1
2 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mattr=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=2
3 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mattr=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=3
4 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mattr=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=4
7 @x = global float 0x41F487E980000000, align 4
8 @dx = global double 0x41CDCC8BC4800000, align 8
9 @cx = global { float, float } { float 1.000000e+00, float 9.900000e+01 }, align 4
10 @dcx = global { double, double } { double 0x42CE5E14A412B480, double 0x423AA4C580DB0000 }, align 8
12 define float @foox() {
14 %0 = load float, ptr @x, align 4
17 ; 1: lw $2, %lo(x)(${{[0-9]+}})
18 ; 1: jal __mips16_ret_sf
21 define double @foodx() {
23 %0 = load double, ptr @dx, align 8
26 ; 1: lw $2, %lo(dx)(${{[0-9]+}})
27 ; 1: jal __mips16_ret_df
29 ; 2: lw $3, 4(${{[0-9]+}})
30 ; 2: jal __mips16_ret_df
34 define { float, float } @foocx() {
36 %retval = alloca { float, float }, align 4
37 %cx.real = load float, ptr getelementptr inbounds ({ float, float }, ptr @cx, i32 0, i32 0)
38 %cx.imag = load float, ptr getelementptr inbounds ({ float, float }, ptr @cx, i32 0, i32 1)
39 %real = getelementptr inbounds { float, float }, ptr %retval, i32 0, i32 0
40 %imag = getelementptr inbounds { float, float }, ptr %retval, i32 0, i32 1
41 store float %cx.real, ptr %real
42 store float %cx.imag, ptr %imag
43 %0 = load { float, float }, ptr %retval
44 ret { float, float } %0
46 ; 1: lw $2, %lo(cx)(${{[0-9]+}})
47 ; 1: jal __mips16_ret_sc
49 ; 2: lw $3, 4(${{[0-9]+}})
50 ; 2: jal __mips16_ret_sc
53 define { double, double } @foodcx() {
55 %retval = alloca { double, double }, align 8
56 %dcx.real = load double, ptr getelementptr inbounds ({ double, double }, ptr @dcx, i32 0, i32 0)
57 %dcx.imag = load double, ptr getelementptr inbounds ({ double, double }, ptr @dcx, i32 0, i32 1)
58 %real = getelementptr inbounds { double, double }, ptr %retval, i32 0, i32 0
59 %imag = getelementptr inbounds { double, double }, ptr %retval, i32 0, i32 1
60 store double %dcx.real, ptr %real
61 store double %dcx.imag, ptr %imag
62 %0 = load { double, double }, ptr %retval
63 ret { double, double } %0
65 ; 1: lw ${{[0-9]}}, %lo(dcx)(${{[0-9]+}})
66 ; 1: jal __mips16_ret_dc
68 ; 2: lw ${{[0-9]}}, 4(${{[0-9]+}})
69 ; 2: jal __mips16_ret_dc
71 ; 3: lw $4, 8(${{[0-9]+}})
72 ; 3: jal __mips16_ret_dc
74 ; 4: lw $5, 12(${{[0-9]+}})
75 ; 4: jal __mips16_ret_dc