[llvm] r286111 - This patch adds support for 16 bit floating point registers to the inline asm register selection on AArch64.
Amara Emerson via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 7 07:42:13 PST 2016
Author: aemerson
Date: Mon Nov 7 09:42:12 2016
New Revision: 286111
URL: http://llvm.org/viewvc/llvm-project?rev=286111&view=rev
Log:
This patch adds support for 16 bit floating point registers to the inline asm register selection on AArch64.
Without this patch, register allocation for the example below fails.
define half @test(half %a1, half %a2) #0 {
entry:
%0 = tail call half asm "sqrshl ${0:h}, ${1:h}, ${2:h}", "=w,w,w" (half %a1, half %a2) #1
ret half %0
}
Patch by Florian Hahn.
Differential Revision: https://reviews.llvm.org/D25080
Added:
llvm/trunk/test/CodeGen/AArch64/neon-inline-asm-16-bit-fp.ll
Modified:
llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp?rev=286111&r1=286110&r2=286111&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp Mon Nov 7 09:42:12 2016
@@ -4780,6 +4780,8 @@ AArch64TargetLowering::getRegForInlineAs
return std::make_pair(0U, &AArch64::GPR64commonRegClass);
return std::make_pair(0U, &AArch64::GPR32commonRegClass);
case 'w':
+ if (VT.getSizeInBits() == 16)
+ return std::make_pair(0U, &AArch64::FPR16RegClass);
if (VT.getSizeInBits() == 32)
return std::make_pair(0U, &AArch64::FPR32RegClass);
if (VT.getSizeInBits() == 64)
Added: llvm/trunk/test/CodeGen/AArch64/neon-inline-asm-16-bit-fp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/neon-inline-asm-16-bit-fp.ll?rev=286111&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/neon-inline-asm-16-bit-fp.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/neon-inline-asm-16-bit-fp.ll Mon Nov 7 09:42:12 2016
@@ -0,0 +1,20 @@
+; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
+
+; generated from
+; __fp16 test(__fp16 a1, __fp16 a2) {
+; __fp16 res0;
+; __asm__("sqrshl %h[__res], %h[__A], %h[__B]"
+; : [__res] "=w" (res0)
+; : [__A] "w" (a1), [__B] "w" (a2)
+; :
+; );
+; return res0;
+;}
+
+; Function Attrs: nounwind readnone
+define half @test(half %a1, half %a2) #0 {
+entry:
+ ;CHECK: sqrshl {{h[0-9]+}}, {{h[0-9]+}}, {{h[0-9]+}}
+ %0 = tail call half asm "sqrshl ${0:h}, ${1:h}, ${2:h}", "=w,w,w" (half %a1, half %a2) #1
+ ret half %0
+}
More information about the llvm-commits
mailing list