[PATCH] D153392: [PhaseOrdering] Don't speculate blocks in simplifycfg before jump-threading
Arthur Eubanks via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 21 13:52:04 PDT 2023
aeubanks added a comment.
Currently simplifycfg will optimize `zot` to the following
define internal fastcc i32 @zot(ptr %arg, ptr %arg1) unnamed_addr {
bb:
br label %bb2
bb2: ; preds = %bb11, %bb
%phi = phi ptr [ %arg, %bb ], [ %spec.select, %bb11 ]
%phi3 = phi i32 [ 0, %bb ], [ %add, %bb11 ]
%icmp4 = icmp eq ptr %phi, %arg1
%getelementptr = getelementptr inbounds i32, ptr %phi, i64 1
%spec.select = select i1 %icmp4, ptr %phi, ptr %getelementptr
%spec.select1 = select i1 %icmp4, ptr null, ptr %phi
%icmp10 = icmp eq ptr %spec.select1, null
br i1 %icmp10, label %bb12, label %bb11
bb11: ; preds = %bb2
%load = load i32, ptr %spec.select1, align 4
%add = add i32 %load, %phi3
br label %bb2
bb12: ; preds = %bb2
ret i32 %phi3
}
I'm not sure how jump-threading would work for this IR.
Simplifycfg's speculation prevents some instructions from getting licm'd and jump-threading fixes those cases.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D153392/new/
https://reviews.llvm.org/D153392
More information about the llvm-commits
mailing list