[PATCH] D80813: [AMDGPU] Propagate fast-math flags when lowering FSIN and FCOS
Jay Foad via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat May 30 21:46:12 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2768edfff19a: [AMDGPU] Propagate fast-math flags when lowering FSIN and FCOS (authored by foad).
Changed prior to commit:
https://reviews.llvm.org/D80813?vs=267265&id=267488#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80813/new/
https://reviews.llvm.org/D80813
Files:
llvm/lib/Target/AMDGPU/SIISelLowering.cpp
llvm/test/CodeGen/AMDGPU/llvm.sin.ll
Index: llvm/test/CodeGen/AMDGPU/llvm.sin.ll
===================================================================
--- llvm/test/CodeGen/AMDGPU/llvm.sin.ll
+++ llvm/test/CodeGen/AMDGPU/llvm.sin.ll
@@ -52,7 +52,8 @@
}
; FUNC-LABEL: {{^}}fmf_sin_3x_f32:
-; GCN: v_mul_f32
+; GCN-NOT: v_add_f32
+; GCN: 0x3ef47644
; GCN: v_mul_f32
; SICIVI: v_fract_f32
; GFX9-NOT: v_fract_f32
@@ -95,7 +96,8 @@
}
; FUNC-LABEL: {{^}}fmf_sin_2x_f32:
-; GCN: v_add_f32
+; GCN-NOT: v_add_f32
+; GCN: 0x3ea2f983
; GCN: v_mul_f32
; SICIVI: v_fract_f32
; GFX9-NOT: v_fract_f32
@@ -137,8 +139,8 @@
}
; FUNC-LABEL: {{^}}fmf_sin_cancel_f32:
-; GCN: v_mul_f32
-; GCN: v_mul_f32
+; GCN-NOT: v_add_f32
+; GCN-NOT: v_mul_f32
; SICIVI: v_fract_f32
; GFX9-NOT: v_fract_f32
; GCN: v_sin_f32
Index: llvm/lib/Target/AMDGPU/SIISelLowering.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -8288,22 +8288,24 @@
SDValue Arg = Op.getOperand(0);
SDValue TrigVal;
- // TODO: Should this propagate fast-math-flags?
+ // Propagate fast-math flags so that the multiply we introduce can be folded
+ // if Arg is already the result of a multiply by constant.
+ auto Flags = Op->getFlags();
SDValue OneOver2Pi = DAG.getConstantFP(0.5 * numbers::inv_pi, DL, VT);
if (Subtarget->hasTrigReducedRange()) {
- SDValue MulVal = DAG.getNode(ISD::FMUL, DL, VT, Arg, OneOver2Pi);
- TrigVal = DAG.getNode(AMDGPUISD::FRACT, DL, VT, MulVal);
+ SDValue MulVal = DAG.getNode(ISD::FMUL, DL, VT, Arg, OneOver2Pi, Flags);
+ TrigVal = DAG.getNode(AMDGPUISD::FRACT, DL, VT, MulVal, Flags);
} else {
- TrigVal = DAG.getNode(ISD::FMUL, DL, VT, Arg, OneOver2Pi);
+ TrigVal = DAG.getNode(ISD::FMUL, DL, VT, Arg, OneOver2Pi, Flags);
}
switch (Op.getOpcode()) {
case ISD::FCOS:
- return DAG.getNode(AMDGPUISD::COS_HW, SDLoc(Op), VT, TrigVal);
+ return DAG.getNode(AMDGPUISD::COS_HW, SDLoc(Op), VT, TrigVal, Flags);
case ISD::FSIN:
- return DAG.getNode(AMDGPUISD::SIN_HW, SDLoc(Op), VT, TrigVal);
+ return DAG.getNode(AMDGPUISD::SIN_HW, SDLoc(Op), VT, TrigVal, Flags);
default:
llvm_unreachable("Wrong trig opcode");
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D80813.267488.patch
Type: text/x-patch
Size: 2257 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200531/7b7d8358/attachment.bin>
More information about the llvm-commits
mailing list