52 lines
1.8 KiB
Diff
52 lines
1.8 KiB
Diff
2017-08-08 Richard Biener <rguenther@suse.de>
|
|
|
|
PR middle-end/81766
|
|
* function.c (thread_prologue_and_epilogue_insns): Restore
|
|
behavior of always calling find_many_sub_basic_blocks on
|
|
the inserted prologue.
|
|
|
|
* gcc.target/i386/pr81766.c: New testcase.
|
|
|
|
Index: gcc/function.c
|
|
===================================================================
|
|
--- gcc/function.c (revision 250947)
|
|
+++ gcc/function.c (working copy)
|
|
@@ -6082,17 +6082,16 @@ thread_prologue_and_epilogue_insns (void
|
|
if (prologue_insn
|
|
&& BLOCK_FOR_INSN (prologue_insn) == NULL)
|
|
prologue_insn = NULL;
|
|
- if (split_prologue_insn || prologue_insn)
|
|
- {
|
|
- auto_sbitmap blocks (last_basic_block_for_fn (cfun));
|
|
- bitmap_clear (blocks);
|
|
- if (split_prologue_insn)
|
|
- bitmap_set_bit (blocks,
|
|
- BLOCK_FOR_INSN (split_prologue_insn)->index);
|
|
- if (prologue_insn)
|
|
- bitmap_set_bit (blocks, BLOCK_FOR_INSN (prologue_insn)->index);
|
|
- find_many_sub_basic_blocks (blocks);
|
|
- }
|
|
+ auto_sbitmap blocks (last_basic_block_for_fn (cfun));
|
|
+ bitmap_clear (blocks);
|
|
+ if (split_prologue_insn)
|
|
+ bitmap_set_bit (blocks,
|
|
+ BLOCK_FOR_INSN (split_prologue_insn)->index);
|
|
+ if (prologue_insn)
|
|
+ bitmap_set_bit (blocks, BLOCK_FOR_INSN (prologue_insn)->index);
|
|
+ bitmap_set_bit (blocks, entry_edge->dest->index);
|
|
+ bitmap_set_bit (blocks, orig_entry_edge->dest->index);
|
|
+ find_many_sub_basic_blocks (blocks);
|
|
}
|
|
|
|
default_rtl_profile ();
|
|
Index: gcc/testsuite/gcc.target/i386/pr81766.c
|
|
===================================================================
|
|
--- gcc/testsuite/gcc.target/i386/pr81766.c (nonexistent)
|
|
+++ gcc/testsuite/gcc.target/i386/pr81766.c (working copy)
|
|
@@ -0,0 +1,5 @@
|
|
+/* { dg-do compile } */
|
|
+/* { dg-require-effective-target lp64 } */
|
|
+/* { dg-options "-O2 -fPIE -mcmodel=large" } */
|
|
+
|
|
+int main() { return 0; }
|