On 07/31/2013 05:02 AM, Kirill Yukhin wrote: > > There's ICE (max. number of generated reload insns per insn is achieved (90)), > when LRA tried to save mask register before call. This was caused by fact > that split_reg function > in lra-constraints.c allocates memory for saved reg in > SECONDARY_MEMORY_NEEDED_MODE which
I've told you before that it's not SECONDARY_MEMORY that you want, but a secondary reload. You should be patching ix86_secondary_reload, right below where we handle QImode spills from non-Q registers for x86-32. > +(define_insn "kand<mode>" > + [(set (match_operand:SWI12 0 "register_operand" "=Yk") > + (unspec:SWI12 > + [(match_operand:SWI12 1 "register_operand" "Yk") > + (match_operand:SWI12 2 "register_operand" "Yk")] > + UNSPEC_KAND))] Trying to avoid auto usage of the registers? Maybe. I can see this hurting too, depending on how complicated the expressions get. > +(define_insn "kxnor<mode>" > + [(set (match_operand:SWI12 0 "register_operand" "=Yk") > + (not:SWI12 > + (xor:SWI12 E.g. your partial conversion to unspecs here. Will never match. > +(define_insn "kortestzhi" > + [(set (reg:CCZ FLAGS_REG) > + (compare:CCZ > + (ior:HI And here. > +(define_insn "kortestchi" > + [(set (reg:CCC FLAGS_REG) > + (compare:CCC > + (ior:HI And here. > +(define_insn "kunpckhi" > + [(set (match_operand:HI 0 "register_operand" "=Yk") > + (ior:HI > + (ashift:HI And here. > +(define_insn "*one_cmplhi2_1" > + [(set (match_operand:HI 0 "nonimmediate_operand" "=rm,Yk") > + (not:HI (match_operand:HI 1 "nonimmediate_operand" "0,Yk")))] > + "ix86_unary_operator_ok (NOT, HImode, operands)" > + "@ > + not{w}\t%0 > + knotw\t{%1, %0|%0, %1}" But not here? And if this is the route to go, surely "*Yk". r~