While the expander accepts general_operand as src operand the risbg pattern only immediate_operand. Unfortunately the expander called force_reg only for VOIDmode constants missing things like e.g. symbol_refs. Fixed with the attached patch.
Bootstrapped on s390 and s390x. This fixes the pr70174.c testcase on s390x (-march=z10). Applied to mainline. Bye, -Andreas- gcc/ChangeLog: 2016-04-01 Andreas Krebbel <kreb...@linux.vnet.ibm.com> PR target/70404 * config/s390/s390.c (s390_expand_insv): Check for everything constant instead of just VOIDmode stuff. --- gcc/config/s390/s390.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 4f219be..1134d0f 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -6063,7 +6063,7 @@ s390_expand_insv (rtx dest, rtx op1, rtx op2, rtx src) { machine_mode mode_s = GET_MODE (src); - if (mode_s == VOIDmode) + if (CONSTANT_P (src)) { /* For constant zero values the representation with AND appears to be folded in more situations than the (set -- 1.9.1