This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC patch, i386]: Use STV pass to load/store any TImode constant using SSE insns


2016-04-28 13:41 GMT+03:00 Jakub Jelinek <jakub@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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]