brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · f5a68fa Raw
69 lines · plain
1; RUN: opt < %s -passes='function(break-crit-edges,loop-simplify),loop-extract' -S | FileCheck %s2 3; This function has 2 simple loops and they should be extracted into 2 new functions.4define void @test3() {5; CHECK-LABEL: @test3(6; CHECK-NEXT:  entry:7; CHECK-NEXT:    br label %codeRepl18; CHECK:       codeRepl1:9; CHECK-NEXT:    call void @test3.loop.0()10; CHECK-NEXT:    br label %loop.0.loop.1_crit_edge11; CHECK:       loop.0.loop.1_crit_edge:12; CHECK-NEXT:    br label %codeRepl13; CHECK:       codeRepl:14; CHECK-NEXT:    call void @test3.loop.1()15; CHECK-NEXT:    br label %exit16; CHECK:       exit:17; CHECK-NEXT:    ret void18 19entry:20  br label %loop.021 22loop.0:                                           ; preds = %loop.0, %entry23  %index.0 = phi i32 [ 10, %entry ], [ %next.0, %loop.0 ]24  tail call void @foo()25  %next.0 = add nsw i32 %index.0, -126  %repeat.0 = icmp sgt i32 %index.0, 127  br i1 %repeat.0, label %loop.0, label %loop.128 29loop.1:                                           ; preds = %loop.0, %loop.130  %index.1 = phi i32 [ %next.1, %loop.1 ], [ 10, %loop.0 ]31  tail call void @foo()32  %next.1 = add nsw i32 %index.1, -133  %repeat.1 = icmp sgt i32 %index.1, 134  br i1 %repeat.1, label %loop.1, label %exit35 36exit:                                             ; preds = %loop.137  ret void38}39 40declare void @foo()41 42; CHECK-LABEL: define internal void @test3.loop.1()43; CHECK-NEXT:  newFuncRoot:44; CHECK-NEXT:    br label %loop.145; CHECK:       loop.1:46; CHECK-NEXT:    %index.1 = phi i32 [ %next.1, %loop.1.loop.1_crit_edge ], [ 10, %newFuncRoot ]47; CHECK-NEXT:    tail call void @foo()48; CHECK-NEXT:    %next.1 = add nsw i32 %index.1, -149; CHECK-NEXT:    %repeat.1 = icmp sgt i32 %index.1, 150; CHECK-NEXT:    br i1 %repeat.1, label %loop.1.loop.1_crit_edge, label %exit.exitStub51; CHECK:       loop.1.loop.1_crit_edge:52; CHECK-NEXT:    br label %loop.153; CHECK:       exit.exitStub:54; CHECK-NEXT:    ret void55 56; CHECK-LABEL: define internal void @test3.loop.0()57; CHECK-NEXT:  newFuncRoot:58; CHECK-NEXT:    br label %loop.059; CHECK:       loop.0:60; CHECK-NEXT:    %index.0 = phi i32 [ 10, %newFuncRoot ], [ %next.0, %loop.0.loop.0_crit_edge ]61; CHECK-NEXT:    tail call void @foo()62; CHECK-NEXT:    %next.0 = add nsw i32 %index.0, -163; CHECK-NEXT:    %repeat.0 = icmp sgt i32 %index.0, 164; CHECK-NEXT:    br i1 %repeat.0, label %loop.0.loop.0_crit_edge, label %loop.0.loop.1_crit_edge.exitStub65; CHECK:       loop.0.loop.0_crit_edge:66; CHECK-NEXT:    br label %loop.067; CHECK:       loop.0.loop.1_crit_edge.exitStub:68; CHECK-NEXT:    ret void69