diff options
author | Richard Stallman <rms@gnu.org> | 1993-03-27 07:23:42 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-03-27 07:23:42 +0000 |
commit | ae698e41edea77e25cb7e74ea60cd47de672a858 (patch) | |
tree | 40efd9c03a5fe34821e59b78b1f6b1e8320abc60 /gcc/tree.c | |
parent | cf1c49cb5648bacda0d9a01dce9e448f87f72ab7 (diff) | |
download | gcc-ae698e41edea77e25cb7e74ea60cd47de672a858.zip gcc-ae698e41edea77e25cb7e74ea60cd47de672a858.tar.gz gcc-ae698e41edea77e25cb7e74ea60cd47de672a858.tar.bz2 |
(stabilize_reference_1): For division and remainder, make a save_expr.
From-SVN: r3889
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -1940,6 +1940,14 @@ stabilize_reference_1 (e) return e; case '2': + /* Division is slow and tends to be compiled with jumps, + especially the division by powers of 2 that is often + found inside of an array reference. So do it just once. */ + if (code == TRUNC_DIV_EXPR || code == TRUNC_MOD_EXPR + || code == FLOOR_DIV_EXPR || code == FLOOR_MOD_EXPR + || code == CEIL_DIV_EXPR || code == CEIL_MOD_EXPR + || code == ROUND_DIV_EXPR || code == ROUND_MOD_EXPR) + return save_expr (e); /* Recursively stabilize each operand. */ result = build_nt (code, stabilize_reference_1 (TREE_OPERAND (e, 0)), stabilize_reference_1 (TREE_OPERAND (e, 1))); |