diff options
author | Jan Hubicka <jh@suse.cz> | 2001-07-17 23:44:57 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-07-17 21:44:57 +0000 |
commit | b7e9703c27ee1b02df751646742fb5020a2d2b8c (patch) | |
tree | c8480e650f798616a3a4925e1f098f4f258e9711 /gcc/expr.c | |
parent | 653e276c6536663cda57bda038a9df4e64adb96f (diff) | |
download | gcc-b7e9703c27ee1b02df751646742fb5020a2d2b8c.zip gcc-b7e9703c27ee1b02df751646742fb5020a2d2b8c.tar.gz gcc-b7e9703c27ee1b02df751646742fb5020a2d2b8c.tar.bz2 |
expr.c (epxand_expr): Convert divisions into multiplications by reciprocals if -ffast-math.
* expr.c (epxand_expr): Convert divisions into multiplications by
reciprocals if -ffast-math.
From-SVN: r44090
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -7830,6 +7830,16 @@ expand_expr (exp, target, tmode, modifier) return expand_divmod (0, code, mode, op0, op1, target, unsignedp); case RDIV_EXPR: + /* Emit a/b as a*(1/b). Later we may manage CSE the reciprocal saving + expensive divide. If not, combine will rebuild the original + computation. */ + if (flag_unsafe_math_optimizations && optimize && !optimize_size + && !real_onep (TREE_OPERAND (exp, 0))) + return expand_expr (build (MULT_EXPR, type, TREE_OPERAND (exp, 0), + build (RDIV_EXPR, type, + build_real (type, dconst1), + TREE_OPERAND (exp, 1))), + target, tmode, unsignedp); this_optab = flodiv_optab; goto binop; |