From b848ded1daa9b7d1a99bc4bfb418fc9f86ae87ad Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 7 Jul 2000 23:49:18 +0000 Subject: [PATCH] i386.md (call_pop, [...]): Do not set current_function_uses_pic_offset_table for calls to static functions... * i386.md (call_pop, call, call_value_pop): Do not set current_function_uses_pic_offset_table for calls to static functions or indirect calls. From-SVN: r34916 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.md | 34 ++++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33a9e0f2ac5..decd31face4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Sat Jul 8 01:38:25 MET DST 2000 Jan Hubicka + + * i386.md (call_pop, call, call_value_pop): Do not set + current_function_uses_pic_offset_table for calls to static + functions or indirect calls. + 2000-07-07 Jim Wilson * config/ia64/ia64.c (rws_access_reg): New local write_count. If diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 40bc94da611..ab2f894f749 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -8200,11 +8200,12 @@ emit_insn (gen_call (operands[0], operands[1])); DONE; } - - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[0], QImode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); }") @@ -8254,10 +8255,12 @@ "" " { - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[0], QImode)) XEXP (operands[0], 0) = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); }") @@ -8314,11 +8317,12 @@ emit_insn (gen_call_value (operands[0], operands[1], operands[2])); DONE; } - - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[1], QImode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); }") @@ -8331,10 +8335,12 @@ "" " { - /* ??? Not true for calls to static functions. */ - if (flag_pic) + /* Static functions and indirect calls don't need + current_function_uses_pic_offset_table. */ + if (flag_pic + && constant_call_address_operand (operands[1], SImode) + && !SYMBOL_REF_FLAG (XEXP (operands[1], 0))) current_function_uses_pic_offset_table = 1; - if (! call_insn_operand (operands[1], QImode)) XEXP (operands[1], 0) = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); }")