]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/XCore/codemodel.ll
Vendor import of llvm trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.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 ; RUN: not llc < %s -march=xcore -code-model=tiny 2>&1 | FileCheck %s -check-prefix=BAD_CM
5 ; BAD_CM: Target only supports CodeModel Small or Large
6
7
8 ; RUN: llc < %s -march=xcore | FileCheck %s
9 ; RUN: llc < %s -march=xcore -code-model=small | FileCheck %s
10 ; RUN: llc < %s -march=xcore -code-model=large | FileCheck %s -check-prefix=LARGE
11
12
13 ; CHECK-LABEL: test:
14 ; CHECK: zext r0, 1
15 ; CHECK: bt r0, [[JUMP:.LBB[0-9_]*]]
16 ; CHECK: ldaw r0, dp[A2]
17 ; CHECK: retsp 0
18 ; CHECK: [[JUMP]]
19 ; CHECK: ldaw r0, dp[A1]
20 ; CHECK: retsp 0
21 ; LARGE-LABEL: test:
22 ; LARGE: zext r0, 1
23 ; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}]
24 ; LARGE: mov r1, r11
25 ; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}]
26 ; LARGE: bt r0, [[JUMP:.LBB[0-9_]*]]
27 ; LARGE: mov r11, r1
28 ; LARGE: [[JUMP]]
29 ; LARGE: ldw r0, r11[0]
30 ; LARGE: retsp 0
31 @A1 = external global [50000 x i32]
32 @A2 = external global [50000 x i32]
33 define [50000 x i32]* @test(i1 %bool) nounwind {
34 entry:
35   %Addr = select i1 %bool, [50000 x i32]* @A1, [50000 x i32]* @A2
36   ret [50000 x i32]* %Addr
37 }
38
39
40 ; CHECK: .section  .cp.rodata.cst4,"aMc",@progbits,4
41 ; CHECK: .long 65536
42 ; CHECK: .text
43 ; CHECK-LABEL: f:
44 ; CHECK: ldc r1, 65532
45 ; CHECK: add r1, r0, r1
46 ; CHECK: ldw r1, r1[0]
47 ; CHECK: ldw r2, cp[.LCPI{{[0-9_]*}}]
48 ; CHECK: add r0, r0, r2
49 ; CHECK: ldw r0, r0[0]
50 ; CHECK: add r0, r1, r0
51 ; CHECK: ldw r1, dp[l]
52 ; CHECK: add r0, r0, r1
53 ; CHECK: ldw r1, dp[l+4]
54 ; CHECK: add r0, r0, r1
55 ; CHECK: ldw r1, dp[l+392]
56 ; CHECK: add r0, r0, r1
57 ; CHECK: ldw r1, dp[l+396]
58 ; CHECK: add r0, r0, r1
59 ; CHECK: ldw r1, dp[s]
60 ; CHECK: add r0, r0, r1
61 ; CHECK: ldw r1, dp[s+36]
62 ; CHECK: add r0, r0, r1
63 ; CHECK: retsp 0
64 ;
65 ; LARGE: .section .cp.rodata.cst4,"aMc",@progbits,4
66 ; LARGE: .long 65536
67 ; LARGE: .section .cp.rodata,"ac",@progbits
68 ; LARGE: .long l
69 ; LARGE: .long l+4
70 ; LARGE: .long l+392
71 ; LARGE: .long l+396
72 ; LARGE: .text
73 ; LARGE-LABEL: f:
74 ; LARGE: ldc r1, 65532
75 ; LARGE: add r1, r0, r1
76 ; LARGE: ldw r1, r1[0]
77 ; LARGE: ldw r2, cp[.LCPI{{[0-9_]*}}]
78 ; LARGE: add r0, r0, r2
79 ; LARGE: ldw r0, r0[0]
80 ; LARGE: add r0, r1, r0
81 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
82 ; LARGE: ldw r1, r1[0]
83 ; LARGE: add r0, r0, r1
84 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
85 ; LARGE: ldw r1, r1[0]
86 ; LARGE: add r0, r0, r1
87 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
88 ; LARGE: ldw r1, r1[0]
89 ; LARGE: add r0, r0, r1
90 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
91 ; LARGE: ldw r1, r1[0]
92 ; LARGE: add r0, r0, r1
93 ; LARGE: ldw r1, dp[s]
94 ; LARGE: add r0, r0, r1
95 ; LARGE: ldw r1, dp[s+36]
96 ; LARGE: add r0, r0, r1
97 ; LARGE: retsp 0
98 define i32 @f(i32* %i) {
99 entry:
100   %0 = getelementptr inbounds i32, i32* %i, i32 16383
101   %1 = load i32, i32* %0
102   %2 = getelementptr inbounds i32, i32* %i, i32 16384
103   %3 = load i32, i32* %2
104   %4 = add nsw i32 %1, %3
105   %5 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 0)
106   %6 = add nsw i32 %4, %5
107   %7 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 1)
108   %8 = add nsw i32 %6, %7
109   %9 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 98)
110   %10 = add nsw i32 %8, %9
111   %11 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 99)
112   %12 = add nsw i32 %10, %11
113   %13 = load i32, i32* getelementptr inbounds ([10 x i32], [10 x i32]* @s, i32 0, i32 0)
114   %14 = add nsw i32 %12, %13
115   %15 = load i32, i32* getelementptr inbounds ([10 x i32], [10 x i32]* @s, i32 0, i32 9)
116   %16 = add nsw i32 %14, %15
117   ret i32 %16
118 }
119
120
121 ; CHECK-LABEL: UnknownSize:
122 ; CHECK: ldw r0, dp[NoSize+40]
123 ; CHECK-NEXT: retsp 0
124 ;
125 ; LARGE: .section .cp.rodata,"ac",@progbits
126 ; LARGE: .LCPI{{[0-9_]*}}
127 ; LARGE-NEXT: .long NoSize
128 ; LARGE-NEXT: .text
129 ; LARGE-LABEL: UnknownSize:
130 ; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}]
131 ; LARGE-NEXT: ldw r0, r0[0]
132 ; LARGE-NEXT: retsp 0
133 @NoSize = external global [0 x i32]
134 define i32 @UnknownSize() nounwind {
135 entry:
136   %0 = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @NoSize, i32 0, i32 10)
137   ret i32 %0
138 }
139
140
141 ; CHECK-LABEL: UnknownStruct:
142 ; CHECK: ldaw r0, dp[Unknown]
143 ; CHECK-NEXT: retsp 0
144 ;
145 ; LARGE: .section .cp.rodata,"ac",@progbits
146 ; LARGE: .LCPI{{[0-9_]*}}
147 ; LARGE-NEXT: .long Unknown
148 ; LARGE-NEXT: .text
149 ; LARGE-LABEL: UnknownStruct:
150 ; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}]
151 ; LARGE-NEXT: retsp 0
152 %Struct = type opaque
153 @Unknown = external global %Struct
154 define %Struct* @UnknownStruct() nounwind {
155 entry:
156   ret %Struct* @Unknown
157 }
158
159
160 ; CHECK: .section .dp.bss,"awd",@nobits
161 ; CHECK-LABEL: l:
162 ; CHECK: .space 400
163 ; LARGE: .section  .dp.bss.large,"awd",@nobits
164 ; LARGE-LABEL: l:
165 ; LARGE: .space  400
166 @l = global [100 x i32] zeroinitializer
167
168 ; CHECK-LABEL: s:
169 ; CHECK: .space 40
170 ; LARGE: .section  .dp.bss,"awd",@nobits
171 ; LARGE-LABEL: s:
172 ; LARGE: .space  40
173 @s = global [10 x i32] zeroinitializer
174
175 ; CHECK: .section .dp.rodata,"awd",@progbits
176 ; CHECK-LABEL: cl:
177 ; CHECK: .space 400
178 ; LARGE: .section .dp.rodata.large,"awd",@progbits
179 ; LARGE-LABEL: cl:
180 ; LARGE: .space 400
181 @cl = constant  [100 x i32] zeroinitializer
182
183 ; CHECK-LABEL: cs:
184 ; CHECK: .space 40
185 ; LARGE: .section .dp.rodata,"awd",@progbits
186 ; LARGE-LABEL: cs:
187 ; LARGE: .space 40
188 @cs = constant  [10 x i32] zeroinitializer
189
190 ; CHECK: .section .cp.rodata,"ac",@progbits
191 ; CHECK-LABEL: icl:
192 ; CHECK: .space 400
193 ; LARGE: .section .cp.rodata.large,"ac",@progbits
194 ; LARGE-LABEL: icl:
195 ; LARGE: .space 400
196 @icl = internal constant  [100 x i32] zeroinitializer
197
198 ; CHECK-LABEL: cs:
199 ; CHECK: .space 40
200 ; LARGE: .section .cp.rodata,"ac",@progbits
201 ; LARGE-LABEL: cs:
202 ; LARGE: .space 40
203 @ics = internal constant  [10 x i32] zeroinitializer
204
205 ; CHECK: .section  .cp.namedsection,"ac",@progbits
206 ; CHECK-LABEL: cpsec:
207 ; CHECK: .long 0
208 @cpsec = constant i32 0, section ".cp.namedsection"
209
210 ; CHECK: .section  .dp.namedsection,"awd",@progbits
211 ; CHECK-LABEL: dpsec:
212 ; CHECK: .long 0
213 @dpsec = global i32 0, section ".dp.namedsection"
214