diff options
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/s390/predicates.md | 5 | ||||
-rw-r--r-- | gcc/genpreds.c | 2 | ||||
-rw-r--r-- | gcc/genrecog.c | 3 |
4 files changed, 14 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d67b9c6..d01894a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-12-23 Dominik Vogt <vogt@linux.vnet.ibm.com> + + * 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 <thomas@codesourcery.com> * 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 02a1e4e..1211cf01 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 eac2180..c82113d 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 599121f..81ea35b 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; |