From: Dominik Vogt Date: Wed, 23 Dec 2015 11:06:20 +0000 (+0000) Subject: Fix broken handling of LABEL_REF in genrecog + genpreds. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=986e29bc6a3df0269268d7045058049beb26e1cb;p=gcc.git Fix broken handling of LABEL_REF in genrecog + genpreds. gcc/ChangeLog * config/s390/predicates.md ("larl_operand"): Remove now superfluous const_int and const_double. * genrecog.c (safe_predicate_mode): Return false for VOIDmode LABEL_REFs even if the predicate does not handle const_int, const_double or const_wide_int. * genpreds.c (add_mode_tests): Treat LABEL_REF like CONST_INT. From-SVN: r231927 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d67b9c6e399..d01894a58dd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-12-23 Dominik Vogt + + * config/s390/predicates.md ("larl_operand"): Remove now superfluous + const_int and const_double. + * genrecog.c (safe_predicate_mode): Return false for VOIDmode + LABEL_REFs even if the predicate does not handle const_int, + const_double or const_wide_int. + * genpreds.c (add_mode_tests): Treat LABEL_REF like CONST_INT. + 2015-12-23 Thomas Schwinge * tree-core.h (enum omp_clause_code): Merge OMP_CLAUSE_USE_DEVICE diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md index 02a1e4e5b7c..1211cf01b2c 100644 --- a/gcc/config/s390/predicates.md +++ b/gcc/config/s390/predicates.md @@ -122,10 +122,7 @@ ;; Return true if OP a valid operand for the LARL instruction. (define_predicate "larl_operand" -; Note: Although CONST_INT and CONST_DOUBLE are not handled in this predicate, -; at least one of them needs to appear or otherwise safe_predicate_mode will -; assume that a VOIDmode LABEL_REF is not accepted either (see genrecog.c). - (match_code "label_ref, symbol_ref, const, const_int, const_double") + (match_code "label_ref, symbol_ref, const") { /* Allow labels and local symbols. */ if (GET_CODE (op) == LABEL_REF) diff --git a/gcc/genpreds.c b/gcc/genpreds.c index eac2180e246..c82113d2372 100644 --- a/gcc/genpreds.c +++ b/gcc/genpreds.c @@ -320,6 +320,8 @@ add_mode_tests (struct pred_data *p) { case CONST_INT: case CONST_WIDE_INT: + /* Special handling for (VOIDmode) LABEL_REFs. */ + case LABEL_REF: matches_const_scalar_int_p = true; break; diff --git a/gcc/genrecog.c b/gcc/genrecog.c index 599121fb693..81ea35be8b4 100644 --- a/gcc/genrecog.c +++ b/gcc/genrecog.c @@ -3382,7 +3382,8 @@ safe_predicate_mode (const struct pred_data *pred, machine_mode mode) if (GET_MODE_CLASS (mode) == MODE_INT && (pred->codes[CONST_INT] || pred->codes[CONST_DOUBLE] - || pred->codes[CONST_WIDE_INT])) + || pred->codes[CONST_WIDE_INT] + || pred->codes[LABEL_REF])) return false; return !pred->special && mode != VOIDmode;