Message ID | 2d0b73ab5606fbbc51b38743fdea0a1356887a63.1448347437.git.segher@kernel.crashing.org |
---|---|
State | New |
Headers | show |
On Tue, Nov 24, 2015 at 2:13 AM, Segher Boessenkool <segher@kernel.crashing.org> wrote: > 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. > > Bootstrapped and tested on powerpc64-linux. Is this okay for trunk? > > > Segher > > > 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. Okay. Thanks, David
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 @@ (define_predicate "non_logical_cint_operand" ;; 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"))))