143 lines · plain
1; RUN: opt < %s -passes='print<phi-values>' -disable-output 2>&1 | FileCheck %s2 3; This test uses a long chain of phis that take themselves as an operand, which causes4; phi values analysis to segfault if it's not careful about that kind of thing.5 6; CHECK-LABEL: PHI Values for function: fn7define void @fn(ptr %arg, i1 %arg1) {8entry:9 br label %while1.cond10 11while1.cond:12; CHECK: PHI %phi1 has values:13; CHECK: ptr %arg14 %phi1 = phi ptr [ %arg, %entry ], [ %phi2, %while1.then ]15 br i1 %arg1, label %while1.end, label %while1.body16 17while1.body:18 br i1 %arg1, label %while1.then, label %while1.if19 20while1.if:21 br label %while1.then22 23while1.then:24; CHECK: PHI %phi2 has values:25; CHECK: ptr %arg26 %phi2 = phi ptr [ %arg, %while1.if ], [ %phi1, %while1.body ]27 br label %while1.cond28 29while1.end:30 br label %while2.cond131 32while2.cond1:33; CHECK: PHI %phi3 has values:34; CHECK: ptr %arg35 %phi3 = phi ptr [ %phi1, %while1.end ], [ %phi5, %while2.then ]36 br i1 %arg1, label %while2.end, label %while2.body137 38while2.body1:39 br i1 %arg1, label %while2.cond2, label %while2.then40 41while2.cond2:42; CHECK: PHI %phi4 has values:43; CHECK: ptr %arg44 %phi4 = phi ptr [ %phi3, %while2.body1 ], [ %phi4, %while2.if ]45 br i1 %arg1, label %while2.then, label %while2.if46 47while2.if:48 br label %while2.cond249 50while2.then:51; CHECK: PHI %phi5 has values:52; CHECK: ptr %arg53 %phi5 = phi ptr [ %phi3, %while2.body1 ], [ %phi4, %while2.cond2 ]54 br label %while2.cond155 56while2.end:57 br label %while3.cond158 59while3.cond1:60; CHECK: PHI %phi6 has values:61; CHECK: ptr %arg62 %phi6 = phi ptr [ %phi3, %while2.end ], [ %phi7, %while3.cond2 ]63 br i1 %arg1, label %while3.end, label %while3.cond264 65while3.cond2:66; CHECK: PHI %phi7 has values:67; CHECK: ptr %arg68 %phi7 = phi ptr [ %phi6, %while3.cond1 ], [ %phi7, %while3.body ]69 br i1 %arg1, label %while3.cond1, label %while3.body70 71while3.body:72 br label %while3.cond273 74while3.end:75 br label %while4.cond176 77while4.cond1:78; CHECK: PHI %phi8 has values:79; CHECK: ptr %arg80 %phi8 = phi ptr [ %phi6, %while3.end ], [ %phi10, %while4.then ]81 br i1 %arg1, label %while4.end, label %while4.if82 83while4.if:84 br i1 %arg1, label %while4.cond2, label %while4.then85 86while4.cond2:87; CHECK: PHI %phi9 has values:88; CHECK: ptr %arg89 %phi9 = phi ptr [ %phi8, %while4.if ], [ %phi9, %while4.body ]90 br i1 %arg1, label %while4.then, label %while4.body91 92while4.body:93 br label %while4.cond294 95while4.then:96; CHECK: PHI %phi10 has values:97; CHECK: ptr %arg98 %phi10 = phi ptr [ %phi8, %while4.if ], [ %phi9, %while4.cond2 ]99 br label %while4.cond1100 101while4.end:102 br label %while5.cond103 104while5.cond:105; CHECK: PHI %phi11 has values:106; CHECK: ptr %arg107 %phi11 = phi ptr [ %phi8, %while4.end ], [ %phi13, %while5.then ]108 br i1 %arg1, label %while5.end, label %while5.body1109 110while5.body1:111 br i1 %arg1, label %while5.if, label %while5.then112 113while5.if:114; CHECK: PHI %phi12 has values:115; CHECK: ptr %arg116 %phi12 = phi ptr [ %phi11, %while5.body1 ], [ %phi12, %while5.body2 ]117 br i1 %arg1, label %while5.then, label %while5.body2118 119while5.body2:120 br label %while5.if121 122while5.then:123; CHECK: PHI %phi13 has values:124; CHECK: ptr %arg125 %phi13 = phi ptr [ %phi11, %while5.body1 ], [ %phi12, %while5.if ]126 br label %while5.cond127 128while5.end:129 br label %while6.cond1130 131while6.cond1:132; CHECK: PHI %phi14 has values:133; CHECK: ptr %arg134 %phi14 = phi ptr [ %phi11, %while5.end ], [ %phi14, %while6.cond1 ]135 br i1 %arg1, label %while6.cond2, label %while6.cond1136 137while6.cond2:138; CHECK: PHI %phi15 has values:139; CHECK: ptr %arg140 %phi15 = phi ptr [ %phi14, %while6.cond1 ], [ %phi15, %while6.cond2 ]141 br label %while6.cond2142}143