[LV] Avoid computing the register usage for default VF. NFC

These are changes to reduce redundant computations when calculating a
feasible vectorization factor:
1. early return when target has no vector registers
2. don't compute register usage for the default VF.

Suggested during review for D37702.

llvm-svn: 313176
This commit is contained in:
Anna Thomas 2017-09-13 19:35:45 +00:00
parent 2ba37d4b3e
commit 19529f75b9
2 changed files with 4 additions and 6 deletions

View File

@ -6241,6 +6241,7 @@ LoopVectorizationCostModel::computeFeasibleMaxVF(bool OptForSize,
if (MaxVectorSize == 0) { if (MaxVectorSize == 0) {
DEBUG(dbgs() << "LV: The target has no vector registers.\n"); DEBUG(dbgs() << "LV: The target has no vector registers.\n");
MaxVectorSize = 1; MaxVectorSize = 1;
return MaxVectorSize;
} else if (ConstTripCount && ConstTripCount < MaxVectorSize && } else if (ConstTripCount && ConstTripCount < MaxVectorSize &&
isPowerOf2_32(ConstTripCount)) { isPowerOf2_32(ConstTripCount)) {
// We need to clamp the VF to be the ConstTripCount. There is no point in // We need to clamp the VF to be the ConstTripCount. There is no point in
@ -6253,10 +6254,11 @@ LoopVectorizationCostModel::computeFeasibleMaxVF(bool OptForSize,
unsigned MaxVF = MaxVectorSize; unsigned MaxVF = MaxVectorSize;
if (MaximizeBandwidth && !OptForSize) { if (MaximizeBandwidth && !OptForSize) {
// Collect all viable vectorization factors. // Collect all viable vectorization factors larger than the default MaxVF
// (i.e. MaxVectorSize).
SmallVector<unsigned, 8> VFs; SmallVector<unsigned, 8> VFs;
unsigned NewMaxVectorSize = WidestRegister / SmallestType; unsigned NewMaxVectorSize = WidestRegister / SmallestType;
for (unsigned VS = MaxVectorSize; VS <= NewMaxVectorSize; VS *= 2) for (unsigned VS = MaxVectorSize * 2; VS <= NewMaxVectorSize; VS *= 2)
VFs.push_back(VS); VFs.push_back(VS);
// For each VF calculate its register usage. // For each VF calculate its register usage.

View File

@ -10,8 +10,6 @@ define i32 @foo() {
; register usage doesn't exceed 16. ; register usage doesn't exceed 16.
; ;
; CHECK-LABEL: foo ; CHECK-LABEL: foo
; CHECK: LV(REG): VF = 4
; CHECK-NEXT: LV(REG): Found max usage: 4
; CHECK: LV(REG): VF = 8 ; CHECK: LV(REG): VF = 8
; CHECK-NEXT: LV(REG): Found max usage: 7 ; CHECK-NEXT: LV(REG): Found max usage: 7
; CHECK: LV(REG): VF = 16 ; CHECK: LV(REG): VF = 16
@ -48,8 +46,6 @@ define i32 @goo() {
; it will not have vector version and the vector register usage will not exceed the ; it will not have vector version and the vector register usage will not exceed the
; available vector register number. ; available vector register number.
; CHECK-LABEL: goo ; CHECK-LABEL: goo
; CHECK: LV(REG): VF = 4
; CHECK-NEXT: LV(REG): Found max usage: 4
; CHECK: LV(REG): VF = 8 ; CHECK: LV(REG): VF = 8
; CHECK-NEXT: LV(REG): Found max usage: 7 ; CHECK-NEXT: LV(REG): Found max usage: 7
; CHECK: LV(REG): VF = 16 ; CHECK: LV(REG): VF = 16