[llvm] [JumpThreading] Thread over BB with only an unconditional branch (PR #86312)

Quentin Dian via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 23 03:37:46 PDT 2024


================
@@ -0,0 +1,64 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
+; RUN: opt < %s -passes=simplifycfg,instcombine -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
+
+; Add InstCombine pass to demonstrate the effect of threading
+
+define i32 @thread_uncond_bb_cmp(i1 %c, i32 %v) {
+; CHECK-LABEL: define i32 @thread_uncond_bb_cmp(
+; CHECK-SAME: i1 [[C:%.*]], i32 [[V:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br i1 [[C]], label [[DO_END:%.*]], label [[IF_THEN:%.*]]
+; CHECK:       if.then:
+; CHECK-NEXT:    call void @dummy()
+; CHECK-NEXT:    br label [[DO_END]]
+; CHECK:       return:
+; CHECK-NEXT:    [[RETVAL:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[V]], [[IF_THEN]] ]
+; CHECK-NEXT:    ret i32 [[RETVAL]]
+;
+entry:
+  br i1 %c, label %do.end, label %if.then
+
+if.then:                                          ; preds = %entry
+  call void @dummy()
+  %tobool = icmp eq i32 %v, 0
+  br i1 %tobool, label %do.end, label %return
+
+do.end:                                           ; preds = %entry, %if.then
+  br label %return
+
+return:                                           ; preds = %if.then, %do.end
+  %retval = phi i32 [ 0, %do.end ], [ %v, %if.then ]
+  ret i32 %retval
+}
+
+define i32 @thread_uncond_bb_cmp_zext(i1 %c, i32 %v) {
----------------
DianQK wrote:

I think it should be put in `llvm/test/Transforms/PhaseOrdering`. I'm curious that why you added two similar test cases. Please add comments if necessary.

https://github.com/llvm/llvm-project/pull/86312


More information about the llvm-commits mailing list