On Thu, Apr 21, 2016 at 9:31 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
> On Thu, Apr 21, 2016 at 4:50 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>
>>>> I tried and it doesn't work since the correct mode may not be always
>>>> available in predicates.  Yes, they pass mode.  But they just do
>>>>
>>>> mode = GET_MODE (op);
>>>>
>>>> which returns VOIDmode for -1.
>>>
>>> Well, looking at generated gcc/insns-preds.c, the predicates do:
>>>
>>> (mode == VOIDmode || GET_MODE (op) == mode).
>>>
>>> They *check* and don't *assign* "mode" variable.
>>>
>>> So, I see no problem checking "mode" variable (that gets the value
>>> from the pattern) in the predicates.
>>
>> This is an incomplete list:
>>
>> combine.c:   && ! push_operand (dest, GET_MODE (dest)))
>> expr.c:  if (push_operand (x, GET_MODE (x)))
>> expr.c:  && ! push_operand (x, GET_MODE (x))))
>> gcse.c:   && ! push_operand (dest, GET_MODE (dest)))
>> gcse.c:  if (general_operand (exp, GET_MODE (reg)))
>> ifcvt.c:  if (! general_operand (cmp_a, GET_MODE (cmp_a))
>> ifcvt.c:      || ! general_operand (cmp_b, GET_MODE (cmp_b)))
>> ifcvt.c:      else if (general_operand (b, GET_MODE (b)))
>> ifcvt.c:  if (! general_operand (a, GET_MODE (a)) || tmp_a)
>> ifcvt.c:  if (! general_operand (b, GET_MODE (b)) || tmp_b)
>> ira-costs.c:      if (address_operand (op, GET_MODE (op))
>> ira-costs.c:      && general_operand (SET_SRC (set), GET_MODE (SET_SRC 
>> (set))))
>> lower-subreg.c:      if (GET_MODE (op_operand) != word_mode
>> lower-subreg.c:      && GET_MODE_SIZE (GET_MODE (op_operand)) > 
>> UNITS_PER_WORD)
>> lower-subreg.c:                                         GET_MODE 
>> (op_operand),
>> lra-constraints.c: if (simplify_operand_subreg (i, GET_MODE (old)) ||
>> op_change_p)
>> optabs.c:  create_output_operand (&ops[0], target, GET_MODE (target));
>> optabs.c:  create_input_operand (&ops[1], op0, GET_MODE (op0));
>> postreload-gcse.c:      if (! push_operand (dest, GET_MODE (dest)))
>> postreload-gcse.c:  && general_operand (src, GET_MODE (src))
>> postreload-gcse.c:  && general_operand (dest, GET_MODE (dest))
>> postreload-gcse.c:  && general_operand (src, GET_MODE (src))
>>
>> IRA and LRA use GET_MODE and pass it to predicates.
>
> I don't know what are you trying to prove here ...

The "mode" argument passed to predates can't be used to determine if
-1 is a valid SSE constant.


-- 
H.J.

Reply via email to