Hi all,
    I'm confused by the annotation in shold_replace_address.
Here is the code in fwprop.c: 

/* OLD is a memory address.  Return whether it is good to use NEW instead, 
   for a memory access in the given MODE.  */ 

static bool 
should_replace_address (rtx old_rtx, rtx new_rtx, enum machine_mode mode, 
                        addr_space_t as, bool speed) 
{ 
  int gain; 

  if (rtx_equal_p (old_rtx, new_rtx) 
      || !memory_address_addr_space_p (mode, new_rtx, as)) 
    return false; 

  /* Copy propagation is always ok.  */ 
  if (REG_P (old_rtx) && REG_P (new_rtx)) 
    return true; 

  */* Prefer the new address if it is less expensive.  */ 
  gain = (address_cost (old_rtx, mode, as, speed) 
          - address_cost (new_rtx, mode, as, speed)); 

  /* If the addresses have equivalent cost, prefer the new address 
     if it has the highest `set_src_cost'.  That has the potential of 
     eliminating the most insns without additional costs, and it 
     is the same that cse.c used to do.  */ 
  if (gain == 0) 
    gain = set_src_cost (new_rtx, speed) - set_src_cost (old_rtx, speed); 

  return (gain > 0);
*} 

According to the annotation, the 'return (gain > 0)' shouldn't be 'return
(gain >= 0)' ? 

Here is the case for forward_addr. 
insn set r155 
           plus r167 + 32 
insn set mem (155) 
           r188 
insn set mem (plus r155 + 8) 
           r189 
...... 

If it is handled by the original code, 
the result will be: 
insn set r155 
           plus r167 + 32 
insn set mem (r167 + 32) 
           r188 
insn set mem (plus r155 + 8) 
           r189 

However it is expected to be: 
insn set mem (r167 + 32) 
           r188 
insn set mem (plus r167 + 40) 
           r189     

    As the cost of 'addr r155' + 8 is equal to 'addr r167 + 40', so I think
that we should preffer to take the new addr, technically will be profitable
??? 


Brs, 
       Peter Xu. 




-----
Dying in the sun.
--
View this message in context: 
http://gcc.1065356.n5.nabble.com/A-question-about-forward-addr-tp1001126.html
Sent from the gcc - patches mailing list archive at Nabble.com.

Reply via email to