From 76cc794dfc8f5d9fe101ffd8a8b3a7d98bd729e3 Mon Sep 17 00:00:00 2001 From: rdapp Date: Mon, 5 Nov 2018 14:09:28 +0000 Subject: [PATCH] S/390: Allow immediates in loc expander This allows immediate operands for load on condition. gcc/ChangeLog: 2018-11-05 Robin Dapp * config/s390/predicates.md: Fix typo. * config/s390/s390.md: Allow immediates for load on condition. gcc/testsuite/ChangeLog: 2018-11-05 Robin Dapp * gcc.dg/loop-8.c: On s390, always run the test with -march=zEC12. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265804 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/s390/predicates.md | 2 +- gcc/config/s390/s390.md | 10 ++++++++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/loop-8.c | 4 ++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 775461b936e..c76911db0aa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-11-05 Robin Dapp + + * config/s390/predicates.md: Fix typo. + * config/s390/s390.md: Allow immediates for load on condition. + 2018-11-05 Martin Liska * alloc-pool.h (struct pool_usage): Use SIZE_AMOUNT. diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md index 98a824e77b7..97f717c558d 100644 --- a/gcc/config/s390/predicates.md +++ b/gcc/config/s390/predicates.md @@ -212,7 +212,7 @@ (INTVAL (op), false, GET_MODE_BITSIZE (mode), NULL, NULL); }) -;; Return true if OP is ligitimate for any LOC instruction. +;; Return true if OP is legitimate for any LOC instruction. (define_predicate "loc_operand" (ior (match_operand 0 "nonimmediate_operand") diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index e4049c25406..644781f8ad6 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -6575,10 +6575,16 @@ (define_expand "movcc" [(set (match_operand:GPR 0 "nonimmediate_operand" "") (if_then_else:GPR (match_operand 1 "comparison_operator" "") - (match_operand:GPR 2 "nonimmediate_operand" "") - (match_operand:GPR 3 "nonimmediate_operand" "")))] + (match_operand:GPR 2 "loc_operand" "") + (match_operand:GPR 3 "loc_operand" "")))] "TARGET_Z196" { + if (!TARGET_Z13 && CONSTANT_P (operands[2])) + operands[2] = force_reg (mode, operands[2]); + + if (!TARGET_Z13 && CONSTANT_P (operands[3])) + operands[3] = force_reg (mode, operands[3]); + /* Emit the comparison insn in case we do not already have a comparison result. */ if (!s390_comparison (operands[1], VOIDmode)) operands[1] = s390_emit_compare (GET_CODE (operands[1]), diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f0715986e0f..47166959123 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-11-05 Robin Dapp + + * gcc.dg/loop-8.c: On s390, always run the test with -march=zEC12. + 2018-11-05 Richard Biener * gcc.dg/pr41488.c: Scan ivcanon dump instead of sccp one. diff --git a/gcc/testsuite/gcc.dg/loop-8.c b/gcc/testsuite/gcc.dg/loop-8.c index 842c0e773b2..1eefccc1a3b 100644 --- a/gcc/testsuite/gcc.dg/loop-8.c +++ b/gcc/testsuite/gcc.dg/loop-8.c @@ -1,6 +1,10 @@ /* { dg-do compile } */ /* { dg-options "-O1 -fdump-rtl-loop2_invariant" } */ /* { dg-skip-if "unexpected IV" { "hppa*-*-* mips*-*-* visium-*-* powerpc*-*-* riscv*-*-*" } } */ +/* Load immediate on condition is available from z13 on and prevents moving + the load out of the loop, so always run this test with -march=zEC12 that + does not have load immediate on condition. */ +/* { dg-additional-options "-march=zEC12" { target { s390*-*-* } } } */ void f (int *a, int *b) -- 2.11.4.GIT