Skip to content

[LV] Initialize IR block pointers in ILV. (NFC) #139807

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 15, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -603,13 +603,13 @@ class InnerLoopVectorizer {
// --- Vectorization state ---

/// The vector-loop preheader.
BasicBlock *LoopVectorPreHeader;
BasicBlock *LoopVectorPreHeader = nullptr;

/// The scalar-loop preheader.
BasicBlock *LoopScalarPreHeader;
BasicBlock *LoopScalarPreHeader = nullptr;

/// Middle Block between the vector and the scalar.
BasicBlock *LoopMiddleBlock;
BasicBlock *LoopMiddleBlock = nullptr;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a nice fix! An alternative might be to disable the default constructor by adding

  InnerLoopVectorizer() = delete;

and then forcing the existing InnerLoopVectorizer constructor to explicitly set LoopVectorPreHeader, etc. to nullptr, as well as others such as AddedSafetyChecks? That way all the sensible defaults are being set in the same place. Any thoughts @fhahn?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, the default constructor should not be used.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I was just wondering if it was worth enforcing this by explicitly removing the default constructor. At the moment it feels more like an unwritten rule, although in practice it's probably not the sort of class that's going to be used frequently elsewhere.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For most it is probably not worth the trouble, as it isn't expose outside LoopVectorize.cpp, and things are going to get removed gradually.


/// A list of all bypass blocks. The first block is the entry of the loop.
SmallVector<BasicBlock *, 4> LoopBypassBlocks;
Expand Down