diff options
author | Richard Henderson <rth@redhat.com> | 2004-01-23 14:23:10 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-01-23 14:23:10 -0800 |
commit | a475bff7f8977cfe907f6bc13e7c5e7b5c607d12 (patch) | |
tree | 86c29fe20bc264a3b0e4c385a484de2f24845112 /gcc/combine.c | |
parent | 3712281f9d5275e4b0e388ad78f62df874298726 (diff) | |
download | gcc-a475bff7f8977cfe907f6bc13e7c5e7b5c607d12.zip gcc-a475bff7f8977cfe907f6bc13e7c5e7b5c607d12.tar.gz gcc-a475bff7f8977cfe907f6bc13e7c5e7b5c607d12.tar.bz2 |
combine.c (SHIFT_COUNT_TRUNCATED): Provide default value.
* combine.c (SHIFT_COUNT_TRUNCATED): Provide default value.
(simplify_comparison): Don't simplify (eq (zero_extract c 1 r) 0)
if SHIFT_COUNT_TRUNCATED is set.
From-SVN: r76461
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index b048bff..b2d7769 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -91,6 +91,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "toplev.h" #include "target.h" +#ifndef SHIFT_COUNT_TRUNCATED +#define SHIFT_COUNT_TRUNCATED 0 +#endif + /* It is not safe to use ordinary gen_lowpart in combine. Use gen_lowpart_for_combine instead. See comments there. */ #define gen_lowpart dont_use_gen_lowpart_you_dummy @@ -4545,7 +4549,6 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int last, return simplify_shift_const (x, code, mode, XEXP (x, 0), INTVAL (XEXP (x, 1))); -#ifdef SHIFT_COUNT_TRUNCATED else if (SHIFT_COUNT_TRUNCATED && GET_CODE (XEXP (x, 1)) != REG) SUBST (XEXP (x, 1), force_to_mode (XEXP (x, 1), GET_MODE (XEXP (x, 1)), @@ -4553,8 +4556,6 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int last, << exact_log2 (GET_MODE_BITSIZE (GET_MODE (x)))) - 1, NULL_RTX, 0)); -#endif - break; case VEC_SELECT: @@ -9124,10 +9125,8 @@ simplify_shift_const (rtx x, enum rtx_code code, /* Make sure and truncate the "natural" shift on the way in. We don't want to do this inside the loop as it makes it more difficult to combine shifts. */ -#ifdef SHIFT_COUNT_TRUNCATED if (SHIFT_COUNT_TRUNCATED) orig_count &= GET_MODE_BITSIZE (mode) - 1; -#endif /* If we were given an invalid count, don't do anything except exactly what was requested. */ @@ -10523,8 +10522,10 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) a constant that has only a single bit set and are comparing it with zero, we can convert this into an equality comparison between the position and the location of the single bit. */ - - if (GET_CODE (XEXP (op0, 0)) == CONST_INT + /* Except we can't if SHIFT_COUNT_TRUNCATED is set, since we might + have already reduced the shift count modulo the word size. */ + if (!SHIFT_COUNT_TRUNCATED + && GET_CODE (XEXP (op0, 0)) == CONST_INT && XEXP (op0, 1) == const1_rtx && equality_comparison_p && const_op == 0 && (i = exact_log2 (INTVAL (XEXP (op0, 0)))) >= 0) |