[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