[llvm] r223669 - AArch64: treat HFAs containing "half" types as blocks too.

Tim Northover tnorthover at apple.com
Mon Dec 8 09:54:59 PST 2014


Author: tnorthover
Date: Mon Dec  8 11:54:58 2014
New Revision: 223669

URL: http://llvm.org/viewvc/llvm-project?rev=223669&view=rev
Log:
AArch64: treat HFAs containing "half" types as blocks too.

Modified:
    llvm/trunk/lib/Target/AArch64/AArch64CallingConvention.h
    llvm/trunk/test/CodeGen/AArch64/argument-blocks.ll

Modified: llvm/trunk/lib/Target/AArch64/AArch64CallingConvention.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64CallingConvention.h?rev=223669&r1=223668&r2=223669&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64CallingConvention.h (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64CallingConvention.h Mon Dec  8 11:54:58 2014
@@ -28,6 +28,9 @@ using namespace llvm;
 static const uint16_t XRegList[] = {AArch64::X0, AArch64::X1, AArch64::X2,
                                     AArch64::X3, AArch64::X4, AArch64::X5,
                                     AArch64::X6, AArch64::X7};
+static const uint16_t HRegList[] = {AArch64::H0, AArch64::H1, AArch64::H2,
+                                    AArch64::H3, AArch64::H4, AArch64::H5,
+                                    AArch64::H6, AArch64::H7};
 static const uint16_t SRegList[] = {AArch64::S0, AArch64::S1, AArch64::S2,
                                     AArch64::S3, AArch64::S4, AArch64::S5,
                                     AArch64::S6, AArch64::S7};
@@ -88,6 +91,8 @@ static bool CC_AArch64_Custom_Block(unsi
   ArrayRef<uint16_t> RegList;
   if (LocVT.SimpleTy == MVT::i64)
     RegList = XRegList;
+  else if (LocVT.SimpleTy == MVT::f16)
+    RegList = HRegList;
   else if (LocVT.SimpleTy == MVT::f32 || LocVT.is32BitVector())
     RegList = SRegList;
   else if (LocVT.SimpleTy == MVT::f64 || LocVT.is64BitVector())

Modified: llvm/trunk/test/CodeGen/AArch64/argument-blocks.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/argument-blocks.ll?rev=223669&r1=223668&r2=223669&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/argument-blocks.ll (original)
+++ llvm/trunk/test/CodeGen/AArch64/argument-blocks.ll Mon Dec  8 11:54:58 2014
@@ -188,3 +188,10 @@ define <16 x i8> @test_v16i8_blocked([7
   %val = extractvalue [2 x <16 x i8>] %in, 0
   ret <16 x i8> %val
 }
+
+define half @test_f16_blocked([7 x double], [2 x half] %in) {
+; CHECK-LABEL: test_f16_blocked:
+; CHECK: ldr h0, [sp]
+  %val = extractvalue [2 x half] %in, 0
+  ret half %val
+}





More information about the llvm-commits mailing list