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