[llvm] PPC: Custom lower ppcf128 is_fpclass if is_fpclass is custom (PR #105540)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 21 08:52:24 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-powerpc
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Unfortunately expandIS_FPCLASS is called directly in SelectionDAGBuilder
depending on whether IS_FPCLASS is custom or not. This helps avoid ppc test
regressions in a future patch where the custom lowering would be bypassed.
---
Full diff: https://github.com/llvm/llvm-project/pull/105540.diff
1 Files Affected:
- (modified) llvm/lib/Target/PowerPC/PPCISelLowering.cpp (+7)
``````````diff
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 459a96eca1ff20..a5bc24b55660a5 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -1221,6 +1221,7 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
setOperationAction(ISD::IS_FPCLASS, MVT::f32, Custom);
setOperationAction(ISD::IS_FPCLASS, MVT::f64, Custom);
setOperationAction(ISD::IS_FPCLASS, MVT::f128, Custom);
+ setOperationAction(ISD::IS_FPCLASS, MVT::ppcf128, Custom);
}
// 128 bit shifts can be accomplished via 3 instructions for SHL and
@@ -11479,6 +11480,12 @@ SDValue PPCTargetLowering::LowerIS_FPCLASS(SDValue Op,
uint64_t RHSC = Op.getConstantOperandVal(1);
SDLoc Dl(Op);
FPClassTest Category = static_cast<FPClassTest>(RHSC);
+ if (LHS.getValueType() == MVT::ppcf128) {
+ // The higher part determines the value class.
+ LHS = DAG.getNode(ISD::EXTRACT_ELEMENT, Dl, MVT::f64, LHS,
+ DAG.getConstant(1, Dl, MVT::i32));
+ }
+
return getDataClassTest(LHS, Category, Dl, DAG, Subtarget);
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/105540
More information about the llvm-commits
mailing list