diff options
Diffstat (limited to 'test/CodeGen/XCore/codemodel.ll')
| -rw-r--r-- | test/CodeGen/XCore/codemodel.ll | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/test/CodeGen/XCore/codemodel.ll b/test/CodeGen/XCore/codemodel.ll new file mode 100644 index 000000000000..0245893c478d --- /dev/null +++ b/test/CodeGen/XCore/codemodel.ll @@ -0,0 +1,213 @@ + +; RUN: not llc < %s -march=xcore -code-model=medium 2>&1 | FileCheck %s -check-prefix=BAD_CM +; RUN: not llc < %s -march=xcore -code-model=kernel 2>&1 | FileCheck %s -check-prefix=BAD_CM +; BAD_CM: Target only supports CodeModel Small or Large + + +; RUN: llc < %s -march=xcore -code-model=default | FileCheck %s +; RUN: llc < %s -march=xcore -code-model=small | FileCheck %s +; RUN: llc < %s -march=xcore -code-model=large | FileCheck %s -check-prefix=LARGE + + +; CHECK-LABEL: test: +; CHECK: zext r0, 1 +; CHECK: bt r0, [[JUMP:.LBB[0-9_]*]] +; CHECK: ldaw r0, dp[A2] +; CHECK: retsp 0 +; CHECK: [[JUMP]] +; CHECK: ldaw r0, dp[A1] +; CHECK: retsp 0 +; LARGE-LABEL: test: +; LARGE: zext r0, 1 +; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}] +; LARGE: mov r1, r11 +; LARGE: ldaw r11, cp[.LCPI{{[0-9_]*}}] +; LARGE: bt r0, [[JUMP:.LBB[0-9_]*]] +; LARGE: mov r11, r1 +; LARGE: [[JUMP]] +; LARGE: ldw r0, r11[0] +; LARGE: retsp 0 +@A1 = external global [50000 x i32] +@A2 = external global [50000 x i32] +define [50000 x i32]* @test(i1 %bool) nounwind { +entry: + %Addr = select i1 %bool, [50000 x i32]* @A1, [50000 x i32]* @A2 + ret [50000 x i32]* %Addr +} + + +; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,4 +; CHECK: .long 65536 +; CHECK: .text +; CHECK-LABEL: f: +; CHECK: ldc r1, 65532 +; CHECK: add r1, r0, r1 +; CHECK: ldw r1, r1[0] +; CHECK: ldw r2, cp[.LCPI{{[0-9_]*}}] +; CHECK: add r0, r0, r2 +; CHECK: ldw r0, r0[0] +; CHECK: add r0, r1, r0 +; CHECK: ldw r1, dp[l] +; CHECK: add r0, r0, r1 +; CHECK: ldw r1, dp[l+4] +; CHECK: add r0, r0, r1 +; CHECK: ldw r1, dp[l+392] +; CHECK: add r0, r0, r1 +; CHECK: ldw r1, dp[l+396] +; CHECK: add r0, r0, r1 +; CHECK: ldw r1, dp[s] +; CHECK: add r0, r0, r1 +; CHECK: ldw r1, dp[s+36] +; CHECK: add r0, r0, r1 +; CHECK: retsp 0 +; +; LARGE: .section .cp.rodata.cst4,"aMc",@progbits,4 +; LARGE: .long 65536 +; LARGE: .section .cp.rodata,"ac",@progbits +; LARGE: .long l +; LARGE: .long l+4 +; LARGE: .long l+392 +; LARGE: .long l+396 +; LARGE: .text +; LARGE-LABEL: f: +; LARGE: ldc r1, 65532 +; LARGE: add r1, r0, r1 +; LARGE: ldw r1, r1[0] +; LARGE: ldw r2, cp[.LCPI{{[0-9_]*}}] +; LARGE: add r0, r0, r2 +; LARGE: ldw r0, r0[0] +; LARGE: add r0, r1, r0 +; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}] +; LARGE: ldw r1, r1[0] +; LARGE: add r0, r0, r1 +; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}] +; LARGE: ldw r1, r1[0] +; LARGE: add r0, r0, r1 +; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}] +; LARGE: ldw r1, r1[0] +; LARGE: add r0, r0, r1 +; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}] +; LARGE: ldw r1, r1[0] +; LARGE: add r0, r0, r1 +; LARGE: ldw r1, dp[s] +; LARGE: add r0, r0, r1 +; LARGE: ldw r1, dp[s+36] +; LARGE: add r0, r0, r1 +; LARGE: retsp 0 +define i32 @f(i32* %i) { +entry: + %0 = getelementptr inbounds i32* %i, i32 16383 + %1 = load i32* %0 + %2 = getelementptr inbounds i32* %i, i32 16384 + %3 = load i32* %2 + %4 = add nsw i32 %1, %3 + %5 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 0) + %6 = add nsw i32 %4, %5 + %7 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 1) + %8 = add nsw i32 %6, %7 + %9 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 98) + %10 = add nsw i32 %8, %9 + %11 = load i32* getelementptr inbounds ([100 x i32]* @l, i32 0, i32 99) + %12 = add nsw i32 %10, %11 + %13 = load i32* getelementptr inbounds ([10 x i32]* @s, i32 0, i32 0) + %14 = add nsw i32 %12, %13 + %15 = load i32* getelementptr inbounds ([10 x i32]* @s, i32 0, i32 9) + %16 = add nsw i32 %14, %15 + ret i32 %16 +} + + +; CHECK-LABEL: UnknownSize: +; CHECK: ldw r0, dp[NoSize+40] +; CHECK-NEXT: retsp 0 +; +; LARGE: .section .cp.rodata,"ac",@progbits +; LARGE: .LCPI{{[0-9_]*}} +; LARGE-NEXT: .long NoSize +; LARGE-NEXT: .text +; LARGE-LABEL: UnknownSize: +; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}] +; LARGE-NEXT: ldw r0, r0[0] +; LARGE-NEXT: retsp 0 +@NoSize = external global [0 x i32] +define i32 @UnknownSize() nounwind { +entry: + %0 = load i32* getelementptr inbounds ([0 x i32]* @NoSize, i32 0, i32 10) + ret i32 %0 +} + + +; CHECK-LABEL: UnknownStruct: +; CHECK: ldaw r0, dp[Unknown] +; CHECK-NEXT: retsp 0 +; +; LARGE: .section .cp.rodata,"ac",@progbits +; LARGE: .LCPI{{[0-9_]*}} +; LARGE-NEXT: .long Unknown +; LARGE-NEXT: .text +; LARGE-LABEL: UnknownStruct: +; LARGE: ldw r0, cp[.LCPI{{[0-9_]*}}] +; LARGE-NEXT: retsp 0 +%Struct = type opaque +@Unknown = external global %Struct +define %Struct* @UnknownStruct() nounwind { +entry: + ret %Struct* @Unknown +} + + +; CHECK: .section .dp.bss,"awd",@nobits +; CHECK-LABEL: l: +; CHECK: .space 400 +; LARGE: .section .dp.bss.large,"awd",@nobits +; LARGE-LABEL: l: +; LARGE: .space 400 +@l = global [100 x i32] zeroinitializer + +; CHECK-LABEL: s: +; CHECK: .space 40 +; LARGE: .section .dp.bss,"awd",@nobits +; LARGE-LABEL: s: +; LARGE: .space 40 +@s = global [10 x i32] zeroinitializer + +; CHECK: .section .dp.rodata,"awd",@progbits +; CHECK-LABEL: cl: +; CHECK: .space 400 +; LARGE: .section .dp.rodata.large,"awd",@progbits +; LARGE-LABEL: cl: +; LARGE: .space 400 +@cl = constant [100 x i32] zeroinitializer + +; CHECK-LABEL: cs: +; CHECK: .space 40 +; LARGE: .section .dp.rodata,"awd",@progbits +; LARGE-LABEL: cs: +; LARGE: .space 40 +@cs = constant [10 x i32] zeroinitializer + +; CHECK: .section .cp.rodata,"ac",@progbits +; CHECK-LABEL: icl: +; CHECK: .space 400 +; LARGE: .section .cp.rodata.large,"ac",@progbits +; LARGE-LABEL: icl: +; LARGE: .space 400 +@icl = internal constant [100 x i32] zeroinitializer + +; CHECK-LABEL: cs: +; CHECK: .space 40 +; LARGE: .section .cp.rodata,"ac",@progbits +; LARGE-LABEL: cs: +; LARGE: .space 40 +@ics = internal constant [10 x i32] zeroinitializer + +; CHECK: .section .cp.namedsection,"ac",@progbits +; CHECK-LABEL: cpsec: +; CHECK: .long 0 +@cpsec = constant i32 0, section ".cp.namedsection" + +; CHECK: .section .dp.namedsection,"awd",@progbits +; CHECK-LABEL: dpsec: +; CHECK: .long 0 +@dpsec = global i32 0, section ".dp.namedsection" + |
