mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
ExtractValue instruction costs
Instruction ExtractValue wasn't handled in LoopVectorizationCostModel::getInstructionCost(). As a result, it was modeled as a mul which is not really accurate. Since it is free (most of the times), this now gets a cost of 0 using getInstructionCost. This is a follow-up of D92208, that required changing this regression test. In a follow up I will look at InsertValue which also isn't handled yet. Differential Revision: https://reviews.llvm.org/D92317
This commit is contained in:
parent
de6fd49a53
commit
c00b31be29
@ -6853,6 +6853,8 @@ unsigned LoopVectorizationCostModel::getInstructionCost(Instruction *I,
|
||||
return std::min(CallCost, getVectorIntrinsicCost(CI, VF));
|
||||
return CallCost;
|
||||
}
|
||||
case Instruction::ExtractValue:
|
||||
return TTI.getInstructionCost(I, TTI::TCK_RecipThroughput);
|
||||
default:
|
||||
// The cost of executing VF copies of the scalar instruction. This opcode
|
||||
// is unknown. Assume that it is the same as 'mul'.
|
||||
|
@ -8,9 +8,9 @@
|
||||
; Check scalar cost for extractvalue. The constant and loop invariant operands are free,
|
||||
; leaving cost 3 for scalarizing the result + 2 for executing the op with VF 2.
|
||||
|
||||
; CM: LV: Scalar loop costs: 7.
|
||||
; CM: LV: Found an estimated cost of 19 for VF 2 For instruction: %a = extractvalue { i64, i64 } %sv, 0
|
||||
; CM-NEXT: LV: Found an estimated cost of 19 for VF 2 For instruction: %b = extractvalue { i64, i64 } %sv, 1
|
||||
; CM: LV: Scalar loop costs: 5.
|
||||
; CM: LV: Found an estimated cost of 0 for VF 2 For instruction: %a = extractvalue { i64, i64 } %sv, 0
|
||||
; CM-NEXT: LV: Found an estimated cost of 0 for VF 2 For instruction: %b = extractvalue { i64, i64 } %sv, 1
|
||||
|
||||
; Check that the extractvalue operands are actually free in vector code.
|
||||
|
||||
@ -57,9 +57,9 @@ exit:
|
||||
; Similar to the test case above, but checks getVectorCallCost as well.
|
||||
declare float @pow(float, float) readnone nounwind
|
||||
|
||||
; CM: LV: Scalar loop costs: 16.
|
||||
; CM: LV: Found an estimated cost of 5 for VF 2 For instruction: %a = extractvalue { float, float } %sv, 0
|
||||
; CM-NEXT: LV: Found an estimated cost of 5 for VF 2 For instruction: %b = extractvalue { float, float } %sv, 1
|
||||
; CM: LV: Scalar loop costs: 14.
|
||||
; CM: LV: Found an estimated cost of 0 for VF 2 For instruction: %a = extractvalue { float, float } %sv, 0
|
||||
; CM-NEXT: LV: Found an estimated cost of 0 for VF 2 For instruction: %b = extractvalue { float, float } %sv, 1
|
||||
|
||||
; FORCED-LABEL: define void @test_getVectorCallCost
|
||||
|
||||
@ -101,6 +101,3 @@ loop.body:
|
||||
exit:
|
||||
ret void
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user