Fix multi-register costs in BasicTTI::getCastInstrCost
authorHal Finkel <hfinkel@anl.gov>
Wed, 2 Apr 2014 23:18:54 +0000 (23:18 +0000)
committerHal Finkel <hfinkel@anl.gov>
Wed, 2 Apr 2014 23:18:54 +0000 (23:18 +0000)
commit9263e6f08d26384d076e8e314ba0e72fe8ad3e2f
treeef97ef4805a72a289f3c0b2914e0eb87b06ca915
parenta18ad697a9e41d27fdf86d0c7b0c85758038d549
Fix multi-register costs in BasicTTI::getCastInstrCost

For an cast (extension, etc.), the currently logic predicts a low cost if the
associated operation (keyed on the destination type) is legal (or promoted).
This is not true when the number of values required to legalize the type is
changing. For example, <8 x i16> being sign extended by <8 x i32> is not
generically cheap on PPC with VSX, even though sign extension to v4i32 is
legal, because two output v4i32 values are required compared to the single
v8i16 input value, and without custom logic in the target, this conversion will
scalarize.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205487 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/BasicTargetTransformInfo.cpp
test/Analysis/CostModel/PowerPC/ext.ll [new file with mode: 0644]