[opaque pointer type] Add textual IR support for explicit type parameter to gep operator
[oota-llvm.git] / test / CodeGen / Mips / mips16_fpret.ll
1 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=1
2 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=2
3 ; RUN: llc -mtriple=mipsel-linux-gnu  -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=3
4 ; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=4
5
6
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
11
12 define float @foox()  {
13 entry:
14   %0 = load float, float* @x, align 4
15   ret float %0
16 ; 1:    .ent    foox
17 ; 1:    lw      $2, %lo(x)(${{[0-9]+}})
18 ; 1:    jal     __mips16_ret_sf
19 }
20
21 define double @foodx()  {
22 entry:
23   %0 = load double, double* @dx, align 8
24   ret double %0
25 ; 1:    .ent    foodx
26 ; 1:    lw      $2, %lo(dx)(${{[0-9]+}})
27 ; 1:    jal     __mips16_ret_df
28 ; 2:    .ent    foodx
29 ; 2:    lw      $3, 4(${{[0-9]+}})
30 ; 2:    jal     __mips16_ret_df
31
32 }
33
34 define { float, float } @foocx()  {
35 entry:
36   %retval = alloca { float, float }, align 4
37   %cx.real = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @cx, i32 0, i32 0)
38   %cx.imag = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @cx, i32 0, i32 1)
39   %real = getelementptr inbounds { float, float }, { float, float }* %retval, i32 0, i32 0
40   %imag = getelementptr inbounds { float, float }, { float, float }* %retval, i32 0, i32 1
41   store float %cx.real, float* %real
42   store float %cx.imag, float* %imag
43   %0 = load { float, float }, { float, float }* %retval
44   ret { float, float } %0
45 ; 1:    .ent    foocx
46 ; 1:    lw      $2, %lo(cx)(${{[0-9]+}})
47 ; 1:    jal     __mips16_ret_sc
48 ; 2:    .ent    foocx
49 ; 2:    lw      $3, 4(${{[0-9]+}})
50 ; 2:    jal     __mips16_ret_sc
51 }
52
53 define { double, double } @foodcx()  {
54 entry:
55   %retval = alloca { double, double }, align 8
56   %dcx.real = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @dcx, i32 0, i32 0)
57   %dcx.imag = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @dcx, i32 0, i32 1)
58   %real = getelementptr inbounds { double, double }, { double, double }* %retval, i32 0, i32 0
59   %imag = getelementptr inbounds { double, double }, { double, double }* %retval, i32 0, i32 1
60   store double %dcx.real, double* %real
61   store double %dcx.imag, double* %imag
62   %0 = load { double, double }, { double, double }* %retval
63   ret { double, double } %0
64 ; 1:    .ent    foodcx
65 ; 1:    lw      ${{[0-9]}}, %lo(dcx)(${{[0-9]+}})
66 ; 1:    jal     __mips16_ret_dc
67 ; 2:    .ent    foodcx
68 ; 2:    lw      ${{[0-9]}}, 4(${{[0-9]+}})
69 ; 2:    jal     __mips16_ret_dc
70 ; 3:    .ent    foodcx
71 ; 3:    lw      $4, 8(${{[0-9]+}})
72 ; 3:    jal     __mips16_ret_dc
73 ; 4:    .ent    foodcx
74 ; 4:    lw      $5, 12(${{[0-9]+}})
75 ; 4:    jal     __mips16_ret_dc
76 }