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
14 ; CHECK: bt r0, [[JUMP:.LBB[0-9_]*]]
15 ; CHECK: ldaw r0, dp[A2]
18 ; CHECK: ldaw r0, dp[A1]
22 ; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}]
24 ; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}]
25 ; LARGE: bt r0, [[JUMP:.LBB[0-9_]*]]
28 ; LARGE: ldw r0, r11[0]
30 @A1 = external global [50000 x i32]
31 @A2 = external global [50000 x i32]
32 define [50000 x i32]* @test(i1 %bool) nounwind {
34 %Addr = select i1 %bool, [50000 x i32]* @A1, [50000 x i32]* @A2
35 ret [50000 x i32]* %Addr
38 ; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,4
42 ; CHECK: ldc r1, 65532
43 ; CHECK: add r1, r0, r1
44 ; CHECK: ldw r1, r1[0]
45 ; CHECK: ldw r2, cp[.LCPI{{[0-9_]*}}]
46 ; CHECK: add r0, r0, r2
47 ; CHECK: ldw r0, r0[0]
48 ; CHECK: add r0, r1, r0
49 ; CHECK: ldw r1, dp[l]
50 ; CHECK: add r0, r0, r1
51 ; CHECK: ldw r1, dp[l+4]
52 ; CHECK: add r0, r0, r1
53 ; CHECK: ldw r1, dp[l+392]
54 ; CHECK: add r0, r0, r1
55 ; CHECK: ldw r1, dp[l+396]
56 ; CHECK: add r0, r0, r1
57 ; CHECK: ldw r1, dp[s]
58 ; CHECK: add r0, r0, r1
59 ; CHECK: ldw r1, dp[s+36]
60 ; CHECK: add r0, r0, r1
63 ; LARGE: .section .cp.rodata.cst4,"aMc",@progbits,4
65 ; LARGE: .section .cp.rodata,"ac",@progbits
72 ; LARGE: ldc r1, 65532
73 ; LARGE: add r1, r0, r1
74 ; LARGE: ldw r1, r1[0]
75 ; LARGE: ldw r2, cp[.LCPI{{[0-9_]*}}]
76 ; LARGE: add r0, r0, r2
77 ; LARGE: ldw r0, r0[0]
78 ; LARGE: add r0, r1, r0
79 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
80 ; LARGE: ldw r1, r1[0]
81 ; LARGE: add r0, r0, r1
82 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
83 ; LARGE: ldw r1, r1[0]
84 ; LARGE: add r0, r0, r1
85 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
86 ; LARGE: ldw r1, r1[0]
87 ; LARGE: add r0, r0, r1
88 ; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
89 ; LARGE: ldw r1, r1[0]
90 ; LARGE: add r0, r0, r1
91 ; LARGE: ldw r1, dp[s]
92 ; LARGE: add r0, r0, r1
93 ; LARGE: ldw r1, dp[s+36]
94 ; LARGE: add r0, r0, r1
96 define i32 @f(i32* %i) {
98 %0 = getelementptr inbounds i32* %i, i32 16383
100 %2 = getelementptr inbounds i32* %i, i32 16384
102 %4 = add nsw i32 %1, %3
103 %5 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 0)
104 %6 = add nsw i32 %4, %5
105 %7 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 1)
106 %8 = add nsw i32 %6, %7
107 %9 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 98)
108 %10 = add nsw i32 %8, %9
109 %11 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 99)
110 %12 = add nsw i32 %10, %11
111 %13 = load i32* getelementptr inbounds ([10 x i32]* @s, i32 0, i32 0)
112 %14 = add nsw i32 %12, %13
113 %15 = load i32* getelementptr inbounds ([10 x i32]* @s, i32 0, i32 9)
114 %16 = add nsw i32 %14, %15
118 ; CHECK: .section .dp.bss,"awd",@nobits
121 ; LARGE: .section .dp.bss.large,"awd",@nobits
124 @l = global [100 x i32] zeroinitializer
128 ; LARGE: .section .dp.bss,"awd",@nobits
131 @s = global [10 x i32] zeroinitializer
133 ; CHECK: .section .cp.rodata,"ac",@progbits
136 ; LARGE: .section .cp.rodata.large,"ac",@progbits
139 @cl = constant [100 x i32] zeroinitializer
143 ; LARGE: .section .cp.rodata,"ac",@progbits
146 @cs = constant [10 x i32] zeroinitializer
148 ; CHECK: .section .cp.namedsection,"ac",@progbits
149 ; CHECK-LABEL: cpsec:
151 @cpsec = global i32 0, section ".cp.namedsection"
153 ; CHECK: .section .dp.namedsection,"awd",@progbits
154 ; CHECK-LABEL: dpsec:
156 @dpsec = global i32 0, section ".dp.namedsection"