[llvm-dev] getScalarizationOverhead()

Hal Finkel via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 20 06:53:26 PST 2017


On 01/20/2017 08:30 AM, Jonas Paulsson wrote:
>
>
> On 2017-01-20 14:31, Hal Finkel wrote:
>>
>> On 01/20/2017 06:11 AM, Jonas Paulsson via llvm-dev wrote:
>>> Hi,
>>>
>>> I wonder why getScalarizationOverhead() does not take into account 
>>> the number of operands of the instruction? This should influence the 
>>> number of extracts needed, so instead of
>>>
>>> Scalarization cost = NumEls * (insert + extract)
>>>
>>> it would be better to do
>>>
>>> Scalarization cost = NumEls * (insert + (extract * numOperands))
>>
>> I suspect this is an oversight (although we need to be a bit careful 
>> here because if two operands are the same, which is not uncommon, we 
>> don't want to double the cost).
>>
>>  -Hal
>
> Do you in those cases of an identical operand want to count just a 
> cost of "1" for a register move, instead of the "extraction cost"?

There should be no cost to reusing the operand. (mul a, a) should only 
extract a once, the fact that it is used twice should not increase the cost.

  -Hal

>
> /Jonas
>

-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory



More information about the llvm-dev mailing list