From: Uros Bizjak Date: Mon, 10 Nov 2014 23:29:59 +0000 (+0100) Subject: revert: re PR rtl-optimization/63620 (RELOAD lost SET_GOT dependency on Darwin) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=516119bd60f8544888280be3823db10beeafbf2a;p=gcc.git revert: re PR rtl-optimization/63620 (RELOAD lost SET_GOT dependency on Darwin) 2014-11-11 Uros Bizjak Revert: 2014-10-31 Uros Bizjak 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 Ilya Enkovich PR target/63620 * gcc.target/i386/pr63620.c: New test. Co-Authored-By: Ilya Enkovich From-SVN: r217325 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d7dc265cb6..bceacd68518 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2014-11-11 Uros Bizjak + + Revert: + 2014-10-31 Uros Bizjak + + 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 Martin Liska diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index d14a107e8c2..c4870d20108 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 085eb547621..7a59252624a 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 f2b878817cf..0df66ea6c0a 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 d4054e7eb81..5a9d4dedd75 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-11-11 Uros Bizjak + Ilya Enkovich + + PR target/63620 + * gcc.target/i386/pr63620.c: New test. + 2014-11-11 Jakub Jelinek * 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 00000000000..bf3843550ac --- /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" } } */