[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / Transforms / DFAJumpThreading / max-path-length.ll
blob92747629f638f22ee1025261a25d989ceeae949e
1 ; REQUIRES: asserts
2 ; RUN: opt -S -passes=dfa-jump-threading -dfa-max-path-length=3 %s \
3 ; RUN:  2>&1 -disable-output -debug-only=dfa-jump-threading | FileCheck %s
4 ; RUN: opt -S -passes=dfa-jump-threading -dfa-max-num-visited-paths=3 %s \
5 ; RUN:  2>&1 -disable-output -debug-only=dfa-jump-threading | FileCheck %s
7 ; Make the path
8 ;   < case1 case1.1 case1.2 case1.3 case1.4 for.inc for.body > [ 3, case1 ]
9 ; too long so that it is not jump-threaded.
10 define i32 @max_path_length(i32 %num) {
11 ; CHECK-NOT: 3, case1
12 ; CHECK: < case2 for.inc for.body > [ 1, for.inc ]
13 ; CHECK-NEXT: < for.inc for.body > [ 1, for.inc ]
14 ; CHECK-NEXT: < case2 sel.si.unfold.false for.inc for.body > [ 2, sel.si.unfold.false ]
15 ; CHECK-NEXT: DFA-JT: Renaming non-local uses of: 
16 entry:
17   br label %for.body
19 for.body:
20   %count = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
21   %state = phi i32 [ 1, %entry ], [ %state.next, %for.inc ]
22   switch i32 %state, label %for.inc [
23   i32 1, label %case1
24   i32 2, label %case2
25   ]
27 case1:
28   %case1.state.next = phi i32 [ 3, %for.body ]
29   br label %case1.1
31 case1.1:
32   br label %case1.2
34 case1.2:
35   br label %case1.3
37 case1.3:
38   br label %case1.4
40 case1.4:
41   br label %for.inc
43 case2:
44   %cmp = icmp eq i32 %count, 50
45   %sel = select i1 %cmp, i32 1, i32 2
46   br label %for.inc
48 for.inc:
49   %state.next = phi i32 [ %sel, %case2 ], [ 1, %for.body ], [ %case1.state.next, %case1.4 ]
50   %inc = add nsw i32 %count, 1
51   %cmp.exit = icmp slt i32 %inc, %num
52   br i1 %cmp.exit, label %for.body, label %for.end
54 for.end:
55   ret i32 0