aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2014-10-31 22:52:22 +0100
committerUros Bizjak <uros@gcc.gnu.org>2014-10-31 22:52:22 +0100
commit8e454d55b9058dc0092a7206552ab889023127a7 (patch)
treea5808a14d069bf9b36bdcfebe402e6e2ad791f3f /gcc
parentccd615e3fdf2d2b80577d27e884884e9f758e8ea (diff)
downloadgcc-8e454d55b9058dc0092a7206552ab889023127a7.zip
gcc-8e454d55b9058dc0092a7206552ab889023127a7.tar.gz
gcc-8e454d55b9058dc0092a7206552ab889023127a7.tar.bz2
re PR rtl-optimization/63620 (RELOAD lost SET_GOT dependency on Darwin)
PR target/63620 * config/i386/i386-protos.h (ix86_use_pseudo_pic_reg): Declare. * config/i386/i386.c (ix86_use_pseudo_pic_reg): Export. * config/i386/i386.md (*pushtf): Allow only CONST_DOUBLEs that won't be reloaded through memory. (*pushxf): Ditto. (*pushdf): Ditto. From-SVN: r216990
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386-protos.h2
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/config/i386/i386.md9
4 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8fb70a1..1de8344 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,7 +1,9 @@
2014-10-31 Uros Bizjak <ubizjak@gmail.com>
PR target/63620
- * config/i386/i386.md (*pushtf): Allow only CONST_DOUBLES that won't
+ * config/i386/i386-protos.h (ix86_use_pseudo_pic_reg): Declare.
+ * config/i386/i386.c (ix86_use_pseudo_pic_reg): Export.
+ * config/i386/i386.md (*pushtf): Allow only CONST_DOUBLEs that won't
be reloaded through memory.
(*pushxf): Ditto.
(*pushdf): Ditto.
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index 81a1f11..c9cee99 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -42,6 +42,8 @@ extern enum calling_abi ix86_function_type_abi (const_tree);
extern void ix86_reset_previous_fndecl (void);
+extern bool ix86_use_pseudo_pic_reg (void);
+
#ifdef RTX_CODE
extern int standard_80387_constant_p (rtx);
extern const char *standard_80387_constant_opcode (rtx);
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 9b22445..bef00ae 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6158,7 +6158,7 @@ ix86_maybe_switch_abi (void)
/* Return 1 if pseudo register should be created and used to hold
GOT address for PIC code. */
-static bool
+bool
ix86_use_pseudo_pic_reg (void)
{
if ((TARGET_64BIT
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 7e4f328..f8dd547 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2738,7 +2738,8 @@
[(set (match_operand:TF 0 "push_operand" "=<,<")
(match_operand:TF 1 "general_no_elim_operand" "x,*roF"))]
"(TARGET_64BIT || TARGET_SSE)
- && (!can_create_pseudo_p ()
+ && (!ix86_use_pseudo_pic_reg ()
+ || !can_create_pseudo_p ()
|| GET_CODE (operands[1]) != CONST_DOUBLE
|| standard_sse_constant_p (operands[1]))"
{
@@ -2766,7 +2767,8 @@
(define_insn "*pushxf"
[(set (match_operand:XF 0 "push_operand" "=<,<")
(match_operand:XF 1 "general_no_elim_operand" "f,Yx*roF"))]
- "!can_create_pseudo_p ()
+ "!ix86_use_pseudo_pic_reg ()
+ || !can_create_pseudo_p ()
|| GET_CODE (operands[1]) != CONST_DOUBLE
|| standard_80387_constant_p (operands[1]) > 0"
{
@@ -2800,7 +2802,8 @@
(define_insn "*pushdf"
[(set (match_operand:DF 0 "push_operand" "=<,<,<,<")
(match_operand:DF 1 "general_no_elim_operand" "f,Yd*roF,rmF,x"))]
- "!can_create_pseudo_p ()
+ "!ix86_use_pseudo_pic_reg ()
+ || !can_create_pseudo_p ()
|| GET_CODE (operands[1]) != CONST_DOUBLE
|| (!(TARGET_SSE2 && TARGET_SSE_MATH)
&& standard_80387_constant_p (operands[1]) > 0)