[llvm] [AMDGPU] Improved Lowering of abs(i8/i16) and -abs(i8/i16) (PR #165626)
Patrick Simmons via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 6 08:23:38 PST 2025
================
@@ -5286,6 +5286,28 @@ SDValue AMDGPUTargetLowering::performRcpCombine(SDNode *N,
return DCI.DAG.getConstantFP(One / Val, SDLoc(N), N->getValueType(0));
}
+SDValue AMDGPUTargetLowering::expandABS(SDNode *N, SelectionDAG &DAG,
+ bool IsNegative) const {
+ if (N->isDivergent() ||
+ (N->getValueType(0) != MVT::i8 && N->getValueType(0) != MVT::i16))
+ return TargetLowering::expandABS(N, DAG, IsNegative);
+
+ //(abs i8/i16 (i8/i16 op1)) -> (trunc i8/i16 (abs i32 (sext i32 (i8/i16
+ // op1))))
+ SDValue Src = N->getOperand(0);
+ SDLoc DL(Src);
+ SDValue SExtSrc = DAG.getSExtOrTrunc(Src, DL, MVT::i32);
+ SDValue ExtAbs = DAG.getNode(ISD::ABS, DL, MVT::i32, SExtSrc);
+ SDValue TruncResult =
+ DAG.getNode(ISD::TRUNCATE, DL, N->getValueType(0), ExtAbs);
+
+ if (!IsNegative)
+ return TruncResult;
+
+ return DAG.getNode(ISD::SUB, DL, N->getValueType(0),
----------------
linuxrocks123 wrote:
Done
https://github.com/llvm/llvm-project/pull/165626
More information about the llvm-commits
mailing list