brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.7 KiB · 95f9bb5 Raw
222 lines · plain
1; RUN: opt < %s -disable-output -passes=instcombine -verify-dom-info2; RUN: opt < %s -passes='print<postdomtree>' 2>&1 | FileCheck --check-prefixes=CHECK-POSTDOM %s3 4; Demonstrate that Predicate Canonicalization (InstCombine) does not invalidate PostDomTree5; if the basic block is post-dom unreachable.6 7define void @test1(i24 %a, i24 %b) {8entry:9  br label %LOOP10 11LOOP:12  %f = icmp uge i24 %a, %b13  br i1 %f, label %B1, label %B214 15B1:16  %x = add i24 %a, %b17  br label %B218 19B2:20  br label %LOOP21}22 23; The same as @test1 except the LOOP condition canonicalized (as by instcombine).24define void @test1-canonicalized(i24 %a, i24 %b) {25entry:26  br label %LOOP27 28LOOP:29  %f.not = icmp ult i24 %a, %b30  br i1 %f.not, label %B2, label %B131 32B1:33  %x = add i24 %a, %b34  br label %B235 36B2:37  br label %LOOP38}39 40; The same as @test1 but different order of B1 and B2 in the function.41; The different order makes PostDomTree different in presense of postdom42; unreachable blocks.43define void @test2(i24 %a, i24 %b) {44entry:45  br label %LOOP46 47LOOP:48  %f = icmp uge i24 %a, %b49  br i1 %f, label %B1, label %B250 51B2:52  br label %LOOP53 54B1:55  %x = add i24 %a, %b56  br label %B257}58 59; The same as @test2 except the LOOP condition canonicalized (as by instcombine).60define void @test2-canonicalized(i24 %a, i24 %b) {61entry:62  br label %LOOP63 64LOOP:65  %f.not = icmp ult i24 %a, %b66  br i1 %f.not, label %B2, label %B167 68B2:69  br label %LOOP70 71B1:72  %x = add i24 %a, %b73  br label %B274}75 76; Two reverse unreachable subgraphs with RU1* and RU2* basic blocks respectively.77define void @test3(i24 %a, i24 %b, i32 %flag) {78entry:79  switch i32 %flag, label %EXIT [80    i32 1, label %RU181    i32 2, label %RU282    i32 3, label %RU2_B183  ]84 85RU1:86  %f = icmp uge i24 %a, %b87  br label %RU1_LOOP88 89RU1_LOOP:90  br i1 %f, label %RU1_B1, label %RU1_B291 92RU1_B1:93  %x = add i24 %a, %b94  br label %RU1_B295 96RU1_B2:97  br label %RU1_LOOP98 99RU2:100  %f2 = icmp uge i24 %a, %b101  br i1 %f2, label %RU2_B1, label %RU2_B2102 103RU2_B1:104  br label %RU2_B2105 106RU2_B2:107  br label %RU2_B1108 109EXIT:110  ret void111}112 113; The same as @test3 except the icmp conditions are canonicalized (as by instcombine).114define void @test3-canonicalized(i24 %a, i24 %b, i32 %flag) {115entry:116  switch i32 %flag, label %EXIT [117    i32 1, label %RU1118    i32 2, label %RU2119    i32 3, label %RU2_B1120  ]121 122RU1:123  %f.not = icmp ult i24 %a, %b124  br label %RU1_LOOP125 126RU1_LOOP:127  br i1 %f.not, label %RU1_B2, label %RU1_B1128 129RU1_B1:130  %x = add i24 %a, %b131  br label %RU1_B2132 133RU1_B2:134  br label %RU1_LOOP135 136RU2:137  %f2.not = icmp ult i24 %a, %b138  br i1 %f2.not, label %RU2_B2, label %RU2_B1139 140RU2_B1:141  br label %RU2_B2142 143RU2_B2:144  br label %RU2_B1145 146EXIT:147  ret void148}149 150; PostDomTrees of @test1(), @test2() and @test3() are different.151; PostDomTrees of @testX() and @testX-canonicalize() are the same.152 153; CHECK-POSTDOM-LABEL: test1154; CHECK-POSTDOM-NEXT: =============================--------------------------------155; CHECK-POSTDOM-NEXT: Inorder PostDominator Tree: DFSNumbers invalid: 0 slow queries.156; CHECK-POSTDOM-NEXT:   [1]  <<exit node>>157; CHECK-POSTDOM-NEXT:     [2] %B1158; CHECK-POSTDOM-NEXT:       [3] %LOOP159; CHECK-POSTDOM-NEXT:         [4] %entry160; CHECK-POSTDOM-NEXT:         [4] %B2161; CHECK-POSTDOM-NEXT: Roots: %B1162 163; CHECK-POSTDOM-LABEL: test1-canonicalized164; CHECK-POSTDOM-NEXT: =============================--------------------------------165; CHECK-POSTDOM-NEXT: Inorder PostDominator Tree: DFSNumbers invalid: 0 slow queries.166; CHECK-POSTDOM-NEXT:   [1]  <<exit node>>167; CHECK-POSTDOM-NEXT:     [2] %B1168; CHECK-POSTDOM-NEXT:       [3] %LOOP169; CHECK-POSTDOM-NEXT:         [4] %entry170; CHECK-POSTDOM-NEXT:         [4] %B2171; CHECK-POSTDOM-NEXT: Roots: %B1172 173; CHECK-POSTDOM-LABEL: test2174; CHECK-POSTDOM-NEXT: =============================--------------------------------175; CHECK-POSTDOM-NEXT: Inorder PostDominator Tree: DFSNumbers invalid: 0 slow queries.176; CHECK-POSTDOM-NEXT:   [1]  <<exit node>>177; CHECK-POSTDOM-NEXT:     [2] %B2178; CHECK-POSTDOM-NEXT:       [3] %LOOP179; CHECK-POSTDOM-NEXT:         [4] %entry180; CHECK-POSTDOM-NEXT:       [3] %B1181; CHECK-POSTDOM-NEXT: Roots: %B2182 183; CHECK-POSTDOM-LABEL: test2-canonicalized184; CHECK-POSTDOM-NEXT: =============================--------------------------------185; CHECK-POSTDOM-NEXT: Inorder PostDominator Tree: DFSNumbers invalid: 0 slow queries.186; CHECK-POSTDOM-NEXT:   [1]  <<exit node>>187; CHECK-POSTDOM-NEXT:     [2] %B2188; CHECK-POSTDOM-NEXT:       [3] %LOOP189; CHECK-POSTDOM-NEXT:         [4] %entry190; CHECK-POSTDOM-NEXT:       [3] %B1191; CHECK-POSTDOM-NEXT: Roots: %B2192 193; CHECK-POSTDOM-LABEL: test3194; CHECK-POSTDOM-NEXT:=============================--------------------------------195; CHECK-POSTDOM-NEXT:Inorder PostDominator Tree: DFSNumbers invalid: 0 slow queries.196; CHECK-POSTDOM-NEXT:  [1]  <<exit node>>197; CHECK-POSTDOM-NEXT:    [2] %EXIT198; CHECK-POSTDOM-NEXT:    [2] %entry199; CHECK-POSTDOM-NEXT:    [2] %RU1_B1200; CHECK-POSTDOM-NEXT:      [3] %RU1_LOOP201; CHECK-POSTDOM-NEXT:        [4] %RU1202; CHECK-POSTDOM-NEXT:        [4] %RU1_B2203; CHECK-POSTDOM-NEXT:    [2] %RU2_B1204; CHECK-POSTDOM-NEXT:      [3] %RU2205; CHECK-POSTDOM-NEXT:      [3] %RU2_B2206; CHECK-POSTDOM-NEXT:Roots: %EXIT %RU1_B1 %RU2_B1207 208; CHECK-POSTDOM-LABEL: test3-canonicalized209; CHECK-POSTDOM-NEXT:=============================--------------------------------210; CHECK-POSTDOM-NEXT:Inorder PostDominator Tree: DFSNumbers invalid: 0 slow queries.211; CHECK-POSTDOM-NEXT:  [1]  <<exit node>>212; CHECK-POSTDOM-NEXT:    [2] %EXIT213; CHECK-POSTDOM-NEXT:    [2] %entry214; CHECK-POSTDOM-NEXT:    [2] %RU1_B1215; CHECK-POSTDOM-NEXT:      [3] %RU1_LOOP216; CHECK-POSTDOM-NEXT:        [4] %RU1217; CHECK-POSTDOM-NEXT:        [4] %RU1_B2218; CHECK-POSTDOM-NEXT:    [2] %RU2_B1219; CHECK-POSTDOM-NEXT:      [3] %RU2220; CHECK-POSTDOM-NEXT:      [3] %RU2_B2221; CHECK-POSTDOM-NEXT:Roots: %EXIT %RU1_B1 %RU2_B1222