This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/81644] ICE in rtl_verify_bb_insn, BBRO pass duplicates BB that ends with flow control insn
- From: "ubizjak at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 02 Aug 2017 10:44:26 +0000
- Subject: [Bug target/81644] ICE in rtl_verify_bb_insn, BBRO pass duplicates BB that ends with flow control insn
- Auto-submitted: auto-generated
- References: <bug-81644-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81644
Uroš Bizjak <ubizjak at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-08-02
Component|rtl-optimization |target
Target Milestone|--- |8.0
Ever confirmed|0 |1
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> ---
It turned out we can't simply emit trap insn during epilogue expansion, since
epilogue is expanded on FALLTHRU edge to EXIT BB. Later passes rightfully choke
on control flow insn in BB with FALTHRU exit edge.
I'm testing the following patch:
--cut here--
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c (revision 250818)
+++ config/i386/i386.c (working copy)
@@ -15199,7 +15199,7 @@
if (ix86_function_naked (current_function_decl))
{
/* The program should not reach this point. */
- emit_insn (gen_trap ());
+ emit_insn (gen_ud2 ());
return;
}
Index: config/i386/i386.md
===================================================================
--- config/i386/i386.md (revision 250818)
+++ config/i386/i386.md (working copy)
@@ -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")
--cut here--