xref: /llvm-project/llvm/test/Transforms/LoopDeletion/switch.ll (revision 4931cacb9778bde3d8d2e04575ac162bb090d6be)
1eae90fdcSPhilip Reames; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*4931cacbSRoman Lebedev; RUN: opt < %s -passes=loop-deletion -verify-loop-info -S | FileCheck %s
3eae90fdcSPhilip Reames
4eae90fdcSPhilip Reamestarget triple = "x86_64-unknown-linux-gnu"
5eae90fdcSPhilip Reames
6eae90fdcSPhilip Reames@G = external global i32
7eae90fdcSPhilip Reames
8eae90fdcSPhilip Reamesdefine void @func_1() {
9eae90fdcSPhilip Reames; CHECK-LABEL: @func_1(
10eae90fdcSPhilip Reames; CHECK-NEXT:  entry:
11eae90fdcSPhilip Reames; CHECK-NEXT:    br label [[LBL_2368:%.*]]
12eae90fdcSPhilip Reames; CHECK:       lbl_2368:
13eae90fdcSPhilip Reames; CHECK-NEXT:    [[CMP289:%.*]] = icmp slt i32 undef, -5
14eae90fdcSPhilip Reames; CHECK-NEXT:    br i1 [[CMP289]], label [[CLEANUP967:%.*]], label [[UNREACHABLE:%.*]]
15eae90fdcSPhilip Reames; CHECK:       cleanup967:
16eae90fdcSPhilip Reames; CHECK-NEXT:    switch i32 undef, label [[CLEANUP1169:%.*]] [
17eae90fdcSPhilip Reames; CHECK-NEXT:    i32 20, label [[CLEANUP967_LBL_2368_CRIT_EDGE:%.*]]
18eae90fdcSPhilip Reames; CHECK-NEXT:    ]
19eae90fdcSPhilip Reames; CHECK:       cleanup967.lbl_2368_crit_edge:
20eae90fdcSPhilip Reames; CHECK-NEXT:    unreachable
21eae90fdcSPhilip Reames; CHECK:       cleanup1169:
22eae90fdcSPhilip Reames; CHECK-NEXT:    ret void
23eae90fdcSPhilip Reames; CHECK:       unreachable:
24eae90fdcSPhilip Reames; CHECK-NEXT:    unreachable
25eae90fdcSPhilip Reames;
26eae90fdcSPhilip Reamesentry:
27eae90fdcSPhilip Reames  br label %lbl_2368
28eae90fdcSPhilip Reames
29eae90fdcSPhilip Reameslbl_2368:
30eae90fdcSPhilip Reames  %cmp289 = icmp slt i32 undef, -5
31eae90fdcSPhilip Reames  br i1 %cmp289, label %cleanup967, label %unreachable
32eae90fdcSPhilip Reames
33eae90fdcSPhilip Reamescleanup967:
34eae90fdcSPhilip Reames  switch i32 undef, label %cleanup1169 [
35eae90fdcSPhilip Reames  i32 20, label %lbl_2368
36eae90fdcSPhilip Reames  ]
37eae90fdcSPhilip Reames
38eae90fdcSPhilip Reamescleanup1169:
39eae90fdcSPhilip Reames  ret void
40eae90fdcSPhilip Reames
41eae90fdcSPhilip Reamesunreachable:
42eae90fdcSPhilip Reames  unreachable
43eae90fdcSPhilip Reames}
44c7b25e43SPhilip Reames
45c7b25e43SPhilip Reamesdefine void @func_2() {
46c7b25e43SPhilip Reames; CHECK-LABEL: @func_2(
47c7b25e43SPhilip Reames; CHECK-NEXT:  entry:
48c7b25e43SPhilip Reames; CHECK-NEXT:    br label [[LBL_2368:%.*]]
49c7b25e43SPhilip Reames; CHECK:       lbl_2368:
50c7b25e43SPhilip Reames; CHECK-NEXT:    br i1 false, label [[CLEANUP967:%.*]], label [[UNREACHABLE:%.*]]
51c7b25e43SPhilip Reames; CHECK:       cleanup967:
52c7b25e43SPhilip Reames; CHECK-NEXT:    switch i32 undef, label [[CLEANUP1169:%.*]] [
53c7b25e43SPhilip Reames; CHECK-NEXT:    i32 20, label [[CLEANUP967_LBL_2368_CRIT_EDGE:%.*]]
54c7b25e43SPhilip Reames; CHECK-NEXT:    ]
55c7b25e43SPhilip Reames; CHECK:       cleanup967.lbl_2368_crit_edge:
56c7b25e43SPhilip Reames; CHECK-NEXT:    unreachable
57c7b25e43SPhilip Reames; CHECK:       cleanup1169:
58c7b25e43SPhilip Reames; CHECK-NEXT:    ret void
59c7b25e43SPhilip Reames; CHECK:       unreachable:
60c7b25e43SPhilip Reames; CHECK-NEXT:    unreachable
61c7b25e43SPhilip Reames;
62c7b25e43SPhilip Reamesentry:
63c7b25e43SPhilip Reames  br label %lbl_2368
64c7b25e43SPhilip Reames
65c7b25e43SPhilip Reameslbl_2368:
66c7b25e43SPhilip Reames  br i1 false, label %cleanup967, label %unreachable
67c7b25e43SPhilip Reames
68c7b25e43SPhilip Reamescleanup967:
69c7b25e43SPhilip Reames  switch i32 undef, label %cleanup1169 [
70c7b25e43SPhilip Reames  i32 20, label %lbl_2368
71c7b25e43SPhilip Reames  ]
72c7b25e43SPhilip Reames
73c7b25e43SPhilip Reamescleanup1169:
74c7b25e43SPhilip Reames  ret void
75c7b25e43SPhilip Reames
76c7b25e43SPhilip Reamesunreachable:
77c7b25e43SPhilip Reames  unreachable
78c7b25e43SPhilip Reames}
79