aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2014-11-11 00:29:59 +0100
committerUros Bizjak <uros@gcc.gnu.org>2014-11-11 00:29:59 +0100
commit516119bd60f8544888280be3823db10beeafbf2a (patch)
tree54e59b494ea3f189280a62389db0ee8dca762d42 /gcc
parentdebede8184ef325f402e4f761eb0061a90525b43 (diff)
downloadgcc-516119bd60f8544888280be3823db10beeafbf2a.zip
gcc-516119bd60f8544888280be3823db10beeafbf2a.tar.gz
gcc-516119bd60f8544888280be3823db10beeafbf2a.tar.bz2
revert: re PR rtl-optimization/63620 (RELOAD lost SET_GOT dependency on Darwin)
2014-11-11 Uros Bizjak <ubizjak@gmail.com> Revert: 2014-10-31 Uros Bizjak <ubizjak@gmail.com> 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. testsuite/ChangeLog: 2014-11-11 Uros Bizjak <ubizjak@gmail.com> Ilya Enkovich <ilya.enkovich@intel.com> PR target/63620 * gcc.target/i386/pr63620.c: New test. Co-Authored-By: Ilya Enkovich <ilya.enkovich@intel.com> From-SVN: r217325
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/config/i386/i386-protos.h2
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/config/i386/i386.md22
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/i386/pr63620.c20
6 files changed, 43 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9d7dc26..bceacd6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2014-11-11 Uros Bizjak <ubizjak@gmail.com>
+
+ Revert:
+ 2014-10-31 Uros Bizjak <ubizjak@gmail.com>
+
+ 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.
+
2014-11-11 Jakub Jelinek <jakub@redhat.com>
Martin Liska <mliska@suse.cz>
diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
index d14a107..c4870d2 100644
--- a/gcc/config/i386/i386-protos.h
+++ b/gcc/config/i386/i386-protos.h
@@ -42,8 +42,6 @@ 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 085eb54..7a59252 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -6184,7 +6184,7 @@ ix86_maybe_switch_abi (void)
/* Return 1 if pseudo register should be created and used to hold
GOT address for PIC code. */
-bool
+static 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 f2b8788..0df66ea 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2779,15 +2779,10 @@
;; Floating point push instructions.
-;; %%% Remove CONST_DOUBLE workaround after PR63620 is fixed!
(define_insn "*pushtf"
[(set (match_operand:TF 0 "push_operand" "=<,<")
(match_operand:TF 1 "general_no_elim_operand" "x,*roF"))]
- "(TARGET_64BIT || TARGET_SSE)
- && (!ix86_use_pseudo_pic_reg ()
- || !can_create_pseudo_p ()
- || GET_CODE (operands[1]) != CONST_DOUBLE
- || standard_sse_constant_p (operands[1]))"
+ "TARGET_64BIT || TARGET_SSE"
{
/* This insn should be already split before reg-stack. */
gcc_unreachable ();
@@ -2809,14 +2804,10 @@
operands[0] = replace_equiv_address (operands[0], stack_pointer_rtx);
})
-;; %%% Remove CONST_DOUBLE workaround after PR63620 is fixed!
(define_insn "*pushxf"
[(set (match_operand:XF 0 "push_operand" "=<,<")
(match_operand:XF 1 "general_no_elim_operand" "f,Yx*roF"))]
- "!ix86_use_pseudo_pic_reg ()
- || !can_create_pseudo_p ()
- || GET_CODE (operands[1]) != CONST_DOUBLE
- || standard_80387_constant_p (operands[1]) > 0"
+ ""
{
/* This insn should be already split before reg-stack. */
gcc_unreachable ();
@@ -2844,17 +2835,10 @@
operands[0] = replace_equiv_address (operands[0], stack_pointer_rtx);
})
-;; %%% Remove CONST_DOUBLE workaround after PR63620 is fixed!
(define_insn "*pushdf"
[(set (match_operand:DF 0 "push_operand" "=<,<,<,<")
(match_operand:DF 1 "general_no_elim_operand" "f,Yd*roF,rmF,x"))]
- "!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)
- || (TARGET_SSE2 && TARGET_SSE_MATH
- && standard_sse_constant_p (operands[1]))"
+ ""
{
/* This insn should be already split before reg-stack. */
gcc_unreachable ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d4054e7..5a9d4de 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-11-11 Uros Bizjak <ubizjak@gmail.com>
+ Ilya Enkovich <ilya.enkovich@intel.com>
+
+ PR target/63620
+ * gcc.target/i386/pr63620.c: New test.
+
2014-11-11 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/tm/memopt-15.c: Add -msse2 to dg-options.
diff --git a/gcc/testsuite/gcc.target/i386/pr63620.c b/gcc/testsuite/gcc.target/i386/pr63620.c
new file mode 100644
index 0000000..bf38435
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr63620.c
@@ -0,0 +1,20 @@
+/* PR target/63620 */
+/* { dg-do compile } */
+/* { dg-require-effective-target fpic } */
+/* { dg-require-effective-target ia32 } */
+/* { dg-options "-O2 -fpic -mfpmath=sse -msse" } */
+
+static const __float128 cf = 0.1E+30Q;
+
+typedef __float128 (*func)(__float128 x);
+
+__float128
+test (__float128 x, int p, func f)
+{
+ x = f (x);
+ if (p)
+ x = f (cf);
+ return x;
+}
+
+/* { dg-final { scan-assembler "get_pc_thunk" } } */