re PR target/81644 (ICE in rtl_verify_bb_insn, BBRO pass duplicates BB that ends with flow control insn)

PR target/81644
	* config/i386/i386.md (unspecv): Add UNSPECV_UD2.
	(ud2): New insn pattern.
	* config/i386/i386.c (ix86_expand_epilogue):
	Generate ud2 instead of trap insn.

testsuite/ChangeLog:

	PR target/81644
	* gcc.target/i386/pr81644.c: New test.

From-SVN: r250830
This commit is contained in:
Uros Bizjak 2017-08-02 15:58:08 +02:00 committed by Uros Bizjak
parent 5e9fab92d1
commit f462948172
5 changed files with 42 additions and 1 deletions

View file

@ -1,3 +1,11 @@
2017-08-02 Uros Bizjak <ubizjak@gmail.com>
PR target/81644
* config/i386/i386.md (unspecv): Add UNSPECV_UD2.
(ud2): New insn pattern.
* config/i386/i386.c (ix86_expand_epilogue):
Generate ud2 instead of trap insn.
2017-08-02 Marek Polacek <polacek@redhat.com>
PR other/81667

View file

@ -15199,7 +15199,7 @@ ix86_expand_epilogue (int style)
if (ix86_function_naked (current_function_decl))
{
/* The program should not reach this point. */
emit_insn (gen_trap ());
emit_insn (gen_ud2 ());
return;
}

View file

@ -201,6 +201,7 @@
])
(define_c_enum "unspecv" [
UNSPECV_UD2
UNSPECV_BLOCKAGE
UNSPECV_STACK_PROBE
UNSPECV_PROBE_STACK_RANGE
@ -18606,6 +18607,18 @@
}
[(set_attr "length" "2")])
(define_insn "ud2"
[(unspec_volatile [(const_int 0)] UNSPECV_UD2)]
""
{
#ifdef HAVE_AS_IX86_UD2
return "ud2";
#else
return ASM_SHORT "0x0b0f";
#endif
}
[(set_attr "length" "2")])
(define_expand "prefetch"
[(prefetch (match_operand 0 "address_operand")
(match_operand:SI 1 "const_int_operand")

View file

@ -1,3 +1,8 @@
2017-08-02 Uros Bizjak <ubizjak@gmail.com>
PR target/81644
* gcc.target/i386/pr81644.c: New test.
2017-08-02 Tom de Vries <tom@codesourcery.com>
* gcc.dg/Walloca-14.c: Use relative line number.

View file

@ -0,0 +1,15 @@
/* PR target/81644 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
/* { dg-additional-options "-mregparm=1" { target ia32 } } */
void b (void);
void
__attribute__ ((naked))
a (int z)
{
if (z)
return;
b ();
}