[llvm] r263035 - [PPC] backend changes to generate xvabs[s, d]p and xvnabs[s, d]p instructions

Kit Barton via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 9 09:48:02 PST 2016


Author: kbarton
Date: Wed Mar  9 11:48:01 2016
New Revision: 263035

URL: http://llvm.org/viewvc/llvm-project?rev=263035&view=rev
Log:
[PPC] backend changes to generate xvabs[s,d]p and xvnabs[s,d]p instructions

This has to be committed before the FE changes

Phabricator: http://reviews.llvm.org/D17837

Added:
    llvm/trunk/test/CodeGen/PowerPC/vec_abs.ll
Modified:
    llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp

Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp?rev=263035&r1=263034&r2=263035&view=diff
==============================================================================
--- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Wed Mar  9 11:48:01 2016
@@ -649,6 +649,8 @@ PPCTargetLowering::PPCTargetLowering(con
 
       setOperationAction(ISD::FNEG, MVT::v4f32, Legal);
       setOperationAction(ISD::FNEG, MVT::v2f64, Legal);
+      setOperationAction(ISD::FABS, MVT::v4f32, Legal);
+      setOperationAction(ISD::FABS, MVT::v2f64, Legal);
 
       addRegisterClass(MVT::v2i64, &PPC::VSRCRegClass);
     }

Added: llvm/trunk/test/CodeGen/PowerPC/vec_abs.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/vec_abs.ll?rev=263035&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/vec_abs.ll (added)
+++ llvm/trunk/test/CodeGen/PowerPC/vec_abs.ll Wed Mar  9 11:48:01 2016
@@ -0,0 +1,80 @@
+; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -march=ppc64le \
+; RUN:          -mattr=+altivec -mattr=+vsx |  FileCheck %s
+; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -march=ppc64le \
+; RUN:          -mattr=+altivec -mattr=-vsx |  FileCheck %s \
+; RUN:          -check-prefix=CHECK-NOVSX
+
+define <4 x float> @test_float(<4 x float> %aa) #0 {
+
+; CHECK-LABEL: test_float
+; CHECK-NOVSX-LABEL: test_float
+; CHECK-NOVSX-LABEL: test_float
+
+  entry:
+    %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %aa) #2
+    ret <4 x float> %0
+}
+; Function Attrs: nounwind readnone
+declare <4 x float> @llvm.fabs.v4f32(<4 x float>) #1
+
+; CHECK: xvabssp
+; CHECK: blr
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: blr
+
+define <4 x float> @test2_float(<4 x float> %aa) #0 {
+
+; CHECK-LABEL: test2_float
+; CHECK-NOVSX-LABEL: test2_float
+
+  entry:
+    %0 = tail call <4 x float> @llvm.fabs.v4f32(<4 x float> %aa) #2
+    %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00,
+                             float -0.000000e+00, float -0.000000e+00>, %0
+    ret <4 x float> %sub
+}
+
+; CHECK: xvnabssp
+; CHECK: blr
+; CHECK-NOVSX: vspltisb
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: vsubfp
+; CHECK-NOVSX: blr
+
+define <2 x double> @test_double(<2 x double> %aa) #0 {
+
+; CHECK-LABEL: test_double
+; CHECK-NOVSX-LABEL: test_double
+
+  entry:
+    %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %aa) #2
+    ret <2 x double> %0
+}
+
+; Function Attrs: nounwind readnone
+declare <2 x double> @llvm.fabs.v2f64(<2 x double>) #1
+
+; CHECK: xvabsdp
+; CHECK: blr
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: fabs
+; CHECK-NOVSX: blr
+
+define <2 x double> @foo(<2 x double> %aa) #0 {
+  entry:
+    %0 = tail call <2 x double> @llvm.fabs.v2f64(<2 x double> %aa) #2
+    %sub = fsub <2 x double> <double -0.000000e+00, double -0.000000e+00>, %0
+    ret <2 x double> %sub
+}
+
+; CHECK: xvnabsdp
+; CHECK: blr
+; CHECK-NOVSX: fnabs
+; CHECK-NOVSX: fnabs
+; CHECK-NOVSX: blr




More information about the llvm-commits mailing list