forked from OSchip/llvm-project
143 lines
3.6 KiB
LLVM
143 lines
3.6 KiB
LLVM
|
; RUN: opt < %s -passes='print<phi-values>' -disable-output 2>&1 | FileCheck %s
|
||
|
|
||
|
; This test uses a long chain of phis that take themselves as an operand, which causes
|
||
|
; phi values analysis to segfault if it's not careful about that kind of thing.
|
||
|
|
||
|
; CHECK-LABEL: PHI Values for function: fn
|
||
|
define void @fn(i32* %arg) {
|
||
|
entry:
|
||
|
br label %while1.cond
|
||
|
|
||
|
while1.cond:
|
||
|
; CHECK: PHI %phi1 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi1 = phi i32* [ %arg, %entry ], [ %phi2, %while1.then ]
|
||
|
br i1 undef, label %while1.end, label %while1.body
|
||
|
|
||
|
while1.body:
|
||
|
br i1 undef, label %while1.then, label %while1.if
|
||
|
|
||
|
while1.if:
|
||
|
br label %while1.then
|
||
|
|
||
|
while1.then:
|
||
|
; CHECK: PHI %phi2 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi2 = phi i32* [ %arg, %while1.if ], [ %phi1, %while1.body ]
|
||
|
br label %while1.cond
|
||
|
|
||
|
while1.end:
|
||
|
br label %while2.cond1
|
||
|
|
||
|
while2.cond1:
|
||
|
; CHECK: PHI %phi3 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi3 = phi i32* [ %phi1, %while1.end ], [ %phi5, %while2.then ]
|
||
|
br i1 undef, label %while2.end, label %while2.body1
|
||
|
|
||
|
while2.body1:
|
||
|
br i1 undef, label %while2.cond2, label %while2.then
|
||
|
|
||
|
while2.cond2:
|
||
|
; CHECK: PHI %phi4 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi4 = phi i32* [ %phi3, %while2.body1 ], [ %phi4, %while2.if ]
|
||
|
br i1 undef, label %while2.then, label %while2.if
|
||
|
|
||
|
while2.if:
|
||
|
br label %while2.cond2
|
||
|
|
||
|
while2.then:
|
||
|
; CHECK: PHI %phi5 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi5 = phi i32* [ %phi3, %while2.body1 ], [ %phi4, %while2.cond2 ]
|
||
|
br label %while2.cond1
|
||
|
|
||
|
while2.end:
|
||
|
br label %while3.cond1
|
||
|
|
||
|
while3.cond1:
|
||
|
; CHECK: PHI %phi6 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi6 = phi i32* [ %phi3, %while2.end ], [ %phi7, %while3.cond2 ]
|
||
|
br i1 undef, label %while3.end, label %while3.cond2
|
||
|
|
||
|
while3.cond2:
|
||
|
; CHECK: PHI %phi7 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi7 = phi i32* [ %phi6, %while3.cond1 ], [ %phi7, %while3.body ]
|
||
|
br i1 undef, label %while3.cond1, label %while3.body
|
||
|
|
||
|
while3.body:
|
||
|
br label %while3.cond2
|
||
|
|
||
|
while3.end:
|
||
|
br label %while4.cond1
|
||
|
|
||
|
while4.cond1:
|
||
|
; CHECK: PHI %phi8 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi8 = phi i32* [ %phi6, %while3.end ], [ %phi10, %while4.then ]
|
||
|
br i1 undef, label %while4.end, label %while4.if
|
||
|
|
||
|
while4.if:
|
||
|
br i1 undef, label %while4.cond2, label %while4.then
|
||
|
|
||
|
while4.cond2:
|
||
|
; CHECK: PHI %phi9 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi9 = phi i32* [ %phi8, %while4.if ], [ %phi9, %while4.body ]
|
||
|
br i1 undef, label %while4.then, label %while4.body
|
||
|
|
||
|
while4.body:
|
||
|
br label %while4.cond2
|
||
|
|
||
|
while4.then:
|
||
|
; CHECK: PHI %phi10 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi10 = phi i32* [ %phi8, %while4.if ], [ %phi9, %while4.cond2 ]
|
||
|
br label %while4.cond1
|
||
|
|
||
|
while4.end:
|
||
|
br label %while5.cond
|
||
|
|
||
|
while5.cond:
|
||
|
; CHECK: PHI %phi11 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi11 = phi i32* [ %phi8, %while4.end ], [ %phi13, %while5.then ]
|
||
|
br i1 undef, label %while5.end, label %while5.body1
|
||
|
|
||
|
while5.body1:
|
||
|
br i1 undef, label %while5.if, label %while5.then
|
||
|
|
||
|
while5.if:
|
||
|
; CHECK: PHI %phi12 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi12 = phi i32* [ %phi11, %while5.body1 ], [ %phi12, %while5.body2 ]
|
||
|
br i1 undef, label %while5.then, label %while5.body2
|
||
|
|
||
|
while5.body2:
|
||
|
br label %while5.if
|
||
|
|
||
|
while5.then:
|
||
|
; CHECK: PHI %phi13 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi13 = phi i32* [ %phi11, %while5.body1 ], [ %phi12, %while5.if ]
|
||
|
br label %while5.cond
|
||
|
|
||
|
while5.end:
|
||
|
br label %while6.cond1
|
||
|
|
||
|
while6.cond1:
|
||
|
; CHECK: PHI %phi14 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi14 = phi i32* [ %phi11, %while5.end ], [ %phi14, %while6.cond1 ]
|
||
|
br i1 undef, label %while6.cond2, label %while6.cond1
|
||
|
|
||
|
while6.cond2:
|
||
|
; CHECK: PHI %phi15 has values:
|
||
|
; CHECK: i32* %arg
|
||
|
%phi15 = phi i32* [ %phi14, %while6.cond1 ], [ %phi15, %while6.cond2 ]
|
||
|
br label %while6.cond2
|
||
|
}
|