From e40191f1e0d1729b0a942e3ca286bf44e1443c59 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Sun, 27 Oct 2013 23:36:51 +0000 Subject: [PATCH] Fix line number data for PIC register setup code. 2013-10-27 Tom de Vries * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn. Don't commit insertions after NOTE_INSN_FUNCTION_BEG. * gcc.target/arm/require-pic-register-loc.c: New test. From-SVN: r204112 --- gcc/ChangeLog | 5 ++++ gcc/cfgexpand.c | 12 +++++--- gcc/testsuite/ChangeLog | 4 +++ .../gcc.target/arm/require-pic-register-loc.c | 29 +++++++++++++++++++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 testsuite/gcc.target/arm/require-pic-register-loc.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f4ad2215099..8d6147a3188 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-10-27 Tom de Vries + + * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn. + Don't commit insertions after NOTE_INSN_FUNCTION_BEG. + 2013-10-27 Oleg Endo * config/sh/sh.c (MSW, LSW): Move and rename macros to... diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index ba4c0e66e76..97050360f2b 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -4789,14 +4789,18 @@ gimple_expand_cfg (void) if (e->insns.r) { rebuild_jump_labels_chain (e->insns.r); - /* Avoid putting insns before parm_birth_insn. */ + /* Put insns after parm birth, but before + NOTE_INSNS_FUNCTION_BEG. */ if (e->src == ENTRY_BLOCK_PTR - && single_succ_p (ENTRY_BLOCK_PTR) - && parm_birth_insn) + && single_succ_p (ENTRY_BLOCK_PTR)) { rtx insns = e->insns.r; e->insns.r = NULL_RTX; - emit_insn_after_noloc (insns, parm_birth_insn, e->dest); + if (NOTE_P (parm_birth_insn) + && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG) + emit_insn_before_noloc (insns, parm_birth_insn, e->dest); + else + emit_insn_after_noloc (insns, parm_birth_insn, e->dest); } else commit_one_edge_insertion (e); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b3e5dc44c1e..12028b44027 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-10-27 Tom de Vries + + * gcc.target/arm/require-pic-register-loc.c: New test. + 2013-10-27 Uros Bizjak PR target/58679 diff --git a/testsuite/gcc.target/arm/require-pic-register-loc.c b/testsuite/gcc.target/arm/require-pic-register-loc.c new file mode 100644 index 00000000000..bd85e8640c2 --- /dev/null +++ b/testsuite/gcc.target/arm/require-pic-register-loc.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-g -fPIC" } */ + +void *v; +void a (void *x) { } +void b (void) { } + /* line 7. */ +int /* line 8. */ +main (int argc) /* line 9. */ +{ /* line 10. */ + if (argc == 12345) /* line 11. */ + { + a (v); + return 1; + } + b (); + + return 0; +} + +/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */ +/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */ +/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */ + +/* The loc at the start of the prologue. */ +/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */ + +/* The loc at the end of the prologue, with the first user line. */ +/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */ -- 2.30.2