diff options
author | Daniel Sanders <daniel.sanders@imgtec.com> | 2013-11-12 12:56:01 +0000 |
---|---|---|
committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2013-11-12 12:56:01 +0000 |
commit | 9e2838e29b0820afc35f6ef2d465d4aca9ed402a (patch) | |
tree | f3fcd266bee421161a54ca4a5dbba55b3e5f5f24 /test/CodeGen/Mips/msa | |
parent | f681437cb082bf6fb5da43c8acd4e1313ba3b213 (diff) | |
download | external_llvm-9e2838e29b0820afc35f6ef2d465d4aca9ed402a.zip external_llvm-9e2838e29b0820afc35f6ef2d465d4aca9ed402a.tar.gz external_llvm-9e2838e29b0820afc35f6ef2d465d4aca9ed402a.tar.bz2 |
[mips][msa] Enable inlinse assembly for MSA.
Like GCC, this re-uses the 'f' constraint and a new 'w' print-modifier:
asm ("ldi.w %w0, 1", "=f"(result));
Unlike GCC, the 'w' print-modifer is not _required_ to produce the intended
output. This is a consequence of differences in the internal handling of
the registers in each compiler. To be source-compatible between the
compilers, users must use the 'w' print-modifier.
MSA registers (including control registers) are supported in clobber lists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194476 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/Mips/msa')
-rw-r--r-- | test/CodeGen/Mips/msa/inline-asm.ll | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/CodeGen/Mips/msa/inline-asm.ll b/test/CodeGen/Mips/msa/inline-asm.ll new file mode 100644 index 0000000..4a34273 --- /dev/null +++ b/test/CodeGen/Mips/msa/inline-asm.ll @@ -0,0 +1,34 @@ +; A basic inline assembly test + +; RUN: llc -march=mips -mattr=+msa,+fp64 < %s | FileCheck %s + +@v4i32_r = global <4 x i32> zeroinitializer, align 16 + +define void @test1() nounwind { +entry: + ; CHECK-LABEL: test1: + %0 = call <4 x i32> asm "ldi.w ${0:w}, 1", "=f"() + ; CHECK: ldi.w $w{{[1-3]?[0-9]}}, 1 + store <4 x i32> %0, <4 x i32>* @v4i32_r + ret void +} + +define void @test2() nounwind { +entry: + ; CHECK-LABEL: test2: + %0 = load <4 x i32>* @v4i32_r + %1 = call <4 x i32> asm "addvi.w ${0:w}, ${1:w}, 1", "=f,f"(<4 x i32> %0) + ; CHECK: addvi.w $w{{[1-3]?[0-9]}}, $w{{[1-3]?[0-9]}}, 1 + store <4 x i32> %1, <4 x i32>* @v4i32_r + ret void +} + +define void @test3() nounwind { +entry: + ; CHECK-LABEL: test3: + %0 = load <4 x i32>* @v4i32_r + %1 = call <4 x i32> asm sideeffect "addvi.w ${0:w}, ${1:w}, 1", "=f,f,~{$w0}"(<4 x i32> %0) + ; CHECK: addvi.w $w{{([1-9]|[1-3][0-9])}}, $w{{([1-9]|[1-3][0-9])}}, 1 + store <4 x i32> %1, <4 x i32>* @v4i32_r + ret void +} |