Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / StructurizeCFG / infinite-loop.ll
blob5a10aa60f6d4fb1817e3a44a2c0ee0d7e28502c1
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -S -o - -structurizecfg -verify-dom-info < %s | FileCheck %s
4 ; This test hits a limitation in StructurizeCFG: it doesn't handle infinite-loops.
5 ; In this case, the IR remains unchanged.
7 define void @infinite_loop_false(ptr addrspace(1) %out, i1 %cond) {
8 ; CHECK-LABEL: @infinite_loop_false(
9 ; CHECK-NEXT:  entry:
10 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[FOR_END:%.*]], label [[FOR_BODY:%.*]]
11 ; CHECK:       for.body:
12 ; CHECK-NEXT:    store volatile i32 999, ptr addrspace(1) [[OUT:%.*]], align 4
13 ; CHECK-NEXT:    br label [[FOR_BODY]]
14 ; CHECK:       for.end:
15 ; CHECK-NEXT:    ret void
17 entry:
18   br i1 %cond, label %for.end, label %for.body
20 for.body:
21   store volatile i32 999, ptr addrspace(1) %out, align 4
22   br label %for.body
24 for.end:
25   ret void
28 define void @infinite_loop_on_branch(ptr addrspace(1) %out, i1 %cond) {
29 ; CHECK-LABEL: @infinite_loop_on_branch(
30 ; CHECK-NEXT:  entry:
31 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
32 ; CHECK:       if.then:
33 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
34 ; CHECK:       for.body:
35 ; CHECK-NEXT:    store volatile i32 999, ptr addrspace(1) [[OUT:%.*]], align 4
36 ; CHECK-NEXT:    br label [[FOR_BODY]]
37 ; CHECK:       if.else:
38 ; CHECK-NEXT:    store volatile i32 111, ptr addrspace(1) [[OUT]], align 4
39 ; CHECK-NEXT:    br label [[EXIT:%.*]]
40 ; CHECK:       exit:
41 ; CHECK-NEXT:    ret void
43 entry:
44   br i1 %cond, label %if.then, label %if.else
46 if.then:
47   br label %for.body
49 for.body:
50   store volatile i32 999, ptr addrspace(1) %out, align 4
51   br label %for.body
53 if.else:
54   store volatile i32 111, ptr addrspace(1) %out, align 4
55   br label %exit
57 exit:
58   ret void