aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2008-06-02 21:13:20 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2008-06-02 21:13:20 +0000
commitde9f679dbec4f6cf6503a1b9be1cf8cd8daf0f4b (patch)
treed96980f2d8160a4db018c094531154dcc8b99703 /gcc
parent345235247ae4c80dcd98e7630d35be32533a35a1 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/config/mips/mips.c11
-rw-r--r--gcc/config/mips/mips.md3
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")