Commit 55cdadd5 by Andrew Stubbs Committed by Andrew Stubbs

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
parent 58eba515
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> 2011-10-07 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_emit_tls_call_insn): Remove assertion. * config/s390/s390.c (s390_emit_tls_call_insn): Remove assertion.
...@@ -129,11 +129,12 @@ ...@@ -129,11 +129,12 @@
(ior (match_operand 0 "arm_rhs_operand") (ior (match_operand 0 "arm_rhs_operand")
(match_operand 0 "memory_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" (define_predicate "shift_amount_operand"
(ior (and (match_test "TARGET_ARM") (ior (and (match_test "TARGET_ARM")
(match_operand 0 "s_register_operand")) (match_operand 0 "s_register_operand"))
(and (match_code "const_int") (match_operand 0 "const_int_operand")))
(match_test "((unsigned HOST_WIDE_INT) INTVAL (op)) < 32"))))
(define_predicate "arm_add_operand" (define_predicate "arm_add_operand"
(ior (match_operand 0 "arm_rhs_operand") (ior (match_operand 0 "arm_rhs_operand")
...@@ -219,13 +220,20 @@ ...@@ -219,13 +220,20 @@
(match_test "mode == GET_MODE (op)"))) (match_test "mode == GET_MODE (op)")))
;; True for shift operators. ;; 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" (define_special_predicate "shift_operator"
(and (ior (ior (and (match_code "mult") (and (ior (ior (and (match_code "mult")
(match_test "power_of_two_operand (XEXP (op, 1), mode)")) (match_test "power_of_two_operand (XEXP (op, 1), mode)"))
(and (match_code "rotate") (and (match_code "rotate")
(match_test "GET_CODE (XEXP (op, 1)) == CONST_INT (match_test "GET_CODE (XEXP (op, 1)) == CONST_INT
&& ((unsigned HOST_WIDE_INT) INTVAL (XEXP (op, 1))) < 32"))) && ((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)"))) (match_test "mode == GET_MODE (op)")))
;; True for shift operators which can be used with saturation instructions. ;; True for shift operators which can be used with saturation instructions.
......
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> 2011-10-07 Janus Weil <janus@gcc.gnu.org>
PR fortran/50625 PR fortran/50625
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment