https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67060
Bug ID: 67060 Summary: [6 Regression] FAIL: gcc.dg/pr56228.c (test for excess errors) Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: danglin at gcc dot gnu.org Target Milestone: --- Host: hppa64-hp-hpux11.11 Target: hppa64-hp-hpux11.11 Build: hppa64-hp-hpux11.11 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.