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

Ilya Enkovich enkovich.gnu@gmail.com
Fri Apr 29 11:27:00 GMT 2016


2016-04-29 12:48 GMT+03:00 Uros Bizjak <ubizjak@gmail.com>:
> On Thu, Apr 28, 2016 at 12:36 PM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>
>> That's what I have in my draft for DImode immediates:
>>
>> @@ -3114,6 +3123,20 @@ scalar_chain::build (bitmap candidates,
>> unsigned insn_uid)
>>    BITMAP_FREE (queue);
>>  }
>>
>> +/* Return a cost of building a vector costant
>> +   instead of using a scalar one.  */
>> +
>> +int
>> +scalar_chain::vector_const_cost (rtx exp)
>> +{
>> +  gcc_assert (CONST_INT_P (exp));
>> +
>> +  if (const0_operand (exp, GET_MODE (exp))
>> +      || constm1_operand (exp, GET_MODE (exp)))
>
> The above should just use
>
> standard_sse_constant_p (exp, V2DImode).

Thanks for the tip!  Surprisingly this replacement caused a different
cost for non-standard constants.  Looking at it in GDB I found:

(gdb) p exp
$3 = (rtx) 0x7ffff7f0b560
(gdb) pr
warning: Expression is not an assignment (and might have no effect)
(const_int -1085102592571150096 [0xf0f0f0f0f0f0f0f0])
(gdb) p constm1_operand (exp,GET_MODE (exp))
$4 = 1

Do I misuse constm1_operand?

Thanks,
Ilya

>
> Uros.



More information about the Gcc-patches mailing list