diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2008-06-02 21:13:20 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2008-06-02 21:13:20 +0000 |
commit | de9f679dbec4f6cf6503a1b9be1cf8cd8daf0f4b (patch) | |
tree | d96980f2d8160a4db018c094531154dcc8b99703 /gcc | |
parent | 345235247ae4c80dcd98e7630d35be32533a35a1 (diff) | |
download | gcc-de9f679dbec4f6cf6503a1b9be1cf8cd8daf0f4b.zip gcc-de9f679dbec4f6cf6503a1b9be1cf8cd8daf0f4b.tar.gz gcc-de9f679dbec4f6cf6503a1b9be1cf8cd8daf0f4b.tar.bz2 |
mips.c (mips_emit_loadgp): Return early if there is nothing do to...
gcc/
* config/mips/mips.c (mips_emit_loadgp): Return early if
there is nothing do to, otherwise emit a blockage if
!TARGET_EXPLICIT_RELOCS || crtl->profile.
* config/mips/mips.md (loadgp_blockage): Use SI rather than DI.
From-SVN: r136294
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 11 | ||||
-rw-r--r-- | gcc/config/mips/mips.md | 3 |
3 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7edcf2e..8db8a55 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-06-02 Richard Sandiford <rdsandiford@googlemail.com> + + * config/mips/mips.c (mips_emit_loadgp): Return early if + there is nothing do to, otherwise emit a blockage if + !TARGET_EXPLICIT_RELOCS || crtl->profile. + * config/mips/mips.md (loadgp_blockage): Use SI rather than DI. + 2008-06-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * configure.ac: Drop unneeded backslash ending up in config.in. diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 551159c..41fc6d0 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -8516,8 +8516,6 @@ mips_emit_loadgp (void) emit_insn (Pmode == SImode ? gen_loadgp_newabi_si (pic_reg, offset, incoming_address) : gen_loadgp_newabi_di (pic_reg, offset, incoming_address)); - if (!TARGET_EXPLICIT_RELOCS) - emit_insn (gen_loadgp_blockage ()); break; case LOADGP_RTP: @@ -8526,13 +8524,16 @@ mips_emit_loadgp (void) emit_insn (Pmode == SImode ? gen_loadgp_rtp_si (pic_reg, base, index) : gen_loadgp_rtp_di (pic_reg, base, index)); - if (!TARGET_EXPLICIT_RELOCS) - emit_insn (gen_loadgp_blockage ()); break; default: - break; + return; } + /* Emit a blockage if there are implicit uses of the GP register. + This includes profiled functions, because FUNCTION_PROFILE uses + a jal macro. */ + if (!TARGET_EXPLICIT_RELOCS || crtl->profile) + emit_insn (gen_loadgp_blockage ()); } /* Expand the "prologue" pattern. */ diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 3370d99..29b8e70 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -4350,12 +4350,11 @@ } [(set_attr "length" "8")]) -;; The use of gp is hidden when not using explicit relocations. ;; This blockage instruction prevents the gp load from being ;; scheduled after an implicit use of gp. It also prevents ;; the load from being deleted as dead. (define_insn "loadgp_blockage" - [(unspec_volatile [(reg:DI 28)] UNSPEC_BLOCKAGE)] + [(unspec_volatile [(reg:SI 28)] UNSPEC_BLOCKAGE)] "" "" [(set_attr "type" "ghost") |