[PATCH] D32720: [LICM] Introduce a finer granularity option to compute early exits.
Aditya Kumar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 28 20:11:52 PDT 2022
hiraditya added a comment.
Herald added a project: All.
FYI, all the tests in this patch are already handled with the current licm. Do we still need this patch?
$ opt -S -licm loop-early-exits.ll
; ModuleID = 'licm.ll'
source_filename = "licm.ll"
declare void @use(i64)
declare void @use_nothing()
; Function Attrs: nounwind
declare void @call_nothrow() #0
define void @throw_header1(i64 %x, i64 %y, i1* %cond) {
entry:
%div = udiv i64 %x, %y
br label %loop
loop: ; preds = %loop, %entry
call void @use(i64 %div)
br label %loop
}
define void @throw_header2(i64 %x, i64 %y, i1* %cond) {
entry:
br label %loop
loop: ; preds = %loop, %entry
call void @use_nothing()
%div = udiv i64 %x, %y
call void @use(i64 %div)
br label %loop
}
define void @throw_body1(i64 %x, i64 %y, i1* %cond) {
entry:
%div = udiv i64 %x, %y
br label %loop
loop: ; preds = %body, %entry
br label %body
body: ; preds = %loop
call void @use(i64 %div)
br i1 false, label %loop, label %exit
exit: ; preds = %body
ret void
}
define void @throw_body2(i64 %x, i64 %y, i1* %cond) {
entry:
br label %loop
loop: ; preds = %body, %entry
br label %body
body: ; preds = %loop
call void @use_nothing()
%div = udiv i64 %x, %y
call void @use(i64 %div)
br i1 false, label %loop, label %exit
exit: ; preds = %body
ret void
}
define void @throw_body3(i64 %x, i64 %y, i1* %cond) {
entry:
br label %loop
loop: ; preds = %body, %entry
br label %body
body: ; preds = %loop
call void @call_nothrow()
%div = udiv i64 %x, %y
call void @use(i64 %div)
br i1 false, label %loop, label %exit
exit: ; preds = %body
ret void
}
attributes #0 = { nounwind }
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D32720/new/
https://reviews.llvm.org/D32720
More information about the llvm-commits
mailing list