xref: /llvm-project/llvm/test/Transforms/StructurizeCFG/infinite-loop.ll (revision bf6f82a9df6a1693a5399039dcadd7fc00dab65e)
1e9716c64SJuan Manuel MARTINEZ CAAMAÑO; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2e9716c64SJuan Manuel MARTINEZ CAAMAÑO; RUN: opt -S -o - -structurizecfg -verify-dom-info < %s | FileCheck %s
3e9716c64SJuan Manuel MARTINEZ CAAMAÑO
4e9716c64SJuan Manuel MARTINEZ CAAMAÑO; This test hits a limitation in StructurizeCFG: it doesn't handle infinite-loops.
5e9716c64SJuan Manuel MARTINEZ CAAMAÑO; In this case, the IR remains unchanged.
6e9716c64SJuan Manuel MARTINEZ CAAMAÑO
7*bf6f82a9SMatt Arsenaultdefine void @infinite_loop_false(ptr addrspace(1) %out, i1 %cond) {
8e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-LABEL: @infinite_loop_false(
9e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:  entry:
10e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    br i1 [[COND:%.*]], label [[FOR_END:%.*]], label [[FOR_BODY:%.*]]
11e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK:       for.body:
12*bf6f82a9SMatt Arsenault; CHECK-NEXT:    store volatile i32 999, ptr addrspace(1) [[OUT:%.*]], align 4
13e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    br label [[FOR_BODY]]
14e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK:       for.end:
15e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    ret void
16e9716c64SJuan Manuel MARTINEZ CAAMAÑO;
17e9716c64SJuan Manuel MARTINEZ CAAMAÑOentry:
18e9716c64SJuan Manuel MARTINEZ CAAMAÑO  br i1 %cond, label %for.end, label %for.body
19e9716c64SJuan Manuel MARTINEZ CAAMAÑO
20e9716c64SJuan Manuel MARTINEZ CAAMAÑOfor.body:
21*bf6f82a9SMatt Arsenault  store volatile i32 999, ptr addrspace(1) %out, align 4
22e9716c64SJuan Manuel MARTINEZ CAAMAÑO  br label %for.body
23e9716c64SJuan Manuel MARTINEZ CAAMAÑO
24e9716c64SJuan Manuel MARTINEZ CAAMAÑOfor.end:
25e9716c64SJuan Manuel MARTINEZ CAAMAÑO  ret void
26e9716c64SJuan Manuel MARTINEZ CAAMAÑO}
27e9716c64SJuan Manuel MARTINEZ CAAMAÑO
28*bf6f82a9SMatt Arsenaultdefine void @infinite_loop_on_branch(ptr addrspace(1) %out, i1 %cond) {
29e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-LABEL: @infinite_loop_on_branch(
30e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:  entry:
31e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
32e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK:       if.then:
33e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
34e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK:       for.body:
35*bf6f82a9SMatt Arsenault; CHECK-NEXT:    store volatile i32 999, ptr addrspace(1) [[OUT:%.*]], align 4
36e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    br label [[FOR_BODY]]
37e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK:       if.else:
38*bf6f82a9SMatt Arsenault; CHECK-NEXT:    store volatile i32 111, ptr addrspace(1) [[OUT]], align 4
39e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    br label [[EXIT:%.*]]
40e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK:       exit:
41e9716c64SJuan Manuel MARTINEZ CAAMAÑO; CHECK-NEXT:    ret void
42e9716c64SJuan Manuel MARTINEZ CAAMAÑO;
43e9716c64SJuan Manuel MARTINEZ CAAMAÑOentry:
44e9716c64SJuan Manuel MARTINEZ CAAMAÑO  br i1 %cond, label %if.then, label %if.else
45e9716c64SJuan Manuel MARTINEZ CAAMAÑO
46e9716c64SJuan Manuel MARTINEZ CAAMAÑOif.then:
47e9716c64SJuan Manuel MARTINEZ CAAMAÑO  br label %for.body
48e9716c64SJuan Manuel MARTINEZ CAAMAÑO
49e9716c64SJuan Manuel MARTINEZ CAAMAÑOfor.body:
50*bf6f82a9SMatt Arsenault  store volatile i32 999, ptr addrspace(1) %out, align 4
51e9716c64SJuan Manuel MARTINEZ CAAMAÑO  br label %for.body
52e9716c64SJuan Manuel MARTINEZ CAAMAÑO
53e9716c64SJuan Manuel MARTINEZ CAAMAÑOif.else:
54*bf6f82a9SMatt Arsenault  store volatile i32 111, ptr addrspace(1) %out, align 4
55e9716c64SJuan Manuel MARTINEZ CAAMAÑO  br label %exit
56e9716c64SJuan Manuel MARTINEZ CAAMAÑO
57e9716c64SJuan Manuel MARTINEZ CAAMAÑOexit:
58e9716c64SJuan Manuel MARTINEZ CAAMAÑO  ret void
59e9716c64SJuan Manuel MARTINEZ CAAMAÑO}
60