masoud.ataei created this revision.
masoud.ataei added reviewers: bmahjour, renenkel, rzurob, w2yehia.
masoud.ataei added a project: PowerPC.
Herald added subscribers: shchenz, kbarton, hiraditya, nemanjai.
Herald added a project: All.
masoud.ataei requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Proposing to move the check for scalar MASS conversion from constructor 
of `PPCTargetLowering` to the `lowerLibCallBase` function which decides 
about the lowering.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D128653

Files:
  clang/test/CodeGen/lower-mass-end-to-end.c
  llvm/lib/Target/PowerPC/PPCISelLowering.cpp
  llvm/lib/Target/PowerPC/PPCISelLowering.h

Index: llvm/lib/Target/PowerPC/PPCISelLowering.h
===================================================================
--- llvm/lib/Target/PowerPC/PPCISelLowering.h
+++ llvm/lib/Target/PowerPC/PPCISelLowering.h
@@ -1293,6 +1293,7 @@
                                     SelectionDAG &DAG) const;
     bool isLowringToMASSFiniteSafe(SDValue Op) const;
     bool isLowringToMASSSafe(SDValue Op) const;
+    bool isScalarMASSConversionEnabled() const;
     SDValue lowerLibCallBase(const char *LibCallDoubleName,
                              const char *LibCallFloatName,
                              const char *LibCallDoubleNameFinite,
Index: llvm/lib/Target/PowerPC/PPCISelLowering.cpp
===================================================================
--- llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -392,8 +392,7 @@
 
   // MASS transformation for LLVM intrinsics with replicating fast-math flag
   // to be consistent to PPCGenScalarMASSEntries pass
-  if (TM.getOptLevel() == CodeGenOpt::Aggressive &&
-      TM.Options.PPCGenScalarMASSEntries) {
+  if (TM.getOptLevel() == CodeGenOpt::Aggressive) {
     setOperationAction(ISD::FSIN , MVT::f64, Custom);
     setOperationAction(ISD::FCOS , MVT::f64, Custom);
     setOperationAction(ISD::FPOW , MVT::f64, Custom);
@@ -17886,13 +17885,17 @@
   return Op.getNode()->getFlags().hasApproximateFuncs();
 }
 
+bool PPCTargetLowering::isScalarMASSConversionEnabled() const {
+  return getTargetMachine().Options.PPCGenScalarMASSEntries;
+}
+
 SDValue PPCTargetLowering::lowerLibCallBase(const char *LibCallDoubleName,
                                             const char *LibCallFloatName,
                                             const char *LibCallDoubleNameFinite,
                                             const char *LibCallFloatNameFinite,
                                             SDValue Op,
                                             SelectionDAG &DAG) const {
-  if (!isLowringToMASSSafe(Op))
+  if (!isScalarMASSConversionEnabled() || !isLowringToMASSSafe(Op))
     return SDValue();
 
   if (!isLowringToMASSFiniteSafe(Op))
Index: clang/test/CodeGen/lower-mass-end-to-end.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/lower-mass-end-to-end.c
@@ -0,0 +1,114 @@
+// RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -O3 -fapprox-func --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-AFN
+// RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -Ofast --target=powerpc64le-unknown-linux-gnu -S %s -o -| FileCheck %s -check-prefix=CHECK-FAST
+// RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -O3 -fapprox-func --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-AFN
+// RUN: %clang -mllvm -enable-ppc-gen-scalar-mass -Ofast --target=powerpc-ibm-aix-xcoff -S %s -o -| FileCheck %s -check-prefix=CHECK-FAST
+
+extern double sin(double a);
+extern double cos(double a);
+extern double pow(double a, double b);
+extern double log(double a);
+extern double log10(double a);
+extern double exp(double a);
+extern float sinf(float a);
+extern float cosf(float a);
+extern float powf(float a, float b);
+extern float logf(float a);
+extern float log10f(float a);
+extern float expf(float a);
+
+double sin_f64(double a) {
+// CHECK-LABEL: sin_f64
+// CHECK-FAST: __xl_sin_finite
+// CHECK-AFN: __xl_sin
+// CHECK: blr
+  return sin(a);
+}
+
+double cos_f64(double a) {
+// CHECK-LABEL: cos_f64
+// CHECK-FAST: __xl_cos_finite
+// CHECK-AFN: __xl_cos
+// CHECK: blr
+  return cos(a);
+}
+
+double pow_f64(double a, double b) {
+// CHECK-LABEL: pow_f64
+// CHECK-FAST: __xl_pow_finite
+// CHECK-AFN: __xl_pow
+// CHECK: blr
+  return pow(a, b);
+}
+
+double log_f64(double a) {
+// CHECK-LABEL: log_f64
+// CHECK-FAST: __xl_log_finite
+// CHECK-AFN: __xl_log
+// CHECK: blr
+  return log(a);
+}
+
+double log10_f64(double a) {
+// CHECK-LABEL: log10_f64
+// CHECK-FAST: __xl_log10_finite
+// CHECK-AFN: __xl_log10
+// CHECK: blr
+  return log10(a);
+}
+
+double exp_f64(double a) {
+// CHECK-LABEL: exp_f64
+// CHECK-FAST: __xl_exp_finite
+// CHECK-AFN: __xl_exp
+// CHECK: blr
+  return exp(a);
+}
+
+float sin_f32(float a) {
+// CHECK-LABEL: sin_f32
+// CHECK-FAST: __xl_sinf_finite
+// CHECK-AFN: __xl_sinf
+// CHECK: blr
+  return sinf(a);
+}
+
+float cos_f32(float a) {
+// CHECK-LABEL: cos_f32
+// CHECK-FAST: __xl_cosf_finite
+// CHECK-AFN: __xl_cosf
+// CHECK: blr
+  return cosf(a);
+}
+
+float pow_f32(float a, float b) {
+// CHECK-LABEL: pow_f32
+// CHECK-FAST: __xl_powf_finite
+// CHECK-AFN: __xl_powf
+// CHECK: blr
+  return powf(a, b);
+}
+
+float log_f32(float a) {
+// CHECK-LABEL: log_f32
+// CHECK-FAST: __xl_logf_finite
+// CHECK-AFN: __xl_logf
+// CHECK: blr
+  return logf(a);
+}
+
+float log10_f32(float a) {
+// CHECK-LABEL: log10_f32
+// CHECK-FAST: __xl_log10f_finite
+// CHECK-AFN: __xl_log10f
+// CHECK: blr
+  return log10f(a);
+}
+
+float exp_f32(float a) {
+// CHECK-LABEL: exp_f32
+// CHECK-FAST: __xl_expf_finite
+// CHECK-AFN: __xl_expf
+// CHECK: blr
+  return expf(a);
+}
+
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to