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
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
11 ; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,4
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
36 ; LARGE: .section .cp.rodata.cst4,"aMc",@progbits,4
38 ; LARGE: .section .cp.rodata,"ac",@progbits
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
69 define i32 @f(i32* %i) {
71 %0 = getelementptr inbounds i32* %i, i32 16383
73 %2 = getelementptr inbounds i32* %i, i32 16384
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
91 ; CHECK: .section .dp.bss,"awd",@nobits
94 ; LARGE: .section .dp.bss.large,"awd",@nobits
97 @l = global [100 x i32] zeroinitializer
101 ; LARGE: .section .dp.bss,"awd",@nobits
104 @s = global [10 x i32] zeroinitializer
106 ; CHECK: .section .cp.rodata,"ac",@progbits
109 ; LARGE: .section .cp.rodata.large,"ac",@progbits
112 @cl = constant [100 x i32] zeroinitializer
116 ; LARGE: .section .cp.rodata,"ac",@progbits
119 @cs = constant [10 x i32] zeroinitializer
121 ; CHECK: .section .cp.namedsection,"ac",@progbits
122 ; CHECK-LABEL: cpsec:
124 @cpsec = global i32 0, section ".cp.namedsection"
126 ; CHECK: .section .dp.namedsection,"awd",@progbits
127 ; CHECK-LABEL: dpsec:
129 @dpsec = global i32 0, section ".dp.namedsection"