This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH, rs6000] Remove optimize_insn_for_speed_p check on divide -> recip splitter
- From: Pat Haugen <pthaugen at linux dot vnet dot ibm dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Segher Boessenkool <segher at kernel dot crashing dot org>, David Edelsohn <dje dot gcc at gmail dot com>
- Date: Tue, 13 Sep 2016 10:14:57 -0500
- Subject: [PATCH, rs6000] Remove optimize_insn_for_speed_p check on divide -> recip splitter
- Authentication-results: sourceware.org; auth=none
PRs 77536 and 68212 document cases where the estimated frequencies become unreliable to make appropriate decisions based on them. This patch removes the optimize_insn_for_speed_p check on the splitter so that the transformation will take place when -ffast-math is specified.
Bootstrap/regtest on powerpc64le, ok for trunk?
-Pat
2016-09-13 Pat Haugen <pthaugen@us.ibm.com>
* config/rs6000/rs6000.md (div->recip splitter): Remove
optimize_insn_for_speed_p condition.
Index: config/rs6000/rs6000.md
===================================================================
--- config/rs6000/rs6000.md (revision 240092)
+++ config/rs6000/rs6000.md (working copy)
@@ -4323,13 +4323,15 @@ (define_expand "recip<mode>3"
;; Split to create division from FRE/FRES/etc. and fixup instead of the normal
;; hardware division. This is only done before register allocation and with
;; -ffast-math. This must appear before the divsf3/divdf3 insns.
+;; We used to also check optimize_insn_for_speed_p () but problems with guessed
+;; frequencies (pr68212/pr77536) yields that unreliable so it was removed.
(define_split
[(set (match_operand:RECIPF 0 "gpc_reg_operand" "")
(div:RECIPF (match_operand 1 "gpc_reg_operand" "")
(match_operand 2 "gpc_reg_operand" "")))]
"RS6000_RECIP_AUTO_RE_P (<MODE>mode)
- && can_create_pseudo_p () && optimize_insn_for_speed_p ()
- && flag_finite_math_only && !flag_trapping_math && flag_reciprocal_math"
+ && can_create_pseudo_p () && flag_finite_math_only
+ && !flag_trapping_math && flag_reciprocal_math"
[(const_int 0)]
{
rs6000_emit_swdiv (operands[0], operands[1], operands[2], true);