diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2015-11-24 15:04:11 +0100 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2015-11-24 15:04:11 +0100 |
commit | 6b2f9bb6228bca4b610a6645a60e1557d65b14ef (patch) | |
tree | 4907a7710d2fae34943d6e1cb149c96f84c3a93f /gcc | |
parent | f768642887a807e7d1cde9c9b9a7ff5d49efdcb1 (diff) | |
download | gcc-6b2f9bb6228bca4b610a6645a60e1557d65b14ef.zip gcc-6b2f9bb6228bca4b610a6645a60e1557d65b14ef.tar.gz gcc-6b2f9bb6228bca4b610a6645a60e1557d65b14ef.tar.bz2 |
rs6000: Fix for and_operand oversight (PR68332, PR67677)
Calling rs6000_is_valid_and_mask on a reg instead of on a const_int is
not a good idea, as PR68332 and PR67677 as well as testing with
--enable-checking=yes,rtl show. Fix this.
PR target/66217
PR target/67677
PR target/68332
* config/rs6000/predicates.md (and_operand): Check that the operand
is a const_int before calling rs6000_is_valid_and_mask.
From-SVN: r230811
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/predicates.md | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ada1e30..5203b28 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-11-24 Segher Boessenkool <segher@kernel.crashing.org> + + PR target/66217 + PR target/67677 + PR target/68332 + * config/rs6000/predicates.md (and_operand): Check that the operand + is a const_int before calling rs6000_is_valid_and_mask. + 2015-11-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/aarch64/aarch64.md (*condjump): Rename to... diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index 3b1a456..362188f 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -864,7 +864,8 @@ ;; Return 1 if the operand is either a non-special register or a ;; constant that can be used as the operand of a logical AND. (define_predicate "and_operand" - (ior (match_test "rs6000_is_valid_and_mask (op, mode)") + (ior (and (match_code "const_int") + (match_test "rs6000_is_valid_and_mask (op, mode)")) (if_then_else (match_test "fixed_regs[CR0_REGNO]") (match_operand 0 "gpc_reg_operand") (match_operand 0 "logical_operand")))) |