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.