1; RUN: opt < %s -analyze -block-freq | FileCheck %s 2 3declare void @g(i32 %x) 4 5; CHECK-LABEL: Printing analysis {{.*}} for function 'branch_weight_0': 6; CHECK-NEXT: block-frequency-info: branch_weight_0 7define void @branch_weight_0(i32 %a) { 8; CHECK-NEXT: entry: float = 1.0, int = [[ENTRY:[0-9]+]] 9entry: 10 br label %for.body 11 12; Check that we get 1,4 instead of 0,3. 13; CHECK-NEXT: for.body: float = 4.0, 14for.body: 15 %i = phi i32 [ 0, %entry ], [ %inc, %for.body ] 16 call void @g(i32 %i) 17 %inc = add i32 %i, 1 18 %cmp = icmp ugt i32 %inc, %a 19 br i1 %cmp, label %for.end, label %for.body, !prof !0 20 21; CHECK-NEXT: for.end: float = 1.0, int = [[ENTRY]] 22for.end: 23 ret void 24} 25 26!0 = !{!"branch_weights", i32 0, i32 3} 27 28; CHECK-LABEL: Printing analysis {{.*}} for function 'infinite_loop' 29; CHECK-NEXT: block-frequency-info: infinite_loop 30define void @infinite_loop(i1 %x) { 31; CHECK-NEXT: entry: float = 1.0, int = [[ENTRY:[0-9]+]] 32entry: 33 br i1 %x, label %for.body, label %for.end, !prof !1 34 35; Check that the infinite loop is arbitrarily scaled to max out at 4096, 36; giving 2048 here. 37; CHECK-NEXT: for.body: float = 2048.0, 38for.body: 39 %i = phi i32 [ 0, %entry ], [ %inc, %for.body ] 40 call void @g(i32 %i) 41 %inc = add i32 %i, 1 42 br label %for.body 43 44; Check that the exit weight is half of entry, since half is lost in the 45; infinite loop above. 46; CHECK-NEXT: for.end: float = 0.5, 47for.end: 48 ret void 49} 50 51!1 = !{!"branch_weights", i32 1, i32 1} 52