On 10 November 2006 07:13, Ian Lance Taylor wrote:

> DJ Delorie <[EMAIL PROTECTED]> writes:
> 
>> I compared the generated code with an equivalent explicit test,
>> and discovered that gcc uses a separate rtx for the intermediate:
>> 
>> i = 0xfffff;
>> if (j >= 16)
>>   {
>>     int i2;
>>     i2 = i >> 8;
>>     i = i2 >> 8;
>>     j -= 16;
>>   }
>> 
>> This seems to avoid the combiner problem, becuase you don't have the
>> same register being set and being used in one insn.  Does this explain
>> why combine was having a problem, or was this a legitimate thing to do
>> and the combiner is still wrong?  Using a temp in the expander works
>> around the problem.
> 
> Interesting.  Using a temporary is the natural way to implement this
> code.  But not using a temporary should be valid.  So I think there is
> a bug in combine.


  Doesn't this just suggest that there's a '+' constraint modifier missing
from an operand in a pattern in the md file somewhere, such as the one that
expands the conditional in the first place?


    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....

Reply via email to