[LV] Reland "Update logic for calculating register usage due to invariants"
authorsgokhale <sgokhale@nvidia.com>
Tue, 28 Feb 2023 12:02:39 +0000 (17:32 +0530)
committersgokhale <sgokhale@nvidia.com>
Tue, 28 Feb 2023 12:02:39 +0000 (17:32 +0530)
commit4f9a5447c633083e99fd5cb448116fa8e5b1f976
tree7d9cfd10f17bdab11491a15cdfdfd6f9a3d5ef02
parent6d2501bf00f662ef05731aa7c59351467aac2a70
[LV] Reland "Update logic for calculating register usage due to invariants"

Previously, while calculating register usage due to invariants, it was assumed that invariant would always be part of widening
instructions. This resulted in calculating vector register types for vectors which cant be legalized(check the newly added test for more details).

An invariant might not always need a vector register. For e.g., invariant might just be used for iteration check.

This patch checks if the invariant is part of any widening instruction and considers register usage accordingly. Fixes issue 60493

Differential Revision: https://reviews.llvm.org/D143422
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
llvm/test/Transforms/LoopVectorize/AArch64/reg-usage.ll [new file with mode: 0644]
llvm/test/Transforms/LoopVectorize/PowerPC/reg-usage.ll
llvm/test/Transforms/LoopVectorize/RISCV/reg-usage.ll
llvm/test/Transforms/LoopVectorize/RISCV/riscv-vector-reverse.ll
llvm/test/Transforms/LoopVectorize/X86/reg-usage-debug.ll