diff options
author | Kalle Raiskila <kalle.raiskila@nokia.com> | 2010-08-02 08:54:39 +0000 |
---|---|---|
committer | Kalle Raiskila <kalle.raiskila@nokia.com> | 2010-08-02 08:54:39 +0000 |
commit | 622f8eb98102ca3eb8643b6c70360ea5be32e654 (patch) | |
tree | 352fa92404347b987ca0ff0c15de73307289b8a4 /llvm/test/CodeGen/CellSPU | |
parent | cd948c1df578fa46c4ea19bc8f5983e1a7267619 (diff) | |
download | bcm5719-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.ll | 57 |
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 +} + |