diff mbox

rs6000: Fix for and_operand oversight (PR68332, PR67677)

Message ID 2d0b73ab5606fbbc51b38743fdea0a1356887a63.1448347437.git.segher@kernel.crashing.org
State New
Headers show

Commit Message

Segher Boessenkool Nov. 24, 2015, 7:13 a.m. UTC
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.

---
 gcc/config/rs6000/predicates.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

David Edelsohn Nov. 24, 2015, 3:49 p.m. UTC | #1
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 mbox

Patch

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"))))