Hi all,

Testing with RTL checking enabled showed another failure in 
gcc.dg/torture/float32-builtin.c.
aarch64_float_const_zero_rtx_p was passed down a complex subreg expression 
during combine/recog.
The pattern was supposed to reject that expression but it made its way to 
aarch64_float_const_zero_rtx_p
which is only supposed to handle CONST_DOUBLEs.

The culprit is the aarch64_reg_or_fp_zero predicate that restricts the accepted 
codes to reg,subreg,const_double but
passes down anything that is not a reg into aarch64_float_const_zero_rtx_p. 
That includes SUBREGs that do not
match register_operand, which we want to reject.
This patch checks that the argument is a CONST_DOUBLE before passing it to 
aarch64_float_const_zero_rtx_p


Bootstrapped and tested on aarch64-none-linux-gnu with RTL checking enabled.

Ok for trunk?
Thanks,
Kyrill

P.S. This predicate is only used in the store-pair family of patterns.

2016-11-17  Kyrylo Tkachov  <kyrylo.tkac...@arm.com>

    * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): Check for
    const_double code before calling aarch64_float_const_zero_rtx_p.
commit 950f8638a894aa699d1743fc3277b0aee3009fb7
Author: Kyrylo Tkachov <kyrylo.tkac...@arm.com>
Date:   Tue Nov 15 16:04:39 2016 +0000

    [AArch64] Fix gcc.dg/torture/float32-builtin.c with RTL checking

diff --git a/gcc/config/aarch64/predicates.md b/gcc/config/aarch64/predicates.md
index ebda6d8..0671cc8 100644
--- a/gcc/config/aarch64/predicates.md
+++ b/gcc/config/aarch64/predicates.md
@@ -54,9 +54,9 @@ (define_predicate "aarch64_reg_or_zero"
 	    (match_test "op == const0_rtx"))))
 
 (define_predicate "aarch64_reg_or_fp_zero"
-  (and (match_code "reg,subreg,const_double")
-       (ior (match_operand 0 "register_operand")
-	    (match_test "aarch64_float_const_zero_rtx_p (op)"))))
+  (ior (match_operand 0 "register_operand")
+	(and (match_code "const_double")
+	     (match_test "aarch64_float_const_zero_rtx_p (op)"))))
 
 (define_predicate "aarch64_reg_zero_or_m1_or_1"
   (and (match_code "reg,subreg,const_int")

Reply via email to