On 05/28/2014 02:54 PM, Jeff Law wrote:
> On 05/28/14 15:52, Jakub Jelinek wrote:
>> On Wed, May 28, 2014 at 05:28:31PM -0400, Kai Tietz wrote:
>>> Yes, I missed the plus-part.
>>>
>>> I am just running bootstrap with regression testing for altering predicate
>>> to:
>>>
>>> (define_predicate "sibcall_memory_operand"
>>> (match_operand 0 "memory_operand")
>>> {
>>> op = XEXP (op, 0);
>>>
>>> if (GET_CODE (op) == CONST)
>>> op = XEXP (op, 0);
>>> if (GET_CODE (op) == PLUS && CONSTANT_P (XEXP (op, 0)))
>>> op = XEXP (op, 1);
>>
>> Why not get rid of all the above 4 lines and just keep:
>>
>>> return CONSTANT_P (op);
>>
>> ? CONST matches CONSTANT_P, and what is inside of CONST should be
>> fine, and (plus (symbol_ref) (const_int)) not surrounded by CONST
>> ir invalid.
> Haven't we recently had problems with being overly accepting of stuff inside
> CONST when using the CONST for address expressions. ISTM we should only
> accept
> what the processor supports here.
Recall that it has just satisfied memory_operand, where all the real checks
should have been done. I think just the CONSTANT_P check is sufficient.
r~