[AArch64, fast-isel] Fall back to SelectionDAG to select tail calls.
[oota-llvm.git] / test / CodeGen / XCore / codemodel.ll
index e86627cc41f763e7f714866621fdf2b9210bb148..0245893c478d4e57bf4f9a41ae662e90cd13d0ae 100644 (file)
@@ -8,6 +8,34 @@
 ; 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
@@ -15,7 +43,7 @@
 ; CHECK: ldc r1, 65532
 ; CHECK: add r1, r0, r1
 ; CHECK: ldw r1, r1[0]
-; CHECK: ldw r2, cp[.LCPI0_0]
+; CHECK: ldw r2, cp[.LCPI{{[0-9_]*}}]
 ; CHECK: add r0, r0, r2
 ; CHECK: ldw r0, r0[0]
 ; CHECK: add r0, r1, r0
 ; LARGE: ldc r1, 65532
 ; LARGE: add r1, r0, r1
 ; LARGE: ldw r1, r1[0]
-; LARGE: ldw r2, cp[.LCPI0_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[.LCPI0_1]
+; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
 ; LARGE: ldw r1, r1[0]
 ; LARGE: add r0, r0, r1
-; LARGE: ldw r1, cp[.LCPI0_2]
+; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
 ; LARGE: ldw r1, r1[0]
 ; LARGE: add r0, r0, r1
-; LARGE: ldw r1, cp[.LCPI0_3]
+; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
 ; LARGE: ldw r1, r1[0]
 ; LARGE: add r0, r0, r1
-; LARGE: ldw r1, cp[.LCPI0_4]
+; LARGE: ldw r1, cp[.LCPI{{[0-9_]*}}]
 ; LARGE: ldw r1, r1[0]
 ; LARGE: add r0, r0, r1
 ; LARGE: ldw r1, dp[s]
@@ -88,6 +116,46 @@ entry:
   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
@@ -103,27 +171,43 @@ entry:
 ; LARGE: .space  40
 @s = global [10 x i32] zeroinitializer
 
-; CHECK: .section .cp.rodata,"ac",@progbits
+; CHECK: .section .dp.rodata,"awd",@progbits
 ; CHECK-LABEL: cl:
 ; CHECK: .space 400
-; LARGE: .section .cp.rodata.large,"ac",@progbits
+; 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 .cp.rodata,"ac",@progbits
+; 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 = global i32 0, section ".cp.namedsection"
+@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"
+