xref: /llvm-project/llvm/test/tools/llvm-reduce/operands-to-args-phi.ll (revision f862d62350aebab1b5839c22f4f5ab8aba3abe02)
1; RUN: llvm-reduce --abort-on-invalid-reduction %s -o %t --delta-passes=operands-to-args --test FileCheck --test-arg %s --test-arg --check-prefix=INTERESTING --test-arg --input-file
2; RUN: FileCheck -check-prefix=RESULT %s < %t
3
4; Make sure an invalid reduction isn't hit from only replacing one of
5; the values when a predecessor is listed multiple times in a phi.
6
7
8; RESULT: define void @fn(i1 %cmp11, i8 %p.2, i8 %k.2, i8 %p.4, i8 %k.0, i8 %k.4, i8 %p.0, i1 %tobool30, i8 %spec.select, i8 %spec.select1)
9
10; RESULT:     for.cond:
11; RESULT-NEXT:  %p.01 = phi i8 [ 0, %entry ], [ %p.2, %for.inc ]
12; RESULT-NEXT:  %k.02 = phi i8 [ 0, %entry ], [ %k.2, %for.inc ]
13
14; RESULT:     if.end26:
15; RESULT-NEXT:  %p.1 = phi i8 [ %p.4, %for.cond35 ], [ %k.0, %if.end ]
16; RESULT-NEXT:  %k.1 = phi i8 [ %k.4, %for.cond35 ], [ 0, %if.end ]
17
18; RESULT:     for.inc:
19; RESULT-NEXT:  %p.26 = phi i8 [ %spec.select, %if.end26 ], [ poison, %if.then13 ], [ %spec.select, %if.end26 ]
20; RESULT-NEXT:  %k.27 = phi i8 [ %spec.select1, %if.end26 ], [ 0, %if.then13 ], [ %spec.select1, %if.end26 ]
21
22
23; RESULT:      for.cond35:
24; RESULT-NEXT:   %p.48 = phi i8 [ 0, %if.then ], [ %k.0, %if.then13 ]
25; RESULT-NEXT:   %k.49 = phi i8 [ %k.0, %if.then ], [ 0, %if.then13 ]
26
27define void @fn(i1 %cmp11) {
28entry:
29  br label %for.cond
30
31for.cond:                                         ; preds = %for.inc, %entry
32  %p.0 = phi i8 [ 0, %entry ], [ %p.2, %for.inc ]
33  %k.0 = phi i8 [ 0, %entry ], [ %k.2, %for.inc ]
34  br i1 %cmp11, label %if.then, label %if.end
35
36if.then:                                          ; preds = %for.cond
37  br label %for.cond35
38
39if.end:                                           ; preds = %for.cond
40  br i1 %cmp11, label %if.then13, label %if.end26
41
42if.then13:                                        ; preds = %if.end
43  br i1 %cmp11, label %for.inc, label %for.cond35
44
45if.end26:                                         ; preds = %for.cond35, %if.end
46  ; INTERESTING: %p.1 = phi i8
47  ; INTERESTING: %k.1 = phi i8
48
49  %p.1 = phi i8 [ %p.4, %for.cond35 ], [ %k.0, %if.end ]
50  %k.1 = phi i8 [ %k.4, %for.cond35 ], [ 0, %if.end ]
51  %tobool30 = icmp ne i8 %p.0, 0
52  %spec.select = select i1 false, i8 0, i8 %p.1
53  %spec.select1 = select i1 %tobool30, i8 %k.1, i8 0
54  br i1 false, label %for.inc, label %for.inc
55
56; INTERESTING: {{^}}for.inc:
57; INTERESTING: phi i8
58; INTERESTING-SAME: [ %spec.select{{[0-9]*}}, %if.end26 ]
59
60; INTERESTING: phi i8
61; INTERESTING-SAME: [ %spec.select{{[0-9]*}}, %if.end26 ]
62for.inc:                                          ; preds = %if.end26, %if.end26, %if.then13
63  %p.2 = phi i8 [ %spec.select, %if.end26 ], [ poison, %if.then13 ], [ %spec.select, %if.end26 ]
64  %k.2 = phi i8 [ %spec.select1, %if.end26 ], [ 0, %if.then13 ], [ %spec.select1, %if.end26 ]
65  %0 = load i32, ptr null, align 4
66  br label %for.cond
67
68for.cond35:                                       ; preds = %if.then13, %if.then
69  %p.4 = phi i8 [ 0, %if.then ], [ %k.0, %if.then13 ]
70  %k.4 = phi i8 [ %k.0, %if.then ], [ 0, %if.then13 ]
71  %tobool36 = icmp eq i32 0, 0
72  br label %if.end26
73}
74