mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Cost Model: Normalize the insert/extract index when splitting types
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167402 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
75138f58b0
commit
a4ab5290e6
@ -17556,9 +17556,26 @@ X86VectorTargetTransformInfo::getArithmeticInstrCost(unsigned Opcode,
|
||||
unsigned
|
||||
X86VectorTargetTransformInfo::getVectorInstrCost(unsigned Opcode, Type *Val,
|
||||
unsigned Index) const {
|
||||
// Floating point scalars are already located in index #0.
|
||||
if (Val->getScalarType()->isFloatingPointTy() && Index == 0)
|
||||
return 0;
|
||||
assert(Val->isVectorTy() && "This must be a vector type");
|
||||
|
||||
if (Index != -1) {
|
||||
// Legalize the type.
|
||||
std::pair<unsigned, MVT> LT =
|
||||
getTypeLegalizationCost(Val->getContext(), TLI->getValueType(Val));
|
||||
|
||||
// This type is legalized to a scalar type.
|
||||
if (!LT.second.isVector())
|
||||
return 0;
|
||||
|
||||
// The type may be split. Normalize the index to the new type.
|
||||
unsigned Width = LT.second.getVectorNumElements();
|
||||
Index = Index % Width;
|
||||
|
||||
// Floating point scalars are already located in index #0.
|
||||
if (Val->getScalarType()->isFloatingPointTy() && Index == 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return VectorTargetTransformImpl::getVectorInstrCost(Opcode, Val, Index);
|
||||
}
|
||||
|
||||
|
@ -29,5 +29,12 @@ define i32 @insert-extract-at-zero-idx(i32 %arg, float %fl) {
|
||||
;CHECK: cost of 0 {{.*}} insert
|
||||
%J = insertelement <4 x double> undef, double undef, i32 0
|
||||
|
||||
;CHECK: cost of 0 {{.*}} insert
|
||||
%K = insertelement <8 x double> undef, double undef, i32 4
|
||||
;CHECK: cost of 0 {{.*}} insert
|
||||
%L = insertelement <16 x double> undef, double undef, i32 8
|
||||
;CHECK: cost of 1 {{.*}} insert
|
||||
%M = insertelement <16 x double> undef, double undef, i32 9
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user