76 lines · plain
1; Test branch weight metadata, estimated trip count metadata, and block2; frequencies after loop peeling.3 4; RUN: opt < %s -S -passes='print<block-freq>' 2>&1 | \5; RUN: FileCheck -check-prefix=CHECK %s6 7; The -implicit-check-not options make sure that no additional labels or calls8; to @f show up.9; RUN: opt < %s -S -passes='loop-unroll,print<block-freq>' \10; RUN: -unroll-force-peel-count=2 2>&1 | \11; RUN: FileCheck %s -check-prefix=CHECK-UR \12; RUN: -implicit-check-not='{{^[^ ;]*:}}' \13; RUN: -implicit-check-not='call void @f'14 15; CHECK: block-frequency-info: test16; CHECK: do.body: float = 10.0,17 18; The sum should still be ~10.19;20; CHECK-UR: block-frequency-info: test21; CHECK-UR: - [[DO_BODY_PEEL:.*]]: float = 1.0,22; CHECK-UR: - [[DO_BODY_PEEL2:.*]]: float = 0.9,23; CHECK-UR: - [[DO_BODY:.*]]: float = 8.1,24 25declare void @f(i32)26 27define void @test(i32 %n) {28; CHECK-UR-LABEL: define void @test(29; CHECK-UR: [[ENTRY:.*]]:30; CHECK-UR: br label %[[DO_BODY_PEEL_BEGIN:.*]]31; CHECK-UR: [[DO_BODY_PEEL_BEGIN]]:32; CHECK-UR: br label %[[DO_BODY_PEEL:.*]]33; CHECK-UR: [[DO_BODY_PEEL]]:34; CHECK-UR: call void @f35; CHECK-UR: br i1 %{{.*}}, label %[[DO_END:.*]], label %[[DO_BODY_PEEL_NEXT:.*]], !prof ![[#PROF:]]36; CHECK-UR: [[DO_BODY_PEEL_NEXT]]:37; CHECK-UR: br label %[[DO_BODY_PEEL2:.*]]38; CHECK-UR: [[DO_BODY_PEEL2]]:39; CHECK-UR: call void @f40; CHECK-UR: br i1 %{{.*}}, label %[[DO_END]], label %[[DO_BODY_PEEL_NEXT1:.*]], !prof ![[#PROF]]41; CHECK-UR: [[DO_BODY_PEEL_NEXT1]]:42; CHECK-UR: br label %[[DO_BODY_PEEL_NEXT5:.*]]43; CHECK-UR: [[DO_BODY_PEEL_NEXT5]]:44; CHECK-UR: br label %[[ENTRY_PEEL_NEWPH:.*]]45; CHECK-UR: [[ENTRY_PEEL_NEWPH]]:46; CHECK-UR: br label %[[DO_BODY]]47; CHECK-UR: [[DO_BODY]]:48; CHECK-UR: call void @f49; CHECK-UR: br i1 %{{.*}}, label %[[DO_END_LOOPEXIT:.*]], label %[[DO_BODY]], !prof ![[#PROF]], !llvm.loop ![[#LOOP_UR_LATCH:]]50; CHECK-UR: [[DO_END_LOOPEXIT]]:51; CHECK-UR: br label %[[DO_END]]52; CHECK-UR: [[DO_END]]:53; CHECK-UR: ret void54 55entry:56 br label %do.body57 58do.body:59 %i = phi i32 [ 0, %entry ], [ %inc, %do.body ]60 %inc = add i32 %i, 161 call void @f(i32 %i)62 %c = icmp sge i32 %inc, %n63 br i1 %c, label %do.end, label %do.body, !prof !064 65do.end:66 ret void67}68 69!0 = !{!"branch_weights", i32 1, i32 9}70 71; CHECK-UR: ![[#PROF]] = !{!"branch_weights", i32 1, i32 9}72; CHECK-UR: ![[#LOOP_UR_LATCH]] = distinct !{![[#LOOP_UR_LATCH]], ![[#LOOP_UR_PC:]], ![[#LOOP_UR_TC:]], ![[#DISABLE:]]}73; CHECK-UR: ![[#LOOP_UR_PC]] = !{!"llvm.loop.peeled.count", i32 2}74; CHECK-UR: ![[#LOOP_UR_TC]] = !{!"llvm.loop.estimated_trip_count", i32 8}75; CHECK-UR: ![[#DISABLE]] = !{!"llvm.loop.unroll.disable"}76