2016-04-28 13:41 GMT+03:00 Jakub Jelinek <ja...@redhat.com>: > On Thu, Apr 28, 2016 at 01:36:30PM +0300, Ilya Enkovich wrote: >> @@ -3145,11 +3168,25 @@ scalar_chain::compute_convert_gain () >> || GET_CODE (src) == IOR >> || GET_CODE (src) == XOR >> || GET_CODE (src) == AND) >> - gain += ix86_cost->add; >> + { >> + gain += ix86_cost->add; >> + if (CONST_INT_P (XEXP (src, 0))) >> + gain -= scalar_chain::vector_const_cost (XEXP (src, 0)); >> + if (CONST_INT_P (XEXP (src, 1))) >> + gain -= scalar_chain::vector_const_cost (XEXP (src, 1)); >> + } >> else if (GET_CODE (src) == COMPARE) >> { >> /* Assume comparison cost is the same. */ >> } >> + else if (GET_CODE (src) == CONST_INT) >> + { >> + if (REG_P (dst)) >> + gain += COSTS_N_INSNS (2); >> + else if (MEM_P (dst)) >> + gain += 2 * ix86_cost->int_store[2] - ix86_cost->sse_store[1]; >> + gain -= scalar_chain::vector_const_cost (src); >> + } >> else >> gcc_unreachable (); > > Where does the 2 come from? Is it that the STV pass right now supports only > 2 * wordsize modes? Also, I don't think we should treat equally constants > that fit into the 32-bit immediates and constants that don't, the latter, > when movabsq needs to be used, are more costly.
This variant is for DImode going to split into two SImode. TImode chains have own cost model. Thanks, Ilya > > Jakub