Skip to content

[ValueTracking] Provide getUnderlyingObjectAggressive fallback #123019

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
Jan 15, 2025
Merged
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion llvm/lib/Analysis/ValueTracking.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6886,7 +6886,7 @@ const Value *llvm::getUnderlyingObjectAggressive(const Value *V) {
return FirstObject;
} while (!Worklist.empty());

return Object;
return Object ? Object : FirstObject;
}

/// This is the function that does the work of looking through basic
Expand Down
52 changes: 52 additions & 0 deletions llvm/test/Transforms/FunctionAttrs/phi_cycle.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
; RUN: opt -passes=function-attrs -S < %s

; Regression test for a null-returning bug of getUnderlyingObjectAggressive().
; This should not crash.
define void @phi_cycle() {
bb:
unreachable

bb1: ; preds = %bb17
br label %bb2

bb2: ; preds = %bb5, %bb1
%phi = phi ptr [ %phi6, %bb1 ], [ %phi6, %bb5 ]
br i1 poison, label %bb4, label %bb3

bb3: ; preds = %bb2
%getelementptr = getelementptr inbounds i8, ptr %phi, i32 poison
br label %bb5

bb4: ; preds = %bb2
br label %bb7

bb5: ; preds = %bb15, %bb3
%phi6 = phi ptr [ %getelementptr, %bb3 ], [ %phi16, %bb15 ]
br i1 poison, label %bb17, label %bb2

bb7: ; preds = %bb15, %bb4
%phi8 = phi ptr [ %phi, %bb4 ], [ %phi16, %bb15 ]
br i1 poison, label %bb11, label %bb9

bb9: ; preds = %bb7
%getelementptr10 = getelementptr inbounds i8, ptr %phi8, i32 1
store i8 poison, ptr %phi8, align 1
br label %bb15

bb11: ; preds = %bb7
br i1 poison, label %bb13, label %bb12

bb12: ; preds = %bb11
br label %bb13

bb13: ; preds = %bb12, %bb11
%getelementptr14 = getelementptr inbounds i8, ptr %phi8, i32 poison
br label %bb15

bb15: ; preds = %bb13, %bb9
%phi16 = phi ptr [ %getelementptr14, %bb13 ], [ %getelementptr10, %bb9 ]
br i1 poison, label %bb5, label %bb7

bb17: ; preds = %bb5
br label %bb1
}
Loading