Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Inline] Introduce Constant::hasOneLiveUse, use it instead of hasOneU…
…se in inline cost model (PR51667) Otherwise, inlining costs may be pessimized by dead constants. Fixes https://bugs.llvm.org/show_bug.cgi?id=51667. Reviewed By: mtrofin, aeubanks Differential Revision: https://reviews.llvm.org/D109294
- Loading branch information
1 parent
3a5aa57
commit 11c8efd
Showing
5 changed files
with
84 additions
and
20 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
; Test to ensure that the inlining cost model isn't tripped up by dead constant users. | ||
; In this case, the call to g via a bitcasted function pointer is canonicalized to | ||
; a direct call to g with bitcasted arguments, leaving the original bitcast | ||
; as a dead use of g. | ||
|
||
; RUN: opt < %s -instcombine -inline -pass-remarks=inline -S 2>&1 \ | ||
; RUN: | FileCheck %s | ||
|
||
; Inline costs of f and g should be the same. | ||
|
||
; CHECK: 'f' inlined into 'h' with (cost=[[EXPECTED_COST:.+]], threshold={{.+}}) | ||
; CHECK: 'g' inlined into 'h' with (cost=[[EXPECTED_COST]], threshold={{.+}}) | ||
|
||
%0 = type { i64, i64, i64 } | ||
%1 = type { i64, i64, i64 } | ||
|
||
define internal void @f(%0* align 8 %a) unnamed_addr { | ||
start: | ||
ret void | ||
} | ||
|
||
define internal void @g(%0* align 8 %a) unnamed_addr { | ||
start: | ||
ret void | ||
} | ||
|
||
define void @h(%0* align 8 %a, %1* align 8 %b) unnamed_addr { | ||
start: | ||
call void @f(%0* align 8 %a) | ||
call void bitcast (void (%0*)* @g to void (%1*)*)(%1* align 8 %b) | ||
ret void | ||
} |
This file contains 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