-
Notifications
You must be signed in to change notification settings - Fork 15.1k
[NFC][SLU] Update SimpleLoopUnswitch/guards.ll #166285
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[NFC][SLU] Update SimpleLoopUnswitch/guards.ll #166285
Conversation
|
@llvm/pr-subscribers-llvm-transforms Author: Mircea Trofin (mtrofin) ChangesWhen running UTC on Full diff: https://github.com/llvm/llvm-project/pull/166285.diff 1 Files Affected:
diff --git a/llvm/test/Transforms/SimpleLoopUnswitch/guards.ll b/llvm/test/Transforms/SimpleLoopUnswitch/guards.ll
index 533b1f691f5ad..da4f4cc80d96f 100644
--- a/llvm/test/Transforms/SimpleLoopUnswitch/guards.ll
+++ b/llvm/test/Transforms/SimpleLoopUnswitch/guards.ll
@@ -6,21 +6,29 @@
declare void @llvm.experimental.guard(i1, ...)
define void @test_simple_case(i1 %cond, i32 %N) {
-; CHECK-LABEL: @test_simple_case(
+; CHECK-LABEL: define void @test_simple_case(i1 %cond, i32 %N) {
; CHECK-NEXT: entry:
-; CHECK-NEXT: br i1 [[COND:%.*]], label [[ENTRY_SPLIT_US:%.*]], label [[ENTRY_SPLIT:%.*]]
+; CHECK-NEXT: br i1 %cond, label %entry.split.us, label %entry.split
; CHECK: entry.split.us:
-; CHECK-NEXT: br label [[LOOP_US:%.*]]
+; CHECK-NEXT: br label %loop.us
; CHECK: loop.us:
-; CHECK-NEXT: [[IV_US:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT_US]] ], [ [[IV_NEXT_US:%.*]], [[GUARDED_US:%.*]] ]
-; CHECK-NEXT: br label [[GUARDED_US]]
+; CHECK-NEXT: %iv.us = phi i32 [ 0, %entry.split.us ], [ %iv.next.us, %guarded.us ]
+; CHECK-NEXT: br label %guarded.us
; CHECK: guarded.us:
-; CHECK-NEXT: [[IV_NEXT_US]] = add i32 [[IV_US]], 1
-; CHECK-NEXT: [[LOOP_COND_US:%.*]] = icmp slt i32 [[IV_NEXT_US]], [[N:%.*]]
-; CHECK-NEXT: br i1 [[LOOP_COND_US]], label [[LOOP_US]], label [[EXIT_SPLIT_US:%.*]]
+; CHECK-NEXT: %iv.next.us = add i32 %iv.us, 1
+; CHECK-NEXT: %loop.cond.us = icmp slt i32 %iv.next.us, %N
+; CHECK-NEXT: br i1 %loop.cond.us, label %loop.us, label %exit.split.us
+; CHECK: exit.split.us:
+; CHECK-NEXT: br label %exit
+; CHECK: entry.split:
+; CHECK-NEXT: br label %loop
+; CHECK: loop:
+; CHECK-NEXT: br label %deopt
; CHECK: deopt:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
+; CHECK: exit:
+; CHECK-NEXT: ret void
;
entry:
@@ -38,25 +46,39 @@ exit:
}
define void @test_two_guards(i1 %cond1, i1 %cond2, i32 %N) {
-; CHECK-LABEL: @test_two_guards(
+; CHECK-LABEL: define void @test_two_guards(i1 %cond1, i1 %cond2, i32 %N) {
; CHECK-NEXT: entry:
-; CHECK-NEXT: br i1 [[COND1:%.*]], label [[ENTRY_SPLIT_US:%.*]], label [[ENTRY_SPLIT:%.*]]
+; CHECK-NEXT: br i1 %cond1, label %entry.split.us, label %entry.split
; CHECK: entry.split.us:
-; CHECK-NEXT: br i1 [[COND2:%.*]], label [[ENTRY_SPLIT_US_SPLIT_US:%.*]], label [[ENTRY_SPLIT_US_SPLIT:%.*]]
+; CHECK-NEXT: br i1 %cond2, label %entry.split.us.split.us, label %entry.split.us.split
; CHECK: entry.split.us.split.us:
-; CHECK-NEXT: br label [[LOOP_US_US:%.*]]
+; CHECK-NEXT: br label %loop.us.us
; CHECK: loop.us.us:
-; CHECK-NEXT: [[IV_US_US:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT_US_SPLIT_US]] ], [ [[IV_NEXT_US_US:%.*]], [[GUARDED_US2:%.*]] ]
-; CHECK-NEXT: br label [[GUARDED_US_US:%.*]]
+; CHECK-NEXT: %iv.us.us = phi i32 [ 0, %entry.split.us.split.us ], [ %iv.next.us.us, %guarded.us2 ]
+; CHECK-NEXT: br label %guarded.us.us
; CHECK: guarded.us.us:
-; CHECK-NEXT: br label [[GUARDED_US2]]
+; CHECK-NEXT: br label %guarded.us2
; CHECK: guarded.us2:
-; CHECK-NEXT: [[IV_NEXT_US_US]] = add i32 [[IV_US_US]], 1
-; CHECK-NEXT: [[LOOP_COND_US_US:%.*]] = icmp slt i32 [[IV_NEXT_US_US]], [[N:%.*]]
-; CHECK-NEXT: br i1 [[LOOP_COND_US_US]], label [[LOOP_US_US]], label [[EXIT_SPLIT_US_SPLIT_US:%.*]]
+; CHECK-NEXT: %iv.next.us.us = add i32 %iv.us.us, 1
+; CHECK-NEXT: %loop.cond.us.us = icmp slt i32 %iv.next.us.us, %N
+; CHECK-NEXT: br i1 %loop.cond.us.us, label %loop.us.us, label %exit.split.us.split.us
+; CHECK: exit.split.us.split.us:
+; CHECK-NEXT: br label %exit.split.us
+; CHECK: entry.split.us.split:
+; CHECK-NEXT: br label %loop.us
+; CHECK: loop.us:
+; CHECK-NEXT: br label %guarded.us
+; CHECK: guarded.us:
+; CHECK-NEXT: br label %deopt1
; CHECK: deopt1:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
+; CHECK: exit.split.us:
+; CHECK-NEXT: br label %exit
+; CHECK: entry.split:
+; CHECK-NEXT: br label %loop
+; CHECK: loop:
+; CHECK-NEXT: br label %deopt
; CHECK: deopt:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
@@ -80,35 +102,45 @@ exit:
}
define void @test_conditional_guards(i1 %cond, i32 %N) {
-; CHECK-LABEL: @test_conditional_guards(
+; CHECK-LABEL: define void @test_conditional_guards(i1 %cond, i32 %N) {
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[FROZEN:%.+]] = freeze i1 [[COND:%.*]]
-; CHECK-NEXT: br i1 [[FROZEN]], label [[ENTRY_SPLIT_US:%.*]], label [[ENTRY_SPLIT:%.*]]
+; CHECK-NEXT: %cond.fr = freeze i1 %cond
+; CHECK-NEXT: br i1 %cond.fr, label %entry.split.us, label %entry.split
; CHECK: entry.split.us:
-; CHECK-NEXT: br label [[LOOP_US:%.*]]
+; CHECK-NEXT: br label %loop.us
; CHECK: loop.us:
-; CHECK-NEXT: [[IV_US:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT_US]] ], [ [[IV_NEXT_US:%.*]], [[BACKEDGE_US:%.*]] ]
-; CHECK-NEXT: [[CONDITION_US:%.*]] = icmp eq i32 [[IV_US]], 123
-; CHECK-NEXT: br i1 [[CONDITION_US]], label [[GUARD_US:%.*]], label [[BACKEDGE_US]]
+; CHECK-NEXT: %iv.us = phi i32 [ 0, %entry.split.us ], [ %iv.next.us, %backedge.us ]
+; CHECK-NEXT: %condition.us = icmp eq i32 %iv.us, 123
+; CHECK-NEXT: br i1 %condition.us, label %guard.us, label %backedge.us
; CHECK: guard.us:
-; CHECK-NEXT: br label [[GUARDED_US:%.*]]
+; CHECK-NEXT: br label %guarded.us
; CHECK: backedge.us:
-; CHECK-NEXT: [[IV_NEXT_US]] = add i32 [[IV_US]], 1
-; CHECK-NEXT: [[LOOP_COND_US:%.*]] = icmp slt i32 [[IV_NEXT_US]], [[N:%.*]]
-; CHECK-NEXT: br i1 [[LOOP_COND_US]], label [[LOOP_US]], label [[EXIT_SPLIT_US:%.*]]
+; CHECK-NEXT: %iv.next.us = add i32 %iv.us, 1
+; CHECK-NEXT: %loop.cond.us = icmp slt i32 %iv.next.us, %N
+; CHECK-NEXT: br i1 %loop.cond.us, label %loop.us, label %exit.split.us
+; CHECK: guarded.us:
+; CHECK-NEXT: br label %backedge.us
+; CHECK: exit.split.us:
+; CHECK-NEXT: br label %exit
+; CHECK: entry.split:
+; CHECK-NEXT: br label %loop
; CHECK: loop:
-; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT]] ], [ [[IV_NEXT:%.*]], [[BACKEDGE:%.*]] ]
-; CHECK-NEXT: [[CONDITION:%.*]] = icmp eq i32 [[IV]], 123
-; CHECK-NEXT: br i1 [[CONDITION]], label [[GUARD:%.*]], label [[BACKEDGE]]
+; CHECK-NEXT: %iv = phi i32 [ 0, %entry.split ], [ %iv.next, %backedge ]
+; CHECK-NEXT: %condition = icmp eq i32 %iv, 123
+; CHECK-NEXT: br i1 %condition, label %guard, label %backedge
; CHECK: guard:
-; CHECK-NEXT: br label [[DEOPT:%.*]]
+; CHECK-NEXT: br label %deopt
; CHECK: deopt:
; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
; CHECK: backedge:
-; CHECK-NEXT: [[IV_NEXT]] = add i32 [[IV]], 1
-; CHECK-NEXT: [[LOOP_COND:%.*]] = icmp slt i32 [[IV_NEXT]], [[N]]
-; CHECK-NEXT: br i1 [[LOOP_COND]], label %loop, label [[EXIT_SPLIT:%.*]]
+; CHECK-NEXT: %iv.next = add i32 %iv, 1
+; CHECK-NEXT: %loop.cond = icmp slt i32 %iv.next, %N
+; CHECK-NEXT: br i1 %loop.cond, label %loop, label %exit.split
+; CHECK: exit.split:
+; CHECK-NEXT: br label %exit
+; CHECK: exit:
+; CHECK-NEXT: ret void
;
entry:
@@ -204,17 +236,49 @@ exit:
}
define void @test_sibling_loops(i1 %cond1, i1 %cond2, i32 %N) {
-; CHECK-LABEL: @test_sibling_loops(
+; CHECK-LABEL: define void @test_sibling_loops(i1 %cond1, i1 %cond2, i32 %N) {
; CHECK-NEXT: entry:
-; CHECK-NEXT: br i1 [[COND1:%.*]], label [[ENTRY_SPLIT_US:%.*]], label [[ENTRY_SPLIT:%.*]]
-; CHECK: [[IV1_US:%.*]] = phi i32 [ 0, [[ENTRY_SPLIT_US]] ], [ [[IV1_NEXT_US:%.*]], [[GUARDED_US:%.*]] ]
-; CHECK-NEXT: br label [[GUARDED_US]]
-; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
+; CHECK-NEXT: br i1 %cond1, label %entry.split.us, label %entry.split
+; CHECK: entry.split.us:
+; CHECK-NEXT: br label %loop1.us
+; CHECK: loop1.us:
+; CHECK-NEXT: %iv1.us = phi i32 [ 0, %entry.split.us ], [ %iv1.next.us, %guarded.us ]
+; CHECK-NEXT: br label %guarded.us
+; CHECK: guarded.us:
+; CHECK-NEXT: %iv1.next.us = add i32 %iv1.us, 1
+; CHECK-NEXT: %loop1.cond.us = icmp slt i32 %iv1.next.us, %N
+; CHECK-NEXT: br i1 %loop1.cond.us, label %loop1.us, label %between.split.us
+; CHECK: between.split.us:
+; CHECK-NEXT: br label %between
+; CHECK: entry.split:
+; CHECK-NEXT: br label %loop1
+; CHECK: loop1:
+; CHECK-NEXT: br label %deopt
+; CHECK: deopt:
+; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
-; CHECK: [[IV2_US:%.*]] = phi i32 [ 0, [[BETWEEN:%.*]] ], [ [[IV1_NEXT_US2:%.*]], [[GUARDED_US2:%.*]] ]
-; CHECK-NEXT: br label [[GUARDED_US2]]
-; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
+; CHECK: between:
+; CHECK-NEXT: br i1 %cond2, label %between.split.us2, label %between.split
+; CHECK: between.split.us2:
+; CHECK-NEXT: br label %loop2.us
+; CHECK: loop2.us:
+; CHECK-NEXT: %iv2.us = phi i32 [ 0, %between.split.us2 ], [ %iv2.next.us, %guarded.us3 ]
+; CHECK-NEXT: br label %guarded.us3
+; CHECK: guarded.us3:
+; CHECK-NEXT: %iv2.next.us = add i32 %iv2.us, 1
+; CHECK-NEXT: %loop2.cond.us = icmp slt i32 %iv2.next.us, %N
+; CHECK-NEXT: br i1 %loop2.cond.us, label %loop2.us, label %exit.split.us
+; CHECK: exit.split.us:
+; CHECK-NEXT: br label %exit
+; CHECK: between.split:
+; CHECK-NEXT: br label %loop2
+; CHECK: loop2:
+; CHECK-NEXT: br label %deopt1
+; CHECK: deopt1:
+; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
; CHECK-NEXT: unreachable
+; CHECK: exit:
+; CHECK-NEXT: ret void
;
entry:
@@ -242,11 +306,20 @@ exit:
}
; Check that we don't do anything because of cleanuppad.
-; CHECK-LABEL: @test_cleanuppad(
-; CHECK: call void (i1, ...) @llvm.experimental.guard(i1 %cond) [ "deopt"() ]
-; CHECK-NOT: call void (i1, ...) @llvm.experimental.guard(
define void @test_cleanuppad(i1 %cond, i32 %N) personality ptr @__CxxFrameHandler3 {
-
+; CHECK-LABEL: define void @test_cleanuppad(i1 %cond, i32 %N) personality ptr @__CxxFrameHandler3 {
+; CHECK-NEXT: entry:
+; CHECK-NEXT: br label %loop
+; CHECK: loop:
+; CHECK-NEXT: %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
+; CHECK-NEXT: call void (i1, ...) @llvm.experimental.guard(i1 %cond) [ "deopt"() ]
+; CHECK-NEXT: %iv.next = add i32 %iv, 1
+; CHECK-NEXT: invoke void @may_throw(i32 %iv)
+; CHECK-NEXT: to label %loop unwind label %exit
+; CHECK: exit:
+; CHECK-NEXT: %cp = cleanuppad within none []
+; CHECK-NEXT: cleanupret from %cp unwind to caller
+;
entry:
br label %loop
|
|
Could you please regenerate checks by dropping |
770453d to
e80795e
Compare
|
done |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks

When running UTC on SLU/guards.ll (without LLVM changes), there are a number of changes in the UTC-generated checks. Submitting those first to simplify the diff of PR #164271, as most of the changes in the latter were actually these.