summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/CellSPU
diff options
context:
space:
mode:
authorKalle Raiskila <kalle.raiskila@nokia.com>2010-08-02 08:54:39 +0000
committerKalle Raiskila <kalle.raiskila@nokia.com>2010-08-02 08:54:39 +0000
commit622f8eb98102ca3eb8643b6c70360ea5be32e654 (patch)
tree352fa92404347b987ca0ff0c15de73307289b8a4 /llvm/test/CodeGen/CellSPU
parentcd948c1df578fa46c4ea19bc8f5983e1a7267619 (diff)
downloadbcm5719-llvm-622f8eb98102ca3eb8643b6c70360ea5be32e654.tar.gz
bcm5719-llvm-622f8eb98102ca3eb8643b6c70360ea5be32e654.zip
Add preliminary v2i32 support for SPU backend. As there are no
such registers in SPU, this support boils down to "emulating" them by duplicating instructions on the general purpose registers. This adds the most basic operations on v2i32: passing parameters, addition, subtraction, multiplication and a few others. llvm-svn: 110035
Diffstat (limited to 'llvm/test/CodeGen/CellSPU')
-rw-r--r--llvm/test/CodeGen/CellSPU/v2i32.ll57
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/CellSPU/v2i32.ll b/llvm/test/CodeGen/CellSPU/v2i32.ll
new file mode 100644
index 00000000000..be3822a8d0c
--- /dev/null
+++ b/llvm/test/CodeGen/CellSPU/v2i32.ll
@@ -0,0 +1,57 @@
+;RUN: llc --march=cellspu %s -o - | FileCheck %s
+%vec = type <2 x i32>
+
+define %vec @test_ret(%vec %param)
+{
+;CHECK: bi $lr
+ ret %vec %param
+}
+
+define %vec @test_add(%vec %param)
+{
+;CHECK: a $3, $3, $3
+ %1 = add %vec %param, %param
+;CHECK: bi $lr
+ ret %vec %1
+}
+
+define %vec @test_sub(%vec %param)
+{
+;CHECK: sf $3, $4, $3
+ %1 = sub %vec %param, <i32 1, i32 1>
+
+;CHECK: bi $lr
+ ret %vec %1
+}
+
+define %vec @test_mul(%vec %param)
+{
+;CHECK: mpyu
+;CHECK: mpyh
+;CHECK: a
+;CHECK: a $3
+ %1 = mul %vec %param, %param
+
+;CHECK: bi $lr
+ ret %vec %1
+}
+
+define <2 x i32> @test_splat(i32 %param ) {
+;TODO insertelement transforms to a PREFSLOT2VEC, that trasforms to the
+; somewhat redundant:
+;CHECK-NOT or $3, $3, $3
+;CHECK: lqa
+;CHECK: shufb
+ %sv = insertelement <1 x i32> undef, i32 %param, i32 0
+ %rv = shufflevector <1 x i32> %sv, <1 x i32> undef, <2 x i32> zeroinitializer
+;CHECK: bi $lr
+ ret <2 x i32> %rv
+}
+
+define i32 @test_extract() {
+;CHECK: shufb $3
+ %rv = extractelement <2 x i32> zeroinitializer, i32 undef ; <i32> [#uses=1]
+;CHECK: bi $lr
+ ret i32 %rv
+}
+
OpenPOWER on IntegriCloud