-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[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
Conversation
Setting unitialized pointers to nullptr in InnerLoopVectorizer() constructor
@llvm/pr-subscribers-llvm-transforms Author: George Chaltas (gchaltas) ChangesSetting unitialized pointers to nullptr in InnerLoopVectorizer() constructor. These were noticed during a review of the code. Seems like a good idea to clean them up. Full diff: https://github.com/llvm/llvm-project/pull/139807.diff 1 Files Affected:
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index d04fea5d9b0ac..742ef585cb1f7 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -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;
/// A list of all bypass blocks. The first block is the entry of the loop.
SmallVector<BasicBlock *, 4> LoopBypassBlocks;
|
@llvm/pr-subscribers-vectorizers Author: George Chaltas (gchaltas) ChangesSetting unitialized pointers to nullptr in InnerLoopVectorizer() constructor. These were noticed during a review of the code. Seems like a good idea to clean them up. Full diff: https://github.com/llvm/llvm-project/pull/139807.diff 1 Files Affected:
diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
index d04fea5d9b0ac..742ef585cb1f7 100644
--- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -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;
/// A list of all bypass blocks. The first block is the entry of the loop.
SmallVector<BasicBlock *, 4> LoopBypassBlocks;
|
@fhahn would you please review this and merge if you find it appropriate? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
|
||
/// Middle Block between the vector and the scalar. | ||
BasicBlock *LoopMiddleBlock; | ||
BasicBlock *LoopMiddleBlock = nullptr; |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks.
@gchaltas do you need help merging the PR?
Would be good to adjust the title to be a bit more descriptive, maybe something like [LV] Initialize IR block pointers in ILV. (NFC)
|
||
/// Middle Block between the vector and the scalar. | ||
BasicBlock *LoopMiddleBlock; | ||
BasicBlock *LoopMiddleBlock = nullptr; |
There was a problem hiding this comment.
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.
@fhahn Yes please. I don't have privileges to merge. I adjusted the title per your suggestion - thank you! |
Setting unitialized pointers to nullptr in InnerLoopVectorizer() constructor. These were noticed during a review of the code. Seems like a good idea to clean them up.
Setting unitialized pointers to nullptr in InnerLoopVectorizer() constructor. These were noticed during a review of the code. Seems like a good idea to clean them up.