https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67634
Bug ID: 67634
Summary: Can't preserve bound register in interrupt handler
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: other
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: julia.koval at intel dot com
Blocks: 67552
Target Milestone: ---
[hjl@gnu-6 interrupt-6]$ cat bnd.i
void
__attribute__((interrupt))
fn1 (void)
{
asm ("#"
:
:
: "bnd0");
}
[hjl@gnu-6 interrupt-6]$ make
/export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O2 -mmpx -g -S -o bnd.s bnd.i
bnd.i: In function ‘fn1’:
bnd.i:9:1: error: insn does not satisfy its constraints:
}
^
(insn/f 9 3 10 2 (set (mem:DI (pre_dec:DI (reg/f:DI 7 sp)) [0 S8 A8])
(reg:DI 77 bnd0)) bnd.i:4 61 {*pushdi2_rex64}
(expr_list:REG_DEAD (reg:DI 77 bnd0)
(nil)))
bnd.i:9:1: internal compiler error: in extract_constrain_insn, at recog.c:2200
0xcf01e5 _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
/export/gnu/import/git/sources/gcc/gcc/rtl-error.c:109
0xcf0245 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
/export/gnu/import/git/sources/gcc/gcc/rtl-error.c:120
0xca21a2 extract_constrain_insn(rtx_insn*)
/export/gnu/import/git/sources/gcc/gcc/recog.c:2200
0xcb080f copyprop_hardreg_forward_1
/export/gnu/import/git/sources/gcc/gcc/regcprop.c:778
0xcb2040 execute
/export/gnu/import/git/sources/gcc/gcc/regcprop.c:1268
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
Makefile:27: recipe for target 'bnd.s' failed
make: *** [bnd.s] Error 1
[hjl@gnu-6 interrupt-6]$
We can't use push to save bound registers.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67552
[Bug 67552] [meta] x86 interrupt attribute