diff options
author | dim <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2011-05-02 19:34:44 +0000 |
commit | 2b066988909948dc3d53d01760bc2d71d32f3feb (patch) | |
tree | fc5f365fb9035b2d0c622bbf06c9bbe8627d7279 /test/CodeGen/XCore | |
parent | c80ac9d286b8fcc6d1ee5d76048134cf80aa9edc (diff) | |
download | FreeBSD-src-2b066988909948dc3d53d01760bc2d71d32f3feb.zip FreeBSD-src-2b066988909948dc3d53d01760bc2d71d32f3feb.tar.gz |
Vendor import of llvm trunk r130700:
http://llvm.org/svn/llvm-project/llvm/trunk@130700
Diffstat (limited to 'test/CodeGen/XCore')
-rw-r--r-- | test/CodeGen/XCore/events.ll | 20 | ||||
-rw-r--r-- | test/CodeGen/XCore/mul64.ll | 33 | ||||
-rw-r--r-- | test/CodeGen/XCore/ps-intrinsics.ll | 18 | ||||
-rw-r--r-- | test/CodeGen/XCore/resources.ll | 24 | ||||
-rw-r--r-- | test/CodeGen/XCore/scavenging.ll | 52 | ||||
-rw-r--r-- | test/CodeGen/XCore/sr-intrinsics.ll | 18 | ||||
-rw-r--r-- | test/CodeGen/XCore/threads.ll | 67 | ||||
-rw-r--r-- | test/CodeGen/XCore/trampoline.ll | 4 |
8 files changed, 218 insertions, 18 deletions
diff --git a/test/CodeGen/XCore/events.ll b/test/CodeGen/XCore/events.ll index 4fc2f26..30a6ec3 100644 --- a/test/CodeGen/XCore/events.ll +++ b/test/CodeGen/XCore/events.ll @@ -2,6 +2,7 @@ declare void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p) declare i8* @llvm.xcore.waitevent() +declare i8* @llvm.xcore.checkevent(i8*) declare void @llvm.xcore.clre() define i32 @f(i8 addrspace(1)* %r) nounwind { @@ -22,3 +23,22 @@ ret: %retval = phi i32 [1, %L1], [2, %L2] ret i32 %retval } + +define i32 @g(i8 addrspace(1)* %r) nounwind { +; CHECK: g: +entry: +; CHECK: clre + call void @llvm.xcore.clre() + call void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* blockaddress(@f, %L1)) + %goto_addr = call i8* @llvm.xcore.checkevent(i8 *blockaddress(@f, %L2)) +; CHECK: setsr 1 +; CHECK: clrsr 1 + indirectbr i8* %goto_addr, [label %L1, label %L2] +L1: + br label %ret +L2: + br label %ret +ret: + %retval = phi i32 [1, %L1], [2, %L2] + ret i32 %retval +} diff --git a/test/CodeGen/XCore/mul64.ll b/test/CodeGen/XCore/mul64.ll index 1dc9471..77c6b42 100644 --- a/test/CodeGen/XCore/mul64.ll +++ b/test/CodeGen/XCore/mul64.ll @@ -1,4 +1,5 @@ ; RUN: llc < %s -march=xcore | FileCheck %s +; RUN: llc < %s -march=xcore -regalloc=basic | FileCheck %s define i64 @umul_lohi(i32 %a, i32 %b) { entry: %0 = zext i32 %a to i64 @@ -7,8 +8,8 @@ entry: ret i64 %2 } ; CHECK: umul_lohi: -; CHECK: ldc r2, 0 -; CHECK-NEXT: lmul r1, r0, r1, r0, r2, r2 +; CHECK: ldc [[REG:r[0-9]+]], 0 +; CHECK-NEXT: lmul r1, r0, r1, r0, [[REG]], [[REG]] ; CHECK-NEXT: retsp 0 define i64 @smul_lohi(i32 %a, i32 %b) { @@ -19,11 +20,11 @@ entry: ret i64 %2 } ; CHECK: smul_lohi: -; CHECK: ldc r2, 0 -; CHECK-NEXT: mov r3, r2 -; CHECK-NEXT: maccs r2, r3, r1, r0 -; CHECK-NEXT: mov r0, r3 -; CHECK-NEXT: mov r1, r2 +; CHECK: ldc +; CHECK-NEXT: mov +; CHECK-NEXT: maccs +; CHECK-NEXT: mov r0, +; CHECK-NEXT: mov r1, ; CHECK-NEXT: retsp 0 define i64 @mul64(i64 %a, i64 %b) { @@ -32,11 +33,11 @@ entry: ret i64 %0 } ; CHECK: mul64: -; CHECK: ldc r11, 0 -; CHECK-NEXT: lmul r11, r4, r0, r2, r11, r11 -; CHECK-NEXT: mul r0, r0, r3 -; CHECK-NEXT: lmul r0, r1, r1, r2, r11, r0 -; CHECK-NEXT: mov r0, r4 +; CHECK: ldc +; CHECK-NEXT: lmul +; CHECK-NEXT: mul +; CHECK-NEXT: lmul +; CHECK-NEXT: mov r0, define i64 @mul64_2(i64 %a, i32 %b) { entry: @@ -45,8 +46,8 @@ entry: ret i64 %1 } ; CHECK: mul64_2: -; CHECK: ldc r3, 0 -; CHECK-NEXT: lmul r3, r0, r0, r2, r3, r3 -; CHECK-NEXT: mul r1, r1, r2 -; CHECK-NEXT: add r1, r3, r1 +; CHECK: ldc +; CHECK-NEXT: lmul +; CHECK-NEXT: mul +; CHECK-NEXT: add r1, ; CHECK-NEXT: retsp 0 diff --git a/test/CodeGen/XCore/ps-intrinsics.ll b/test/CodeGen/XCore/ps-intrinsics.ll new file mode 100644 index 0000000..92b26c7 --- /dev/null +++ b/test/CodeGen/XCore/ps-intrinsics.ll @@ -0,0 +1,18 @@ +; RUN: llc < %s -march=xcore | FileCheck %s +declare i32 @llvm.xcore.getps(i32) +declare void @llvm.xcore.setps(i32, i32) + +define i32 @getps(i32 %reg) nounwind { +; CHECK: getps: +; CHECK: get r0, ps[r0] + %result = call i32 @llvm.xcore.getps(i32 %reg) + ret i32 %result +} + + +define void @setps(i32 %reg, i32 %value) nounwind { +; CHECK: setps: +; CHECK: set ps[r0], r1 + call void @llvm.xcore.setps(i32 %reg, i32 %value) + ret void +} diff --git a/test/CodeGen/XCore/resources.ll b/test/CodeGen/XCore/resources.ll index 3389912..bd0492c 100644 --- a/test/CodeGen/XCore/resources.ll +++ b/test/CodeGen/XCore/resources.ll @@ -19,6 +19,9 @@ declare void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r) declare void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value) declare void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p) declare void @llvm.xcore.eeu.p1i8(i8 addrspace(1)* %r) +declare void @llvm.xcore.setclk.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b) +declare void @llvm.xcore.setrdy.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b) +declare void @llvm.xcore.setpsc.p1i8(i8 addrspace(1)* %r, i32 %value) define i8 addrspace(1)* @getr() { ; CHECK: getr: @@ -174,3 +177,24 @@ define void @eeu(i8 addrspace(1)* %r) { call void @llvm.xcore.eeu.p1i8(i8 addrspace(1)* %r) ret void } + +define void @setclk(i8 addrspace(1)* %a, i8 addrspace(1)* %b) { +; CHECK: setclk +; CHECK: setclk res[r0], r1 + call void @llvm.xcore.setclk.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b) + ret void +} + +define void @setrdy(i8 addrspace(1)* %a, i8 addrspace(1)* %b) { +; CHECK: setrdy +; CHECK: setrdy res[r0], r1 + call void @llvm.xcore.setrdy.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b) + ret void +} + +define void @setpsc(i8 addrspace(1)* %r, i32 %value) { +; CHECK: setpsc +; CHECK: setpsc res[r0], r1 + call void @llvm.xcore.setpsc.p1i8(i8 addrspace(1)* %r, i32 %value) + ret void +} diff --git a/test/CodeGen/XCore/scavenging.ll b/test/CodeGen/XCore/scavenging.ll new file mode 100644 index 0000000..3181e96 --- /dev/null +++ b/test/CodeGen/XCore/scavenging.ll @@ -0,0 +1,52 @@ +; RUN: llc < %s -march=xcore +@size = global i32 0 ; <i32*> [#uses=1] +@g0 = external global i32 ; <i32*> [#uses=2] +@g1 = external global i32 ; <i32*> [#uses=2] +@g2 = external global i32 ; <i32*> [#uses=2] +@g3 = external global i32 ; <i32*> [#uses=2] +@g4 = external global i32 ; <i32*> [#uses=2] +@g5 = external global i32 ; <i32*> [#uses=2] +@g6 = external global i32 ; <i32*> [#uses=2] +@g7 = external global i32 ; <i32*> [#uses=2] +@g8 = external global i32 ; <i32*> [#uses=2] +@g9 = external global i32 ; <i32*> [#uses=2] +@g10 = external global i32 ; <i32*> [#uses=2] +@g11 = external global i32 ; <i32*> [#uses=2] + +define void @f() nounwind { +entry: + %x = alloca [100 x i32], align 4 ; <[100 x i32]*> [#uses=2] + %0 = load i32* @size, align 4 ; <i32> [#uses=1] + %1 = alloca i32, i32 %0, align 4 ; <i32*> [#uses=1] + %2 = volatile load i32* @g0, align 4 ; <i32> [#uses=1] + %3 = volatile load i32* @g1, align 4 ; <i32> [#uses=1] + %4 = volatile load i32* @g2, align 4 ; <i32> [#uses=1] + %5 = volatile load i32* @g3, align 4 ; <i32> [#uses=1] + %6 = volatile load i32* @g4, align 4 ; <i32> [#uses=1] + %7 = volatile load i32* @g5, align 4 ; <i32> [#uses=1] + %8 = volatile load i32* @g6, align 4 ; <i32> [#uses=1] + %9 = volatile load i32* @g7, align 4 ; <i32> [#uses=1] + %10 = volatile load i32* @g8, align 4 ; <i32> [#uses=1] + %11 = volatile load i32* @g9, align 4 ; <i32> [#uses=1] + %12 = volatile load i32* @g10, align 4 ; <i32> [#uses=1] + %13 = volatile load i32* @g11, align 4 ; <i32> [#uses=2] + %14 = getelementptr [100 x i32]* %x, i32 0, i32 50 ; <i32*> [#uses=1] + store i32 %13, i32* %14, align 4 + volatile store i32 %13, i32* @g11, align 4 + volatile store i32 %12, i32* @g10, align 4 + volatile store i32 %11, i32* @g9, align 4 + volatile store i32 %10, i32* @g8, align 4 + volatile store i32 %9, i32* @g7, align 4 + volatile store i32 %8, i32* @g6, align 4 + volatile store i32 %7, i32* @g5, align 4 + volatile store i32 %6, i32* @g4, align 4 + volatile store i32 %5, i32* @g3, align 4 + volatile store i32 %4, i32* @g2, align 4 + volatile store i32 %3, i32* @g1, align 4 + volatile store i32 %2, i32* @g0, align 4 + %x1 = getelementptr [100 x i32]* %x, i32 0, i32 0 ; <i32*> [#uses=1] + call void @g(i32* %x1, i32* %1) nounwind + ret void +} + +declare void @g(i32*, i32*) diff --git a/test/CodeGen/XCore/sr-intrinsics.ll b/test/CodeGen/XCore/sr-intrinsics.ll new file mode 100644 index 0000000..e12ed03 --- /dev/null +++ b/test/CodeGen/XCore/sr-intrinsics.ll @@ -0,0 +1,18 @@ +; RUN: llc < %s -march=xcore | FileCheck %s +declare void @llvm.xcore.setsr(i32) +declare void @llvm.xcore.clrsr(i32) + +define void @setsr() nounwind { +; CHECK: setsr: +; CHECK: setsr 128 + call void @llvm.xcore.setsr(i32 128) + ret void +} + + +define void @clrsr() nounwind { +; CHECK: clrsr: +; CHECK: clrsr 128 + call void @llvm.xcore.clrsr(i32 128) + ret void +} diff --git a/test/CodeGen/XCore/threads.ll b/test/CodeGen/XCore/threads.ll new file mode 100644 index 0000000..a0558e3 --- /dev/null +++ b/test/CodeGen/XCore/threads.ll @@ -0,0 +1,67 @@ +; RUN: llc -march=xcore < %s | FileCheck %s + +declare i8 addrspace(1)* @llvm.xcore.getst.p1i8.p1i8(i8 addrspace(1)* %r) +declare void @llvm.xcore.msync.p1i8(i8 addrspace(1)* %r) +declare void @llvm.xcore.ssync() +declare void @llvm.xcore.mjoin.p1i8(i8 addrspace(1)* %r) +declare void @llvm.xcore.initsp.p1i8(i8 addrspace(1)* %r, i8* %value) +declare void @llvm.xcore.initpc.p1i8(i8 addrspace(1)* %r, i8* %value) +declare void @llvm.xcore.initlr.p1i8(i8 addrspace(1)* %r, i8* %value) +declare void @llvm.xcore.initcp.p1i8(i8 addrspace(1)* %r, i8* %value) +declare void @llvm.xcore.initdp.p1i8(i8 addrspace(1)* %r, i8* %value) + +define i8 addrspace(1)* @getst(i8 addrspace(1)* %r) { +; CHECK: getst: +; CHECK: getst r0, res[r0] + %result = call i8 addrspace(1)* @llvm.xcore.getst.p1i8.p1i8(i8 addrspace(1)* %r) + ret i8 addrspace(1)* %result +} + +define void @ssync() { +; CHECK: ssync: +; CHECK: ssync + call void @llvm.xcore.ssync() + ret void +} + +define void @mjoin(i8 addrspace(1)* %r) { +; CHECK: mjoin: +; CHECK: mjoin res[r0] + call void @llvm.xcore.mjoin.p1i8(i8 addrspace(1)* %r) + ret void +} + +define void @initsp(i8 addrspace(1)* %t, i8* %src) { +; CHECK: initsp: +; CHECK: init t[r0]:sp, r1 + call void @llvm.xcore.initsp.p1i8(i8 addrspace(1)* %t, i8* %src) + ret void +} + +define void @initpc(i8 addrspace(1)* %t, i8* %src) { +; CHECK: initpc: +; CHECK: init t[r0]:pc, r1 + call void @llvm.xcore.initpc.p1i8(i8 addrspace(1)* %t, i8* %src) + ret void +} + +define void @initlr(i8 addrspace(1)* %t, i8* %src) { +; CHECK: initlr: +; CHECK: init t[r0]:lr, r1 + call void @llvm.xcore.initlr.p1i8(i8 addrspace(1)* %t, i8* %src) + ret void +} + +define void @initcp(i8 addrspace(1)* %t, i8* %src) { +; CHECK: initcp: +; CHECK: init t[r0]:cp, r1 + call void @llvm.xcore.initcp.p1i8(i8 addrspace(1)* %t, i8* %src) + ret void +} + +define void @initdp(i8 addrspace(1)* %t, i8* %src) { +; CHECK: initdp: +; CHECK: init t[r0]:dp, r1 + call void @llvm.xcore.initdp.p1i8(i8 addrspace(1)* %t, i8* %src) + ret void +} diff --git a/test/CodeGen/XCore/trampoline.ll b/test/CodeGen/XCore/trampoline.ll index 18cc45e..4e1aba0 100644 --- a/test/CodeGen/XCore/trampoline.ll +++ b/test/CodeGen/XCore/trampoline.ll @@ -5,8 +5,8 @@ define void @f() nounwind { entry: ; CHECK: f: -; CHECK ldap r11, g.1101 -; CHECK stw r11, sp[7] +; CHECK: ldap r11, g.1101 +; CHECK: stw r11, sp[7] %TRAMP.23 = alloca [20 x i8], align 2 %FRAME.0 = alloca %struct.FRAME.f, align 4 %TRAMP.23.sub = getelementptr inbounds [20 x i8]* %TRAMP.23, i32 0, i32 0 |