Bug 67060 - [6 Regression] FAIL: gcc.dg/pr56228.c (test for excess errors)
Summary: [6 Regression] FAIL: gcc.dg/pr56228.c (test for excess errors)
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 6.0
: P3 normal
Target Milestone: 6.0
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-07-29 21:17 UTC by John David Anglin
Modified: 2015-08-03 17:47 UTC (History)
0 users

See Also:
Host: hppa64-hp-hpux11.11
Target: hppa64-hp-hpux11.11
Build: hppa64-hp-hpux11.11
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description John David Anglin 2015-07-29 21:17:57 UTC
Executing on host: /test/gnu/gcc/objdir/gcc/xgcc -B/test/gnu/gcc/objdir/gcc/  -f
no-diagnostics-show-caret -fdiagnostics-color=never   -O2 -c   -o pr56228.o /tes
t/gnu/gcc/gcc/gcc/testsuite/gcc.dg/pr56228.c    (timeout = 300)
spawn /test/gnu/gcc/objdir/gcc/xgcc -B/test/gnu/gcc/objdir/gcc/ -fno-diagnostics
-show-caret -fdiagnostics-color=never -O2 -c -o pr56228.o /test/gnu/gcc/gcc/gcc/
testsuite/gcc.dg/pr56228.c
/test/gnu/gcc/gcc/gcc/testsuite/gcc.dg/pr56228.c: In function 'foo':
/test/gnu/gcc/gcc/gcc/testsuite/gcc.dg/pr56228.c:17:1: error: unable to find a r
egister to spill in class 'R1_REGS'
/test/gnu/gcc/gcc/gcc/testsuite/gcc.dg/pr56228.c:17:1: error: this is the insn:
(call_insn 12 11 13 2 (parallel [            (call (mem:SI (reg/f:DI 76) [0 *fnb_2 S4 A32])
                (const_int 64 [0x40]))
            (clobber (reg:DI 1 %r1))
            (clobber (reg:DI 2 %r2))
            (clobber (reg:DI 4 %r4))
            (use (reg:DI 27 %r27))
            (use (reg/f:DI 29 %r29))            (use (const_int 1 [0x1]))
        ]) /test/gnu/gcc/gcc/gcc/testsuite/gcc.dg/pr56228.c:15 262 {call_reg_64b
it}
     (expr_list:REG_DEAD (reg/f:DI 76)
        (expr_list:REG_DEAD (reg/f:DI 29 %r29)
            (expr_list:REG_CALL_DECL (nil)
                (nil))))
    (nil))
/test/gnu/gcc/gcc/gcc/testsuite/gcc.dg/pr56228.c:17: confused by earlier errors, bailing out
compiler exited with status 1

pa.md has the following code which attempts to ensure the call address is
in a register:

          op = force_reg (word_mode, op);
          emit_call_insn (gen_call_reg_64bit (op, nb, r4));

However, optimization has removed the forced copy and a reload is needed.
This fails because the reload needs %r1 and the pattern clobbers %r1.

Maybe the clobber can be removed from the pattern as the call itself doesn't use %r1 although it is a CALL_USED_REGISTERS register.
Comment 1 John David Anglin 2015-08-03 17:26:51 UTC
Author: danglin
Date: Mon Aug  3 17:26:19 2015
New Revision: 226522

URL: https://gcc.gnu.org/viewcvs?rev=226522&root=gcc&view=rev
Log:
	PR target/67060
	* config/pa/pa.md (call_reg_64bit): Remove reg:DI 1 clobber.
	Adjust splits to match new pattern.


Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/pa/pa.md
Comment 2 John David Anglin 2015-08-03 17:29:53 UTC
Author: danglin
Date: Mon Aug  3 17:29:22 2015
New Revision: 226523

URL: https://gcc.gnu.org/viewcvs?rev=226523&root=gcc&view=rev
Log:
	PR target/67060
	* config/pa/pa.md (call_reg_64bit): Remove reg:DI 1 clobber.
	Adjust splits to match new pattern.


Modified:
    branches/gcc-5-branch/gcc/ChangeLog
    branches/gcc-5-branch/gcc/config/pa/pa.md
Comment 3 John David Anglin 2015-08-03 17:32:40 UTC
Author: danglin
Date: Mon Aug  3 17:32:08 2015
New Revision: 226524

URL: https://gcc.gnu.org/viewcvs?rev=226524&root=gcc&view=rev
Log:
	PR target/67060
	* config/pa/pa.md (call_reg_64bit): Remove reg:DI 1 clobber.
	Adjust splits to match new pattern.


Modified:
    branches/gcc-4_9-branch/gcc/ChangeLog
    branches/gcc-4_9-branch/gcc/config/pa/pa.md
Comment 4 John David Anglin 2015-08-03 17:47:06 UTC
Fixed.