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