brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · c7c40da Raw
283 lines · plain
1; RUN: opt < %s -passes='print<phi-values>' -disable-output 2>&1 | FileCheck %s2 3@X = common global i32 04 5; CHECK-LABEL: PHI Values for function: simple6define void @simple(ptr %ptr, i1 %arg) {7entry:8  br i1 %arg, label %if, label %else9 10if:11  br label %end12 13else:14  br label %end15 16end:17; CHECK: PHI %phi1 has values:18; CHECK-DAG: i32 019; CHECK-DAG: i32 120  %phi1 = phi i32 [ 0, %if ], [ 1, %else ]21; CHECK: PHI %phi2 has values:22; CHECK-DAG: @X23; CHECK-DAG: %ptr24  %phi2 = phi ptr [ @X, %if ], [ %ptr, %else ]25  ret void26}27 28; CHECK-LABEL: PHI Values for function: chain29define void @chain(i1 %arg) {30entry:31  br i1 %arg, label %if1, label %else132 33if1:34  br label %middle35 36else1:37  br label %middle38 39middle:40; CHECK: PHI %phi1 has values:41; CHECK-DAG: i32 042; CHECK-DAG: i32 143  %phi1 = phi i32 [ 0, %if1 ], [ 1, %else1 ]44  br i1 %arg, label %if2, label %else245 46if2:47  br label %end48 49else2:50  br label %end51 52end:53; CHECK: PHI %phi2 has values:54; CHECK-DAG: i32 055; CHECK-DAG: i32 156; CHECK-DAG: i32 257  %phi2 = phi i32 [ %phi1, %if2 ], [ 2, %else2 ]58  ret void59}60 61; CHECK-LABEL: PHI Values for function: no_values62define void @no_values(i1 %arg) {63entry:64  ret void65 66unreachable:67; CHECK: PHI %phi has values:68; CHECK-DAG: NONE69  %phi = phi i32 [ %phi, %unreachable ]70  br label %unreachable71}72 73; CHECK-LABEL: PHI Values for function: simple_loop74define void @simple_loop(i1 %arg) {75entry:76  br label %loop77 78loop:79; CHECK: PHI %phi has values:80; CHECK-DAG: i32 081  %phi = phi i32 [ 0, %entry ], [ %phi, %loop ]82  br i1 %arg, label %loop, label %end83 84end:85  ret void86}87 88; CHECK-LABEL: PHI Values for function: complex_loop89define void @complex_loop(i1 %arg) {90entry:91  br i1 %arg, label %loop, label %end92 93loop:94; CHECK: PHI %phi1 has values:95; CHECK-DAG: i32 096; CHECK-DAG: i32 197  %phi1 = phi i32 [ 0, %entry ], [ %phi2, %then ]98  br i1 %arg, label %if, label %else99 100if:101  br label %then102 103else:104  br label %then105 106then:107; CHECK: PHI %phi2 has values:108; CHECK-DAG: i32 0109; CHECK-DAG: i32 1110  %phi2 = phi i32 [ %phi1, %if ], [ 1, %else ]111  br i1 %arg, label %loop, label %end112 113end:114; CHECK: PHI %phi3 has values:115; CHECK-DAG: i32 0116; CHECK-DAG: i32 1117; CHECK-DAG: i32 2118  %phi3 = phi i32 [ 2, %entry ], [ %phi2, %then ]119  ret void120}121 122; CHECK-LABEL: PHI Values for function: strange_loop123define void @strange_loop(i1 %arg) {124entry:125  br i1 %arg, label %ifelse, label %inloop126 127loop:128; CHECK: PHI %phi1 has values:129; CHECK-DAG: i32 0130; CHECK-DAG: i32 1131; CHECK-DAG: i32 2132; CHECK-DAG: i32 3133  %phi1 = phi i32 [ %phi3, %if ], [ 0, %else ], [ %phi2, %inloop ]134  br i1 %arg, label %inloop, label %end135 136inloop:137; CHECK: PHI %phi2 has values:138; CHECK-DAG: i32 0139; CHECK-DAG: i32 1140; CHECK-DAG: i32 2141; CHECK-DAG: i32 3142  %phi2 = phi i32 [ %phi1, %loop ], [ 1, %entry ]143  br i1 %arg, label %ifelse, label %loop144 145ifelse:146; CHECK: PHI %phi3 has values:147; CHECK-DAG: i32 2148; CHECK-DAG: i32 3149  %phi3 = phi i32 [ 2, %entry ], [ 3, %inloop ]150  br i1 %arg, label %if, label %else151 152if:153  br label %loop154 155else:156  br label %loop157 158end:159  ret void160}161 162; CHECK-LABEL: PHI Values for function: mutual_loops163define void @mutual_loops(i1 %arg) {164entry:165  br i1 %arg, label %loop1, label %loop2166 167loop1:168; CHECK: PHI %phi1 has values:169; CHECK-DAG: 0170; CHECK-DAG: 1171; CHECK-DAG: 2172; CHECK-DAG: 3173; CHECK-DAG: 4174  %phi1 = phi i32 [ 0, %entry ], [ %phi2, %loop1.then ], [ %phi3, %loop2.if ]175  br i1 %arg, label %loop1.if, label %loop1.else176 177loop1.if:178  br i1 %arg, label %loop1.then, label %loop2179 180loop1.else:181  br label %loop1.then182 183loop1.then:184; CHECK: PHI %phi2 has values:185; CHECK-DAG: 0186; CHECK-DAG: 1187; CHECK-DAG: 2188; CHECK-DAG: 3189; CHECK-DAG: 4190  %phi2 = phi i32 [ 1, %loop1.if ], [ %phi1, %loop1.else ]191  br i1 %arg, label %loop1, label %end192 193loop2:194; CHECK: PHI %phi3 has values:195; CHECK-DAG: 2196; CHECK-DAG: 3197; CHECK-DAG: 4198  %phi3 = phi i32 [ 2, %entry ], [ %phi4, %loop2.then ], [ 3, %loop1.if ]199  br i1 %arg, label %loop2.if, label %loop2.else200 201loop2.if:202  br i1 %arg, label %loop2.then, label %loop1203 204loop2.else:205  br label %loop2.then206 207loop2.then:208; CHECK: PHI %phi4 has values:209; CHECK-DAG: 2210; CHECK-DAG: 3211; CHECK-DAG: 4212  %phi4 = phi i32 [ 4, %loop2.if ], [ %phi3, %loop2.else ]213  br i1 %arg, label %loop2, label %end214 215end:216; CHECK: PHI %phi5 has values:217; CHECK-DAG: 0218; CHECK-DAG: 1219; CHECK-DAG: 2220; CHECK-DAG: 3221; CHECK-DAG: 4222  %phi5 = phi i32 [ %phi2, %loop1.then ], [ %phi4, %loop2.then ]223  ret void224}225 226; CHECK-LABEL: PHI Values for function: nested_loops_several_values227define void @nested_loops_several_values(i1 %arg) {228entry:229  br label %loop1230 231loop1:232; CHECK: PHI %phi1 has values:233; CHECK-DAG: i32 0234; CHECK-DAG: %add235  %phi1 = phi i32 [ 0, %entry ], [ %phi2, %loop2 ]236  br i1 %arg, label %loop2, label %end237 238loop2:239; CHECK: PHI %phi2 has values:240; CHECK-DAG: i32 0241; CHECK-DAG: %add242  %phi2 = phi i32 [ %phi1, %loop1 ], [ %phi3, %loop3 ]243  br i1 %arg, label %loop3, label %loop1244 245loop3:246; CHECK: PHI %phi3 has values:247; CHECK-DAG: i32 0248; CHECK-DAG: %add249  %phi3 = phi i32 [ %add, %loop3 ], [ %phi2, %loop2 ]250  %add = add i32 %phi3, 1251  br i1 %arg, label %loop3, label %loop2252 253end:254  ret void255}256 257; CHECK-LABEL: PHI Values for function: nested_loops_one_value258define void @nested_loops_one_value(i1 %arg) {259entry:260  br label %loop1261 262loop1:263; CHECK: PHI %phi1 has values:264; CHECK-DAG: i32 0265  %phi1 = phi i32 [ 0, %entry ], [ %phi2, %loop2 ]266  br i1 %arg, label %loop2, label %end267 268loop2:269; CHECK: PHI %phi2 has values:270; CHECK-DAG: i32 0271  %phi2 = phi i32 [ %phi1, %loop1 ], [ %phi3, %loop3 ]272  br i1 %arg, label %loop3, label %loop1273 274loop3:275; CHECK: PHI %phi3 has values:276; CHECK-DAG: i32 0277  %phi3 = phi i32 [ 0, %loop3 ], [ %phi2, %loop2 ]278  br i1 %arg, label %loop3, label %loop2279 280end:281  ret void282}283