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.
[(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]))"
{
(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"
{
(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)