Imported Upstream version 5.18.0.167

Former-commit-id: 289509151e0fee68a1b591a20c9f109c3c789d3a
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-10-20 08:25:10 +00:00
parent e19d552987
commit b084638f15
28489 changed files with 184 additions and 3866856 deletions

View File

@ -1,6 +0,0 @@
; RUN: llc < %s -march=xcore > %t1.s
; PR3080
define i64 @test(i64 %a) {
%result = shl i64 %a, 1
ret i64 %result
}

View File

@ -1,12 +0,0 @@
; RUN: llc < %s -march=xcore > %t1.s
;; This caused a compilation failure since the
;; address arithmetic was folded into the LDWSP instruction,
;; resulting in a negative offset which eliminateFrameIndex was
;; unable to eliminate.
define i32 @test(i32 %bar) nounwind readnone {
entry:
%bar_addr = alloca i32
%0 = getelementptr i32, i32* %bar_addr, i32 -1
%1 = load i32, i32* %0, align 4
ret i32 %1
}

View File

@ -1,18 +0,0 @@
; RUN: llc < %s -march=xcore > %t1.s
; PR3324
define double @f1(double %a, double %b, double %c, double %d, double %e, double %f, double %g) nounwind {
entry:
br i1 false, label %bb113, label %bb129
bb113: ; preds = %entry
ret double 0.000000e+00
bb129: ; preds = %entry
%tmp134 = fsub double %b, %a ; <double> [#uses=1]
%tmp136 = fsub double %tmp134, %c ; <double> [#uses=1]
%tmp138 = fadd double %tmp136, %d ; <double> [#uses=1]
%tmp140 = fsub double %tmp138, %e ; <double> [#uses=1]
%tmp142 = fadd double %tmp140, %f ; <double> [#uses=1]
%tmp.0 = fmul double %tmp142, 0.000000e+00 ; <double> [#uses=1]
ret double %tmp.0
}

View File

@ -1,6 +0,0 @@
; RUN: llc < %s -march=xcore
; PR3898
define i32 @vector_param(<2 x double> %x) nounwind {
ret i32 1
}

View File

@ -1,7 +0,0 @@
; RUN: llc < %s -march=xcore > %t1.s
define void @store32(i8* %p) nounwind {
entry:
%0 = bitcast i8* %p to i192*
store i192 0, i192* %0, align 4
ret void
}

View File

@ -1,26 +0,0 @@
; RUN: llc < %s -march=xcore
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32"
target triple = "xcore-xmos-elf"
%0 = type { i32 }
%struct.dwarf_fde = type <{ i32, i32, [0 x i8] }>
%struct.object = type { i8*, i8*, i8*, %union.anon, %0, %struct.object* }
%union.anon = type { %struct.dwarf_fde* }
define %struct.dwarf_fde* @search_object(%struct.object* %ob, i8* %pc) {
entry:
br i1 undef, label %bb3.i15.i.i, label %bb2
bb3.i15.i.i: ; preds = %bb3.i15.i.i, %entry
%indvar.i.i.i = phi i32 [ %indvar.next.i.i.i, %bb3.i15.i.i ], [ 0, %entry ] ; <i32> [#uses=2]
%tmp137 = sub i32 0, %indvar.i.i.i ; <i32> [#uses=1]
%scevgep13.i.i.i = getelementptr i32, i32* undef, i32 %tmp137 ; <i32*> [#uses=2]
%scevgep1314.i.i.i = bitcast i32* %scevgep13.i.i.i to %struct.dwarf_fde** ; <%struct.dwarf_fde**> [#uses=1]
%0 = load %struct.dwarf_fde*, %struct.dwarf_fde** %scevgep1314.i.i.i, align 4 ; <%struct.dwarf_fde*> [#uses=0]
store i32 undef, i32* %scevgep13.i.i.i
%indvar.next.i.i.i = add i32 %indvar.i.i.i, 1 ; <i32> [#uses=1]
br label %bb3.i15.i.i
bb2: ; preds = %entry
ret %struct.dwarf_fde* undef
}

View File

@ -1,10 +0,0 @@
; RUN: llc < %s -march=xcore
%struct.st = type <{ i8, i32, i8, i32, i8, i32 }>
@x = external global %struct.st, align 4
define i32 @test_entry() nounwind {
entry:
%0 = load i32, i32* getelementptr inbounds (%struct.st, %struct.st* @x, i32 0, i32 3), align 2
ret i32 %0
}

View File

@ -1,20 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
declare void @g()
declare i8* @llvm.stacksave() nounwind
declare void @llvm.stackrestore(i8*) nounwind
define void @f(i32** %p, i32 %size) {
allocas:
%0 = call i8* @llvm.stacksave()
%a = alloca i32, i32 %size
store i32* %a, i32** %p
call void @g()
call void @llvm.stackrestore(i8* %0)
ret void
}
; CHECK-LABEL: f:
; CHECK: ldaw [[REGISTER:r[0-9]+]], {{r[0-9]+}}[-r1]
; CHECK: set sp, [[REGISTER]]
; CHECK: extsp 1
; CHECK: bl g

View File

@ -1 +0,0 @@
RUN: llc -O0 -march=xcore -asm-verbose < %S/../Inputs/DbgValueOtherTargets.ll | FileCheck %S/../Inputs/DbgValueOtherTargets.ll

View File

@ -1,59 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
define i64 @add64(i64 %a, i64 %b) {
%result = add i64 %a, %b
ret i64 %result
}
; CHECK: add64
; CHECK: ldc r11, 0
; CHECK-NEXT: ladd r2, r0, r0, r2, r11
; CHECK-NEXT: ladd r2, r1, r1, r3, r2
; CHECK-NEXT: retsp 0
define i64 @sub64(i64 %a, i64 %b) {
%result = sub i64 %a, %b
ret i64 %result
}
; CHECK: sub64
; CHECK: ldc r11, 0
; CHECK-NEXT: lsub r2, r0, r0, r2, r11
; CHECK-NEXT: lsub r2, r1, r1, r3, r2
; CHECK-NEXT: retsp 0
define i64 @maccu(i64 %a, i32 %b, i32 %c) {
entry:
%0 = zext i32 %b to i64
%1 = zext i32 %c to i64
%2 = mul i64 %1, %0
%3 = add i64 %2, %a
ret i64 %3
}
; CHECK-LABEL: maccu:
; CHECK: maccu r1, r0, r3, r2
; CHECK-NEXT: retsp 0
define i64 @maccs(i64 %a, i32 %b, i32 %c) {
entry:
%0 = sext i32 %b to i64
%1 = sext i32 %c to i64
%2 = mul i64 %1, %0
%3 = add i64 %2, %a
ret i64 %3
}
; CHECK-LABEL: maccs:
; CHECK: maccs r1, r0, r3, r2
; CHECK-NEXT: retsp 0
define i64 @lmul(i32 %a, i32 %b, i32 %c, i32 %d) {
entry:
%0 = zext i32 %a to i64
%1 = zext i32 %b to i64
%2 = zext i32 %c to i64
%3 = zext i32 %d to i64
%4 = mul i64 %1, %0
%5 = add i64 %4, %2
%6 = add i64 %5, %3
ret i64 %6
}
; CHECK-LABEL: lmul:
; CHECK: lmul r1, r0, r1, r0, r2, r3
; CHECK-NEXT: retsp 0

View File

@ -1,34 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
define void @a_val() nounwind {
ret void
}
@b_val = constant i32 42, section ".cp.rodata"
@c_val = global i32 42
@a = alias void (), void ()* @a_val
@b = alias i32, i32* @b_val
@c = alias i32, i32* @c_val
; CHECK-LABEL: a_addr:
; CHECK: ldap r11, a
; CHECK: retsp
define void ()* @a_addr() nounwind {
entry:
ret void ()* @a
}
; CHECK-LABEL: b_addr:
; CHECK: ldaw r11, cp[b]
; CHECK: retsp
define i32 *@b_addr() nounwind {
entry:
ret i32* @b
}
; CHECK-LABEL: c_addr:
; CHECK: ldaw r0, dp[c]
; CHECK: retsp
define i32 *@c_addr() nounwind {
entry:
ret i32* @c
}

View File

@ -1,15 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
; CHECK: .p2align 2
; CHECK-LABEL: f:
define void @f() nounwind {
entry:
ret void
}
; CHECK: .p2align 1
; CHECK-LABEL: g:
define void @g() nounwind optsize {
entry:
ret void
}

View File

@ -1,9 +0,0 @@
; RUN: not llc < %s -march=xcore 2>&1 | FileCheck %s
; CHECK: emitPrologue unsupported alignment: 8
define void @f() nounwind {
entry:
%BadAlignment = alloca i64, align 8
ret void
}

View File

@ -1,76 +0,0 @@
; RUN: llc < %s -march=xcore -asm-verbose=0 | FileCheck %s
define i32 @ashr(i32 %a, i32 %b) nounwind {
%1 = ashr i32 %a, %b
ret i32 %1
}
; CHECK-LABEL: ashr:
; CHECK-NEXT: ashr r0, r0, r1
define i32 @ashri1(i32 %a) nounwind {
%1 = ashr i32 %a, 24
ret i32 %1
}
; CHECK-LABEL: ashri1:
; CHECK-NEXT: ashr r0, r0, 24
define i32 @ashri2(i32 %a) nounwind {
%1 = ashr i32 %a, 31
ret i32 %1
}
; CHECK-LABEL: ashri2:
; CHECK-NEXT: ashr r0, r0, 32
define i32 @f1(i32 %a) nounwind nounwind {
%1 = icmp slt i32 %a, 0
br i1 %1, label %less, label %not_less
less:
ret i32 10
not_less:
ret i32 17
}
; CHECK-LABEL: f1:
; CHECK-NEXT: ashr r0, r0, 32
; CHECK-NEXT: bt r0
define i32 @f2(i32 %a) nounwind {
%1 = icmp sge i32 %a, 0
br i1 %1, label %greater, label %not_greater
greater:
ret i32 10
not_greater:
ret i32 17
}
; CHECK-LABEL: f2:
; CHECK-NEXT: ashr r0, r0, 32
; CHECK-NEXT: bt r0
define i32 @f3(i32 %a) nounwind {
%1 = icmp slt i32 %a, 0
%2 = select i1 %1, i32 10, i32 17
ret i32 %2
}
; CHECK-LABEL: f3:
; CHECK-NEXT: ashr r0, r0, 32
; CHECK-NEXT: bt r0
; CHECK-NEXT: ldc r0, 17
; CHECK: ldc r0, 10
define i32 @f4(i32 %a) nounwind {
%1 = icmp sge i32 %a, 0
%2 = select i1 %1, i32 10, i32 17
ret i32 %2
}
; CHECK-LABEL: f4:
; CHECK-NEXT: ashr r0, r0, 32
; CHECK-NEXT: bt r0
; CHECK-NEXT: ldc r0, 10
; CHECK: ldc r0, 17
define i32 @f5(i32 %a) nounwind {
%1 = icmp sge i32 %a, 0
%2 = zext i1 %1 to i32
ret i32 %2
}
; CHECK-LABEL: f5:
; CHECK-NEXT: ashr r0, r0, 32
; CHECK-NEXT: eq r0, r0, 0

View File

@ -1,91 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
; CHECK-LABEL: atomic_fence
; CHECK: #MEMBARRIER
; CHECK: #MEMBARRIER
; CHECK: #MEMBARRIER
; CHECK: #MEMBARRIER
; CHECK: retsp 0
define void @atomic_fence() nounwind {
entry:
fence acquire
fence release
fence acq_rel
fence seq_cst
ret void
}
@pool = external global i64
define void @atomicloadstore() nounwind {
entry:
; CHECK-LABEL: atomicloadstore
; CHECK: ldw r[[R0:[0-9]+]], dp[pool]
; CHECK-NEXT: ldaw r[[R1:[0-9]+]], dp[pool]
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: ldc r[[R2:[0-9]+]], 0
%0 = load atomic i32, i32* bitcast (i64* @pool to i32*) acquire, align 4
; CHECK-NEXT: ld16s r3, r[[R1]][r[[R2]]]
; CHECK-NEXT: #MEMBARRIER
%1 = load atomic i16, i16* bitcast (i64* @pool to i16*) acquire, align 2
; CHECK-NEXT: ld8u r11, r[[R1]][r[[R2]]]
; CHECK-NEXT: #MEMBARRIER
%2 = load atomic i8, i8* bitcast (i64* @pool to i8*) acquire, align 1
; CHECK-NEXT: ldw r4, dp[pool]
; CHECK-NEXT: #MEMBARRIER
%3 = load atomic i32, i32* bitcast (i64* @pool to i32*) seq_cst, align 4
; CHECK-NEXT: ld16s r5, r[[R1]][r[[R2]]]
; CHECK-NEXT: #MEMBARRIER
%4 = load atomic i16, i16* bitcast (i64* @pool to i16*) seq_cst, align 2
; CHECK-NEXT: ld8u r6, r[[R1]][r[[R2]]]
; CHECK-NEXT: #MEMBARRIER
%5 = load atomic i8, i8* bitcast (i64* @pool to i8*) seq_cst, align 1
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: stw r[[R0]], dp[pool]
store atomic i32 %0, i32* bitcast (i64* @pool to i32*) release, align 4
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: st16 r3, r[[R1]][r[[R2]]]
store atomic i16 %1, i16* bitcast (i64* @pool to i16*) release, align 2
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: st8 r11, r[[R1]][r[[R2]]]
store atomic i8 %2, i8* bitcast (i64* @pool to i8*) release, align 1
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: stw r4, dp[pool]
; CHECK-NEXT: #MEMBARRIER
store atomic i32 %3, i32* bitcast (i64* @pool to i32*) seq_cst, align 4
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: st16 r5, r[[R1]][r[[R2]]]
; CHECK-NEXT: #MEMBARRIER
store atomic i16 %4, i16* bitcast (i64* @pool to i16*) seq_cst, align 2
; CHECK-NEXT: #MEMBARRIER
; CHECK-NEXT: st8 r6, r[[R1]][r[[R2]]]
; CHECK-NEXT: #MEMBARRIER
store atomic i8 %5, i8* bitcast (i64* @pool to i8*) seq_cst, align 1
; CHECK-NEXT: ldw r[[R0]], dp[pool]
; CHECK-NEXT: stw r[[R0]], dp[pool]
; CHECK-NEXT: ld16s r[[R0]], r[[R1]][r[[R2]]]
; CHECK-NEXT: st16 r[[R0]], r[[R1]][r[[R2]]]
; CHECK-NEXT: ld8u r[[R0]], r[[R1]][r[[R2]]]
; CHECK-NEXT: st8 r[[R0]], r[[R1]][r[[R2]]]
%6 = load atomic i32, i32* bitcast (i64* @pool to i32*) monotonic, align 4
store atomic i32 %6, i32* bitcast (i64* @pool to i32*) monotonic, align 4
%7 = load atomic i16, i16* bitcast (i64* @pool to i16*) monotonic, align 2
store atomic i16 %7, i16* bitcast (i64* @pool to i16*) monotonic, align 2
%8 = load atomic i8, i8* bitcast (i64* @pool to i8*) monotonic, align 1
store atomic i8 %8, i8* bitcast (i64* @pool to i8*) monotonic, align 1
ret void
}

View File

@ -1,6 +0,0 @@
; RUN: llc < %s -march=xcore
define i32 @test(i32 %X) {
%tmp.1 = add i32 %X, 1
ret i32 %tmp.1
}

View File

@ -1,74 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
%0 = type { i32, i32, i32, i32 }
%1 = type { i32, i32, i32, i32, i32 }
; Structs of 4 words are returned in registers
define internal %0 @ReturnBigStruct() nounwind readnone {
entry:
%0 = insertvalue %0 zeroinitializer, i32 12, 0
%1 = insertvalue %0 %0, i32 24, 1
%2 = insertvalue %0 %1, i32 48, 2
%3 = insertvalue %0 %2, i32 24601, 3
ret %0 %3
}
; CHECK-LABEL: ReturnBigStruct:
; CHECK: ldc r0, 12
; CHECK: ldc r1, 24
; CHECK: ldc r2, 48
; CHECK: ldc r3, 24601
; CHECK: retsp 0
; Structs of more than 4 words are partially returned in memory so long as the
; function is not variadic.
define { i32, i32, i32, i32, i32} @f(i32, i32, i32, i32, i32) nounwind readnone {
; CHECK-LABEL: f:
; CHECK: ldc [[REGISTER:r[0-9]+]], 5
; CHECK-NEXT: stw [[REGISTER]], sp[2]
; CHECK-NEXT: retsp 0
body:
ret { i32, i32, i32, i32, i32} { i32 undef, i32 undef, i32 undef, i32 undef, i32 5}
}
@x = external global i32
@y = external global i32
; Check we call a function returning more than 4 words correctly.
define i32 @g() nounwind {
; CHECK-LABEL: g:
; CHECK: entsp 3
; CHECK: ldc [[REGISTER:r[0-9]+]], 0
; CHECK: stw [[REGISTER]], sp[1]
; CHECK: bl f
; CHECK-NEXT: ldw r0, sp[2]
; CHECK-NEXT: retsp 3
;
body:
%0 = call { i32, i32, i32, i32, i32 } @f(i32 0, i32 0, i32 0, i32 0, i32 0)
%1 = extractvalue { i32, i32, i32, i32, i32 } %0, 4
ret i32 %1
}
; Variadic functions return structs bigger than 4 words via a hidden
; sret-parameter
define internal %1 @ReturnBigStruct2(i32 %dummy, ...) nounwind readnone {
entry:
%0 = insertvalue %1 zeroinitializer, i32 12, 0
%1 = insertvalue %1 %0, i32 24, 1
%2 = insertvalue %1 %1, i32 48, 2
%3 = insertvalue %1 %2, i32 24601, 3
%4 = insertvalue %1 %3, i32 4321, 4
ret %1 %4
}
; CHECK-LABEL: ReturnBigStruct2:
; CHECK: ldc r1, 4321
; CHECK: stw r1, r0[4]
; CHECK: ldc r1, 24601
; CHECK: stw r1, r0[3]
; CHECK: ldc r1, 48
; CHECK: stw r1, r0[2]
; CHECK: ldc r1, 24
; CHECK: stw r1, r0[1]
; CHECK: ldc r1, 12
; CHECK: stw r1, r0[0]
; CHECK: retsp 0

View File

@ -1,73 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
; CHECK-LABEL: f0Test
; CHECK: entsp 1
; CHECK: bl f0
; CHECK: retsp 1
%struct.st0 = type { [0 x i32] }
declare void @f0(%struct.st0*) nounwind
define void @f0Test(%struct.st0* byval %s0) nounwind {
entry:
call void @f0(%struct.st0* %s0) nounwind
ret void
}
; CHECK-LABEL: f1Test
; CHECK: entsp 13
; CHECK: stw r4, sp[12]
; CHECK: stw r5, sp[11]
; CHECK: mov r4, r0
; CHECK: ldaw r5, sp[1]
; CHECK: ldc r2, 40
; CHECK: mov r0, r5
; CHECK: bl __memcpy_4
; CHECK: mov r0, r5
; CHECK: bl f1
; CHECK: mov r0, r4
; CHECK: ldw r5, sp[11]
; CHECK: ldw r4, sp[12]
; CHECK: retsp 13
%struct.st1 = type { [10 x i32] }
declare void @f1(%struct.st1*) nounwind
define i32 @f1Test(i32 %i, %struct.st1* byval %s1) nounwind {
entry:
call void @f1(%struct.st1* %s1) nounwind
ret i32 %i
}
; CHECK-LABEL: f2Test
; CHECK: extsp 4
; CHECK: stw lr, sp[1]
; CHECK: stw r2, sp[3]
; CHECK: stw r3, sp[4]
; CHECK: ldw r0, r0[0]
; CHECK: stw r0, sp[2]
; CHECK: ldaw r2, sp[2]
; CHECK: mov r0, r1
; CHECK: mov r1, r2
; CHECK: bl f2
; CHECK: ldw lr, sp[1]
; CHECK: ldaw sp, sp[4]
; CHECK: retsp 0
%struct.st2 = type { i32 }
declare void @f2(i32, %struct.st2*) nounwind
define void @f2Test(%struct.st2* byval %s2, i32 %i, ...) nounwind {
entry:
call void @f2(i32 %i, %struct.st2* %s2)
ret void
}
; CHECK-LABEL: f3Test
; CHECK: entsp 2
; CHECK: ldc r1, 0
; CHECK: ld8u r2, r0[r1]
; CHECK: ldaw r0, sp[1]
; CHECK: st8 r2, r0[r1]
; CHECK: bl f
; CHECK: retsp 2
declare void @f3(i8*) nounwind
define void @f3Test(i8* byval %v) nounwind {
entry:
call void @f3(i8* %v) nounwind
ret void
}

View File

@ -1,10 +0,0 @@
; RUN: llc < %s -march=xcore | FileCheck %s
; CHECK-LABEL: bl_imm:
; CHECK: ldw [[R0:r[0-9]+]], cp
; CHECK: bla [[R0]]
define void @bl_imm() nounwind {
entry:
tail call void inttoptr (i64 65536 to void ()*)() nounwind
ret void
}

View File

@ -1,213 +0,0 @@
; 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 | 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, i32* %i, i32 16383
%1 = load i32, i32* %0
%2 = getelementptr inbounds i32, i32* %i, i32 16384
%3 = load i32, i32* %2
%4 = add nsw i32 %1, %3
%5 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 0)
%6 = add nsw i32 %4, %5
%7 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 1)
%8 = add nsw i32 %6, %7
%9 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 98)
%10 = add nsw i32 %8, %9
%11 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @l, i32 0, i32 99)
%12 = add nsw i32 %10, %11
%13 = load i32, i32* getelementptr inbounds ([10 x i32], [10 x i32]* @s, i32 0, i32 0)
%14 = add nsw i32 %12, %13
%15 = load i32, i32* getelementptr inbounds ([10 x i32], [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, i32* getelementptr inbounds ([0 x i32], [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"

Some files were not shown because too many files have changed in this diff Show More