| ; RUN: opt -loop-unswitch -enable-new-pm=0 %s -S | FileCheck %s |
| |
| ; We want to check that the loop does not get split (so only 2 callbr's not 4). |
| ; It's ok to modify this test in the future should we allow the loop containing |
| ; callbr to be unswitched and are able to do so correctly. |
| |
| ; CHECK: callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %10)) |
| ; CHECK: to label %7 [label %10] |
| ; CHECK: callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %10)) |
| ; CHECK: to label %9 [label %10] |
| |
| ; CHECK-NOT: callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %10)) |
| ; CHECK-NOT: to label %7 [label %10] |
| ; CHECK-NOT: callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %10)) |
| ; CHECK-NOT: to label %9 [label %10] |
| ; CHECK-NOT: callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %19)) |
| ; CHECK-NOT: to label %16 [label %19] |
| ; CHECK-NOT: callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %19)) |
| ; CHECK-NOT: to label %18 [label %19] |
| |
| ; This test is essentially: |
| ; void foo(int n) { |
| ; for (int i = 0; i < 1000; ++i) |
| ; if (n) { |
| ; asm goto("# %l0"::::bar); |
| ; bar:; |
| ; } else { |
| ; asm goto("# %l0"::::baz); |
| ; baz:; |
| ; } |
| ;} |
| |
| define dso_local void @foo(i32) #0 { |
| br label %2 |
| |
| 2: ; preds = %10, %1 |
| %.0 = phi i32 [ 0, %1 ], [ %11, %10 ] |
| %3 = icmp ult i32 %.0, 1000 |
| br i1 %3, label %4, label %12 |
| |
| 4: ; preds = %2 |
| %5 = icmp eq i32 %0, 0 |
| br i1 %5, label %8, label %6 |
| |
| 6: ; preds = %4 |
| callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %10)) #0 |
| to label %7 [label %10] |
| |
| 7: ; preds = %6 |
| br label %10 |
| |
| 8: ; preds = %4 |
| callbr void asm sideeffect "# ${0:l}", "X,~{dirflag},~{fpsr},~{flags}"(i8* blockaddress(@foo, %10)) #0 |
| to label %9 [label %10] |
| |
| 9: ; preds = %8 |
| br label %10 |
| |
| 10: ; preds = %7, %6, %9, %8 |
| %11 = add nuw nsw i32 %.0, 1 |
| br label %2 |
| |
| 12: ; preds = %2 |
| ret void |
| } |
| |