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....