1# RUN: llc -run-pass=codegenprepare -o - %s | FileCheck %s
2
3# REQUIRES: default_triple
4
5# This testcase without the accompanying fix triggers the assert
6# "Replacement PHI node is already replaced."
7
8--- |
9  define void @f1() {
10  entry:
11    %arrayidx = getelementptr inbounds [2 x i16], [2 x i16]* undef, i16 0, i16 2
12    %0 = bitcast i16* %arrayidx to i32*
13    %1 = bitcast [2 x i16]* undef to i32*
14    br label %for.cond
15
16  for.cond:
17    %2 = phi i32* [ %0, %entry ], [ %7, %cleanup ]
18    %3 = phi i32* [ %0, %entry ], [ %9, %cleanup ]
19    br label %for.body
20
21  for.body:
22    %4 = phi i32* [ %3, %for.cond ], [ %9, %cleanup ]
23    %5 = phi i32* [ %2, %for.cond ], [ %9, %cleanup ]
24    %6 = phi i32* [ %2, %for.cond ], [ %9, %cleanup ]
25    br i1 false, label %for.cond2, label %if.then
26
27  if.then:
28    store i32 undef, i32* %4, align 1
29    unreachable
30
31  for.cond2:
32    %7 = phi i32* [ %6, %for.body ], [ %7, %if.then5 ], [ %1, %for.cond2 ]
33    %8 = phi i32* [ %5, %for.body ], [ %8, %if.then5 ], [ %1, %for.cond2 ]
34    %9 = phi i32* [ %4, %for.body ], [ %8, %if.then5 ], [ %1, %for.cond2 ]
35    br i1 undef, label %for.cond2, label %if.then5
36
37  if.then5:
38    br i1 undef, label %cleanup, label %for.cond2
39
40  cleanup:
41    br i1 true, label %for.cond, label %for.body
42  }
43
44...
45
46# Sanity check to verify that something got through.
47# CHECK-LABEL: entry:
48