From 4f0eb57222deae1df329539e8179bc95d4f4df6d Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 13 Feb 2023 14:57:38 -0400 Subject: [PATCH] AMDGPU: Teach getNegatedExpression about rcp --- llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 11 +++++++++++ llvm/test/CodeGen/AMDGPU/fneg-combines.new.ll | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index 07ce48b..aa5d2b9 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -800,6 +800,17 @@ SDValue AMDGPUTargetLowering::getNegatedExpression( return SDValue(); break; } + case AMDGPUISD::RCP: { + SDValue Src = Op.getOperand(0); + EVT VT = Op.getValueType(); + SDLoc SL(Op); + + SDValue NegSrc = getNegatedExpression(Src, DAG, LegalOperations, + ForCodeSize, Cost, Depth); + if (NegSrc) + return DAG.getNode(AMDGPUISD::RCP, SL, VT, NegSrc, Op->getFlags()); + return SDValue(); + } default: break; } diff --git a/llvm/test/CodeGen/AMDGPU/fneg-combines.new.ll b/llvm/test/CodeGen/AMDGPU/fneg-combines.new.ll index 6101107..30177a5 100644 --- a/llvm/test/CodeGen/AMDGPU/fneg-combines.new.ll +++ b/llvm/test/CodeGen/AMDGPU/fneg-combines.new.ll @@ -2030,9 +2030,9 @@ define float @v_negated_rcp_f32(float %arg0, float %arg1) #1 { ; GCN-LABEL: v_negated_rcp_f32: ; GCN: ; %bb.0: ; GCN-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) -; GCN-NEXT: v_fma_f32 v0, -v0, v1, -2.0 +; GCN-NEXT: v_fma_f32 v0, v0, v1, 2.0 ; GCN-NEXT: v_rcp_f32_e32 v0, v0 -; GCN-NEXT: v_sub_f32_e32 v0, v1, v0 +; GCN-NEXT: v_add_f32_e32 v0, v1, v0 ; GCN-NEXT: s_setpc_b64 s[30:31] %neg.arg0 = fneg float %arg0 %fma = call nsz float @llvm.fma.f32(float %neg.arg0, float %arg1, float -2.0) -- 2.7.4