diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2011-10-07 14:59:37 +0000 |
---|---|---|
committer | Andrew Stubbs <ams@gcc.gnu.org> | 2011-10-07 14:59:37 +0000 |
commit | 55cdadd504277e112ab219032410781fa6356976 (patch) | |
tree | c786856194e9bfb6fd7e56e437890072321e4f07 | |
parent | 58eba515913ec98edcf090389599ae25f4704ea1 (diff) | |
download | gcc-55cdadd504277e112ab219032410781fa6356976.zip gcc-55cdadd504277e112ab219032410781fa6356976.tar.gz gcc-55cdadd504277e112ab219032410781fa6356976.tar.bz2 |
predicates.md (shift_amount_operand): Remove constant range check.
2011-10-07 Andrew Stubbs <ams@codesourcery.com>
gcc/
* config/arm/predicates.md (shift_amount_operand): Remove constant
range check.
(shift_operator): Check range of constants for all shift operators.
gcc/testsuite/
* gcc.dg/pr50193-1.c: New file.
* gcc.target/arm/shiftable.c: New file.
From-SVN: r179661
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/predicates.md | 14 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 |
3 files changed, 22 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 695ba66..715bcea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-10-07 Andrew Stubbs <ams@codesourcery.com> + + * config/arm/predicates.md (shift_amount_operand): Remove constant + range check. + (shift_operator): Check range of constants for all shift operators. + 2011-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/s390.c (s390_emit_tls_call_insn): Remove assertion. diff --git a/gcc/config/arm/predicates.md b/gcc/config/arm/predicates.md index 27ba603..2c1a138 100644 --- a/gcc/config/arm/predicates.md +++ b/gcc/config/arm/predicates.md @@ -129,11 +129,12 @@ (ior (match_operand 0 "arm_rhs_operand") (match_operand 0 "memory_operand"))) +;; This doesn't have to do much because the constant is already checked +;; in the shift_operator predicate. (define_predicate "shift_amount_operand" (ior (and (match_test "TARGET_ARM") (match_operand 0 "s_register_operand")) - (and (match_code "const_int") - (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) < 32")))) + (match_operand 0 "const_int_operand"))) (define_predicate "arm_add_operand" (ior (match_operand 0 "arm_rhs_operand") @@ -219,13 +220,20 @@ (match_test "mode == GET_MODE (op)"))) ;; True for shift operators. +;; Notes: +;; * mult is only permitted with a constant shift amount +;; * patterns that permit register shift amounts only in ARM mode use +;; shift_amount_operand, patterns that always allow registers do not, +;; so we don't have to worry about that sort of thing here. (define_special_predicate "shift_operator" (and (ior (ior (and (match_code "mult") (match_test "power_of_two_operand (XEXP (op, 1), mode)")) (and (match_code "rotate") (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT && ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32"))) - (match_code "ashift,ashiftrt,lshiftrt,rotatert")) + (and (match_code "ashift,ashiftrt,lshiftrt,rotatert") + (match_test "GET_CODE (XEXP (op, 1)) != CONST_INT + || ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32"))) (match_test "mode == GET_MODE (op)"))) ;; True for shift operators which can be used with saturation instructions. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af8d164..b866335 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-07 Andrew Stubbs <ams@codesourcery.com> + + * gcc.dg/pr50193-1.c: New file. + * gcc.target/arm/shiftable.c: New file. + 2011-10-07 Janus Weil <janus@gcc.gnu.org> PR fortran/50625 |