Skip negative length while inferring initializes attr#120874
Merged
Skip negative length while inferring initializes attr#120874
Conversation
Member
|
@llvm/pr-subscribers-llvm-transforms Author: Haopeng Liu (haopliu) ChangesBail out negative length while inferring initializes attr. Otherwise it causes an assertion error: Full diff: https://github.com/llvm/llvm-project/pull/120874.diff 2 Files Affected:
diff --git a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
index afb0ea72b269c8..0a83bb1cd60535 100644
--- a/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -633,10 +633,13 @@ ArgumentAccessInfo getArgmentAccessInfo(const Instruction *I,
[](Value *Length,
std::optional<int64_t> Offset) -> std::optional<ConstantRange> {
auto *ConstantLength = dyn_cast<ConstantInt>(Length);
- if (ConstantLength && Offset)
+ if (ConstantLength && Offset) {
+ if (ConstantLength->getSExtValue() < 0)
+ return std::nullopt;
return ConstantRange(
APInt(64, *Offset, true),
APInt(64, *Offset + ConstantLength->getSExtValue(), true));
+ }
return std::nullopt;
};
if (auto *SI = dyn_cast<StoreInst>(I)) {
diff --git a/llvm/test/Transforms/FunctionAttrs/initializes.ll b/llvm/test/Transforms/FunctionAttrs/initializes.ll
index 2aa8385fe4ca7b..c607fbeabb5087 100644
--- a/llvm/test/Transforms/FunctionAttrs/initializes.ll
+++ b/llvm/test/Transforms/FunctionAttrs/initializes.ll
@@ -423,6 +423,17 @@ define void @memset_offset(ptr %p) {
ret void
}
+define void @memset_neg(ptr %p) {
+; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(argmem: write)
+; CHECK-LABEL: define void @memset_neg(
+; CHECK-SAME: ptr nocapture writeonly [[P:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr [[P]], i8 2, i64 -1, i1 false)
+; CHECK-NEXT: ret void
+;
+ call void @llvm.memset(ptr %p, i8 2, i64 -1, i1 false)
+ ret void
+}
+
define void @memset_volatile(ptr %p) {
; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn memory(argmem: write)
; CHECK-LABEL: define void @memset_volatile(
|
nikic
reviewed
Dec 22, 2024
| std::optional<int64_t> Offset) -> std::optional<ConstantRange> { | ||
| auto *ConstantLength = dyn_cast<ConstantInt>(Length); | ||
| if (ConstantLength && Offset) | ||
| if (ConstantLength && Offset) { |
Contributor
There was a problem hiding this comment.
Include in the if condition?
Suggested change
| if (ConstantLength && Offset) { | |
| if (ConstantLength && Offset && ConstantLength->isNonNegative()) { |
jvoung
approved these changes
Dec 23, 2024
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/190/builds/11874 Here is the relevant piece of the build log for the reference |
qiaojbao
pushed a commit
to GPUOpen-Drivers/llvm-project
that referenced
this pull request
Feb 7, 2025
Local branch amd-gfx 2432d11 Merged main:dd577c05ad0d into amd-gfx:7e1b5aab3054 Remote branch main 8daba2c Skip negative length while inferring initializes attr (llvm#120874)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bail out negative length while inferring initializes attr. Otherwise it causes an assertion error:
Attribute 'initializes' does not support unordered ranges