summaryrefslogtreecommitdiffstats
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-23 22:23:10 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-23 22:23:10 +0000
commit0c4f797f009e82a57fd66672bbc10f94adb011a1 (patch)
tree86c29fe20bc264a3b0e4c385a484de2f24845112 /gcc/combine.c
parentabeadffeb0826db6d4564020e8f34c52c3a06b59 (diff)
downloadppe42-gcc-0c4f797f009e82a57fd66672bbc10f94adb011a1.tar.gz
ppe42-gcc-0c4f797f009e82a57fd66672bbc10f94adb011a1.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76461 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index b048bff52f0..b2d776902ef 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)
OpenPOWER on IntegriCloud