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~