brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 3f0a390 Raw
121 lines · plain
1; RUN: llc -mtriple=i686-linux < %s | FileCheck %s2 3; Don't rotate the loop if the number of fall through to exit is not larger4; than the number of fall through to header.5define void @no_rotate() {6; CHECK-LABEL: no_rotate7; CHECK: %entry8; CHECK: %header9; CHECK: %middle10; CHECK: %latch111; CHECK: %latch212; CHECK: %end13entry:14  br label %header15 16header:17  %val1 = call i1 @foo()18  br i1 %val1, label %middle, label %end19 20middle:21  %val2 = call i1 @foo()22  br i1 %val2, label %latch1, label %end23 24latch1:25  %val3 = call i1 @foo()26  br i1 %val3, label %latch2, label %header27 28latch2:29  %val4 = call i1 @foo()30  br label %header31 32end:33  ret void34}35 36define void @do_rotate() {37; CHECK-LABEL: do_rotate38; CHECK: %entry39; CHECK: %then40; CHECK: %else41; CHECK: %latch142; CHECK: %latch243; CHECK: %header44; CHECK: %end45entry:46  %val0 = call i1 @foo()47  br i1 %val0, label %then, label %else48 49then:50  call void @a()51  br label %header52 53else:54  call void @b()55  br label %header56 57header:58  %val1 = call i1 @foo()59  br i1 %val1, label %latch1, label %end60 61latch1:62  %val3 = call i1 @foo()63  br i1 %val3, label %latch2, label %header64 65latch2:66  %val4 = call i1 @foo()67  br label %header68 69end:70  ret void71}72 73; The loop structure is same as in @no_rotate, but the loop header's predecessor74; doesn't fall through to it, so it should be rotated to get exit fall through.75define void @do_rotate2() {76; CHECK-LABEL: do_rotate277; CHECK: %entry78; CHECK: %then79; CHECK: %middle80; CHECK: %latch181; CHECK: %latch282; CHECK: %header83; CHECK: %exit84entry:85  %val0 = call i1 @foo()86  br i1 %val0, label %then, label %header, !prof !187 88then:89  call void @a()90  br label %end91 92header:93  %val1 = call i1 @foo()94  br i1 %val1, label %middle, label %exit95 96middle:97  %val2 = call i1 @foo()98  br i1 %val2, label %latch1, label %exit99 100latch1:101  %val3 = call i1 @foo()102  br i1 %val3, label %latch2, label %header103 104latch2:105  %val4 = call i1 @foo()106  br label %header107 108exit:109  call void @b()110  br label %end111 112end:113  ret void114}115 116declare i1 @foo()117declare void @a()118declare void @b()119 120!1 = !{!"branch_weights", i32 10, i32 1}121