diff --git a/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp b/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp index 48274e8835381..7adf1adcc6476 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp @@ -716,12 +716,10 @@ InstructionCost PPCTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val, } else if (ISD == ISD::EXTRACT_VECTOR_ELT) { // It's an extract. Maybe we can do a cheap move-from VSR. unsigned EltSize = Val->getScalarSizeInBits(); - if (EltSize == 64) { - // FIXME: no need to worry about endian, P9 has both mfvsrd/mfvsrld. - unsigned MfvsrdIndex = ST->isLittleEndian() ? 1 : 0; - if (Index == MfvsrdIndex) - return 1; - } else if (EltSize == 32) { + // P9 has both mfvsrd and mfvsrld for 64 bit integer. + if (EltSize == 64 && Index != -1U) + return 1; + else if (EltSize == 32) { unsigned MfvsrwzIndex = ST->isLittleEndian() ? 2 : 1; if (Index == MfvsrwzIndex) return 1; diff --git a/llvm/test/Analysis/CostModel/PowerPC/insert_extract-inseltpoison.ll b/llvm/test/Analysis/CostModel/PowerPC/insert_extract-inseltpoison.ll index e85e6f0ab0896..9894fb95f6923 100644 --- a/llvm/test/Analysis/CostModel/PowerPC/insert_extract-inseltpoison.ll +++ b/llvm/test/Analysis/CostModel/PowerPC/insert_extract-inseltpoison.ll @@ -147,11 +147,11 @@ define void @vexti64(<2 x i64> %p1) { ; ; CHECK-P9BE-LABEL: 'vexti64' ; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i1 = extractelement <2 x i64> %p1, i32 0 -; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %i2 = extractelement <2 x i64> %p1, i32 1 +; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i2 = extractelement <2 x i64> %p1, i32 1 ; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; ; CHECK-P9LE-LABEL: 'vexti64' -; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %i1 = extractelement <2 x i64> %p1, i32 0 +; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i1 = extractelement <2 x i64> %p1, i32 0 ; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i2 = extractelement <2 x i64> %p1, i32 1 ; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; diff --git a/llvm/test/Analysis/CostModel/PowerPC/insert_extract.ll b/llvm/test/Analysis/CostModel/PowerPC/insert_extract.ll index fda6a4ae51fc2..0c2ed5cb96b97 100644 --- a/llvm/test/Analysis/CostModel/PowerPC/insert_extract.ll +++ b/llvm/test/Analysis/CostModel/PowerPC/insert_extract.ll @@ -172,11 +172,11 @@ define void @vexti64(<2 x i64> %p1) { ; ; CHECK-P9BE-LABEL: 'vexti64' ; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i1 = extractelement <2 x i64> %p1, i32 0 -; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %i2 = extractelement <2 x i64> %p1, i32 1 +; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i2 = extractelement <2 x i64> %p1, i32 1 ; CHECK-P9BE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ; ; CHECK-P9LE-LABEL: 'vexti64' -; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %i1 = extractelement <2 x i64> %p1, i32 0 +; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i1 = extractelement <2 x i64> %p1, i32 0 ; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %i2 = extractelement <2 x i64> %p1, i32 1 ; CHECK-P9LE-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void ;