XCore target: Add large code model
[oota-llvm.git] / test / CodeGen / XCore / codemodel.ll
1
2 ; RUN: not llc < %s -march=xcore -code-model=medium 2>&1 | FileCheck %s -check-prefix=BAD_CM
3 ; RUN: not llc < %s -march=xcore -code-model=kernel 2>&1 | FileCheck %s -check-prefix=BAD_CM
4 ; BAD_CM: Target only supports CodeModel Small or Large
5
6
7 ; RUN: llc < %s -march=xcore -code-model=default | FileCheck %s
8 ; RUN: llc < %s -march=xcore -code-model=small | FileCheck %s
9 ; RUN: llc < %s -march=xcore -code-model=large | FileCheck %s -check-prefix=LARGE
10
11 ; CHECK: .section  .cp.rodata.cst4,"aMc",@progbits,4
12 ; CHECK: .long 65536
13 ; CHECK: .text
14 ; CHECK-LABEL: f:
15 ; CHECK: ldc r1, 65532
16 ; CHECK: add r1, r0, r1
17 ; CHECK: ldw r1, r1[0]
18 ; CHECK: ldw r2, cp[.LCPI0_0]
19 ; CHECK: add r0, r0, r2
20 ; CHECK: ldw r0, r0[0]
21 ; CHECK: add r0, r1, r0
22 ; CHECK: ldw r1, dp[l]
23 ; CHECK: add r0, r0, r1
24 ; CHECK: ldw r1, dp[l+4]
25 ; CHECK: add r0, r0, r1
26 ; CHECK: ldw r1, dp[l+392]
27 ; CHECK: add r0, r0, r1
28 ; CHECK: ldw r1, dp[l+396]
29 ; CHECK: add r0, r0, r1
30 ; CHECK: ldw r1, dp[s]
31 ; CHECK: add r0, r0, r1
32 ; CHECK: ldw r1, dp[s+36]
33 ; CHECK: add r0, r0, r1
34 ; CHECK: retsp 0
35 ;
36 ; LARGE: .section .cp.rodata.cst4,"aMc",@progbits,4
37 ; LARGE: .long 65536
38 ; LARGE: .section .cp.rodata,"ac",@progbits
39 ; LARGE: .long l
40 ; LARGE: .long l+4
41 ; LARGE: .long l+392
42 ; LARGE: .long l+396
43 ; LARGE: .text
44 ; LARGE-LABEL: f:
45 ; LARGE: ldc r1, 65532
46 ; LARGE: add r1, r0, r1
47 ; LARGE: ldw r1, r1[0]
48 ; LARGE: ldw r2, cp[.LCPI0_0]
49 ; LARGE: add r0, r0, r2
50 ; LARGE: ldw r0, r0[0]
51 ; LARGE: add r0, r1, r0
52 ; LARGE: ldw r1, cp[.LCPI0_1]
53 ; LARGE: ldw r1, r1[0]
54 ; LARGE: add r0, r0, r1
55 ; LARGE: ldw r1, cp[.LCPI0_2]
56 ; LARGE: ldw r1, r1[0]
57 ; LARGE: add r0, r0, r1
58 ; LARGE: ldw r1, cp[.LCPI0_3]
59 ; LARGE: ldw r1, r1[0]
60 ; LARGE: add r0, r0, r1
61 ; LARGE: ldw r1, cp[.LCPI0_4]
62 ; LARGE: ldw r1, r1[0]
63 ; LARGE: add r0, r0, r1
64 ; LARGE: ldw r1, dp[s]
65 ; LARGE: add r0, r0, r1
66 ; LARGE: ldw r1, dp[s+36]
67 ; LARGE: add r0, r0, r1
68 ; LARGE: retsp 0
69 define i32 @f(i32* %i) {
70 entry:
71   %0 = getelementptr inbounds i32* %i, i32 16383
72   %1 = load i32* %0
73   %2 = getelementptr inbounds i32* %i, i32 16384
74   %3 = load i32* %2
75   %4 = add nsw i32 %1, %3
76   %5 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 0)
77   %6 = add nsw i32 %4, %5
78   %7 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 1)
79   %8 = add nsw i32 %6, %7
80   %9 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 98)
81   %10 = add nsw i32 %8, %9
82   %11 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 99)
83   %12 = add nsw i32 %10, %11
84   %13 = load i32* getelementptr inbounds ([10 x i32]* @s, i32 0, i32 0)
85   %14 = add nsw i32 %12, %13
86   %15 = load i32* getelementptr inbounds ([10 x i32]* @s, i32 0, i32 9)
87   %16 = add nsw i32 %14, %15
88   ret i32 %16
89 }
90
91 ; CHECK: .section .dp.bss,"awd",@nobits
92 ; CHECK-LABEL: l:
93 ; CHECK: .space 400
94 ; LARGE: .section  .dp.bss.large,"awd",@nobits
95 ; LARGE-LABEL: l:
96 ; LARGE: .space  400
97 @l = global [100 x i32] zeroinitializer
98
99 ; CHECK-LABEL: s:
100 ; CHECK: .space 40
101 ; LARGE: .section  .dp.bss,"awd",@nobits
102 ; LARGE-LABEL: s:
103 ; LARGE: .space  40
104 @s = global [10 x i32] zeroinitializer
105
106 ; CHECK: .section .cp.rodata,"ac",@progbits
107 ; CHECK-LABEL: cl:
108 ; CHECK: .space 400
109 ; LARGE: .section .cp.rodata.large,"ac",@progbits
110 ; LARGE-LABEL: cl:
111 ; LARGE: .space 400
112 @cl = constant  [100 x i32] zeroinitializer
113
114 ; CHECK-LABEL: cs:
115 ; CHECK: .space 40
116 ; LARGE: .section .cp.rodata,"ac",@progbits
117 ; LARGE-LABEL: cs:
118 ; LARGE: .space 40
119 @cs = constant  [10 x i32] zeroinitializer
120
121 ; CHECK: .section  .cp.namedsection,"ac",@progbits
122 ; CHECK-LABEL: cpsec:
123 ; CHECK: .long 0
124 @cpsec = global i32 0, section ".cp.namedsection"
125
126 ; CHECK: .section  .dp.namedsection,"awd",@progbits
127 ; CHECK-LABEL: dpsec:
128 ; CHECK: .long 0
129 @dpsec = global i32 0, section ".dp.namedsection"