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)
commit55312debee5c3f224cd36913d4a00a6ce91676c5
tree21c18048555b3c8b1e51f777ef886a5bd9af71f1
parent519a45ce36189771f8665fa6a19be09b7afdbe37
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.

llvm-svn: 205487
llvm/lib/CodeGen/BasicTargetTransformInfo.cpp
llvm/test/Analysis/CostModel/PowerPC/ext.ll [new file with mode: 0644]