1f72b76cdSArthur Eubanks; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-rebalance-large.prof | opt -passes='print<branch-prob>' -disable-output 2>&1 | FileCheck %s 2f72b76cdSArthur Eubanks; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-use-profi -sample-profile-file=%S/Inputs/profile-inference-rebalance-large.prof | opt -passes='print<block-freq>' -disable-output 2>&1 | FileCheck %s --check-prefix=CHECK2 313d1364aSspupyrev 413d1364aSspupyrev; The test verifies that counts can rebalanced in switch statements that contain 513d1364aSspupyrev; both 'known' and 'unknown' basic blocks. 613d1364aSspupyrev; 713d1364aSspupyrev; +---------+ 813d1364aSspupyrev; +----------------- | b15 [?] | 913d1364aSspupyrev; | +---------+ 1013d1364aSspupyrev; | ^ 1113d1364aSspupyrev; | | 1213d1364aSspupyrev; | | 1313d1364aSspupyrev; | +---------+ +--------------+ +---------+ 1413d1364aSspupyrev; | | b13 [?] | <-- | b11 [3300] | --> | b14 [?] | 1513d1364aSspupyrev; | +---------+ +--------------+ +---------+ 1613d1364aSspupyrev; | | | | | 1713d1364aSspupyrev; | | | | | 1813d1364aSspupyrev; | | v | | 1913d1364aSspupyrev; | | +---------+ | | 2013d1364aSspupyrev; | | | b12 [0] | | | 2113d1364aSspupyrev; | | +---------+ | | 2213d1364aSspupyrev; | | | | | 2313d1364aSspupyrev; | | | | | 2413d1364aSspupyrev; | | v v | 2513d1364aSspupyrev; | | +--------------+ | 2613d1364aSspupyrev; | +-----------> | | <-----+ 2713d1364aSspupyrev; | | b16 [3300] | 2813d1364aSspupyrev; +----------------> | | 2913d1364aSspupyrev; +--------------+ 3013d1364aSspupyrev 3113d1364aSspupyrev@yydebug = dso_local global i32 0, align 4 3213d1364aSspupyrev 3313d1364aSspupyrev; Function Attrs: nounwind uwtable 3413d1364aSspupyrevdefine dso_local i32 @foo1(i32 %0, i32 %1) #0 { 3513d1364aSspupyrevb11: 3613d1364aSspupyrev call void @llvm.pseudoprobe(i64 7682762345278052905, i64 1, i32 0, i64 -1) 3713d1364aSspupyrev %cmp = icmp ne i32 %0, 0 3813d1364aSspupyrev switch i32 %1, label %b12 [ 3913d1364aSspupyrev i32 1, label %b13 4013d1364aSspupyrev i32 2, label %b14 4113d1364aSspupyrev i32 3, label %b15 4213d1364aSspupyrev i32 4, label %b16 4313d1364aSspupyrev ] 44*bb6497ffSMircea Trofin; CHECK: edge %b11 -> %b12 probability is 0x00000000 / 0x80000000 = 0.00% 45*bb6497ffSMircea Trofin; CHECK: edge %b11 -> %b13 probability is 0x20000000 / 0x80000000 = 25.00% 46*bb6497ffSMircea Trofin; CHECK: edge %b11 -> %b14 probability is 0x20000000 / 0x80000000 = 25.00% 47*bb6497ffSMircea Trofin; CHECK: edge %b11 -> %b15 probability is 0x20000000 / 0x80000000 = 25.00% 48*bb6497ffSMircea Trofin; CHECK: edge %b11 -> %b16 probability is 0x20000000 / 0x80000000 = 25.00% 4913d1364aSspupyrev; CHECK2: - b11: float = {{.*}}, int = {{.*}}, count = 3300 5013d1364aSspupyrev 5113d1364aSspupyrevb12: 5213d1364aSspupyrev call void @llvm.pseudoprobe(i64 7682762345278052905, i64 2, i32 0, i64 -1) 5313d1364aSspupyrev br label %b16 5413d1364aSspupyrev; CHECK2: - b12: float = {{.*}}, int = {{.*}}, count = 0 5513d1364aSspupyrev 5613d1364aSspupyrevb13: 5713d1364aSspupyrev call void @llvm.pseudoprobe(i64 7682762345278052905, i64 3, i32 0, i64 -1) 5813d1364aSspupyrev br label %b16 5913d1364aSspupyrev; CHECK2: - b13: float = {{.*}}, int = {{.*}}, count = 825 6013d1364aSspupyrev 6113d1364aSspupyrevb14: 6213d1364aSspupyrev call void @llvm.pseudoprobe(i64 7682762345278052905, i64 4, i32 0, i64 -1) 6313d1364aSspupyrev br label %b16 6413d1364aSspupyrev; CHECK2: - b14: float = {{.*}}, int = {{.*}}, count = 825 6513d1364aSspupyrev 6613d1364aSspupyrevb15: 6713d1364aSspupyrev call void @llvm.pseudoprobe(i64 7682762345278052905, i64 5, i32 0, i64 -1) 6813d1364aSspupyrev br label %b16 6913d1364aSspupyrev; CHECK2: - b15: float = {{.*}}, int = {{.*}}, count = 825 7013d1364aSspupyrev 7113d1364aSspupyrevb16: 7213d1364aSspupyrev call void @llvm.pseudoprobe(i64 7682762345278052905, i64 6, i32 0, i64 -1) 7313d1364aSspupyrev ret i32 %1 7413d1364aSspupyrev; CHECK2: - b16: float = {{.*}}, int = {{.*}}, count = 3300 7513d1364aSspupyrev} 7613d1364aSspupyrev 7713d1364aSspupyrev 7813d1364aSspupyrev; The test verifies that counts can rebalanced even when control-flow ends at 7913d1364aSspupyrev; a basic block with an unknown count. 8013d1364aSspupyrev; 8113d1364aSspupyrev; +-----------+ 8213d1364aSspupyrev; | b21 [128] | -+ 8313d1364aSspupyrev; +-----------+ | 8413d1364aSspupyrev; | | 8513d1364aSspupyrev; v | 8613d1364aSspupyrev; +-----------+ | 8713d1364aSspupyrev; | b22 [128] | | 8813d1364aSspupyrev; +-----------+ | 8913d1364aSspupyrev; | | 9013d1364aSspupyrev; v | 9113d1364aSspupyrev; +-----------+ | 9213d1364aSspupyrev; +------------ | b23 [128] | <+ 9313d1364aSspupyrev; | +-----------+ 9413d1364aSspupyrev; | | 9513d1364aSspupyrev; v v 9613d1364aSspupyrev; +---------+ +-----------+ 9713d1364aSspupyrev; | b26 [?] | <-- | b24 [128] | 9813d1364aSspupyrev; +---------+ +-----------+ 9913d1364aSspupyrev; | | 10013d1364aSspupyrev; | v 10113d1364aSspupyrev; | +-----------+ 10213d1364aSspupyrev; | | b25 [?] | 10313d1364aSspupyrev; | +-----------+ 10413d1364aSspupyrev; | | 10513d1364aSspupyrev; | v 10613d1364aSspupyrev; | +-----------+ 10713d1364aSspupyrev; +-----------> | b27 [?] | -+ 10813d1364aSspupyrev; +-----------+ | 10913d1364aSspupyrev; | | 11013d1364aSspupyrev; v | 11113d1364aSspupyrev; +-----------+ | 11213d1364aSspupyrev; | b28 [?] | | 11313d1364aSspupyrev; +-----------+ | 11413d1364aSspupyrev; | | 11513d1364aSspupyrev; v | 11613d1364aSspupyrev; +-----------+ | 11713d1364aSspupyrev; | b29 [?] | <+ 11813d1364aSspupyrev; +-----------+ 11913d1364aSspupyrev 12013d1364aSspupyrevdefine dso_local i32 @foo2(i32 %0, i32 %1) #0 { 12113d1364aSspupyrevb21: 12213d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 1, i32 0, i64 -1) 12313d1364aSspupyrev %cmp = icmp ne i32 %0, 0 12413d1364aSspupyrev br i1 %cmp, label %b22, label %b23 125*bb6497ffSMircea Trofin; CHECK: edge %b21 -> %b22 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 126*bb6497ffSMircea Trofin; CHECK: edge %b21 -> %b23 probability is 0x00000000 / 0x80000000 = 0.00% 12713d1364aSspupyrev; CHECK2: - b21: float = {{.*}}, int = {{.*}}, count = 128 12813d1364aSspupyrev 12913d1364aSspupyrevb22: 13013d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 2, i32 0, i64 -1) 13113d1364aSspupyrev br label %b23 13213d1364aSspupyrev 13313d1364aSspupyrevb23: 13413d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 3, i32 0, i64 -1) 13513d1364aSspupyrev br i1 %cmp, label %b24, label %b26 136*bb6497ffSMircea Trofin; CHECK: edge %b23 -> %b24 probability is 0x80000000 / 0x80000000 = 100.00% [HOT edge] 137*bb6497ffSMircea Trofin; CHECK: edge %b23 -> %b26 probability is 0x00000000 / 0x80000000 = 0.00% 13813d1364aSspupyrev; CHECK2: - b23: float = {{.*}}, int = {{.*}}, count = 128 13913d1364aSspupyrev 14013d1364aSspupyrevb24: 14113d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 4, i32 0, i64 -1) 14213d1364aSspupyrev br i1 %cmp, label %b25, label %b26 143*bb6497ffSMircea Trofin; CHECK: edge %b24 -> %b25 probability is 0x40000000 / 0x80000000 = 50.00% 144*bb6497ffSMircea Trofin; CHECK: edge %b24 -> %b26 probability is 0x40000000 / 0x80000000 = 50.00% 14513d1364aSspupyrev 14613d1364aSspupyrevb25: 14713d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 5, i32 0, i64 -1) 14813d1364aSspupyrev br label %b27 14913d1364aSspupyrev; CHECK2: - b25: float = {{.*}}, int = {{.*}}, count = 64 15013d1364aSspupyrev 15113d1364aSspupyrevb26: 15213d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 6, i32 0, i64 -1) 15313d1364aSspupyrev br label %b27 15413d1364aSspupyrev; CHECK2: - b26: float = {{.*}}, int = {{.*}}, count = 64 15513d1364aSspupyrev 15613d1364aSspupyrevb27: 15713d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 7, i32 0, i64 -1) 15813d1364aSspupyrev br i1 %cmp, label %b28, label %b29 159*bb6497ffSMircea Trofin; CHECK: edge %b27 -> %b28 probability is 0x40000000 / 0x80000000 = 50.00% 160*bb6497ffSMircea Trofin; CHECK: edge %b27 -> %b29 probability is 0x40000000 / 0x80000000 = 50.00% 16113d1364aSspupyrev; CHECK2: - b27: float = {{.*}}, int = {{.*}}, count = 128 16213d1364aSspupyrev 16313d1364aSspupyrevb28: 16413d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 8, i32 0, i64 -1) 16513d1364aSspupyrev br label %b29 16613d1364aSspupyrev; CHECK2: - b28: float = {{.*}}, int = {{.*}}, count = 64 16713d1364aSspupyrev 16813d1364aSspupyrevb29: 16913d1364aSspupyrev call void @llvm.pseudoprobe(i64 2494702099028631698, i64 9, i32 0, i64 -1) 17013d1364aSspupyrev ret i32 %1 17113d1364aSspupyrev; CHECK2: - b29: float = {{.*}}, int = {{.*}}, count = 128 17213d1364aSspupyrev} 17313d1364aSspupyrev 17413d1364aSspupyrev 17513d1364aSspupyrev; The test verifies a flexible mode of rebalancing in which some jumps to known 17613d1364aSspupyrev; basic blocks are ignored. 17713d1364aSspupyrev; 17813d1364aSspupyrev; +------------+ 17913d1364aSspupyrev; | b31 [500] | 18013d1364aSspupyrev; +------------+ 18113d1364aSspupyrev; | 18213d1364aSspupyrev; v 18313d1364aSspupyrev; +---------+ +------------+ 18413d1364aSspupyrev; | b33 [?] | <-- | b32 [1500] | <-----+ 18513d1364aSspupyrev; +---------+ +------------+ | 18613d1364aSspupyrev; | | | 18713d1364aSspupyrev; | v | 18813d1364aSspupyrev; | +------------+ +-----------+ 18913d1364aSspupyrev; | | b34 [1200] | --> | b36 [900] | 19013d1364aSspupyrev; | +------------+ +-----------+ 19113d1364aSspupyrev; | | 19213d1364aSspupyrev; | v 19313d1364aSspupyrev; | +------------+ 19413d1364aSspupyrev; | | b35 [?] | 19513d1364aSspupyrev; | +------------+ 19613d1364aSspupyrev; | | 19713d1364aSspupyrev; | v 19813d1364aSspupyrev; | +------------+ 19913d1364aSspupyrev; +-----------> | b37 [?] | -+ 20013d1364aSspupyrev; +------------+ | 20113d1364aSspupyrev; | | 20213d1364aSspupyrev; v | 20313d1364aSspupyrev; +------------+ | 20413d1364aSspupyrev; | b38 [?] | | 20513d1364aSspupyrev; +------------+ | 20613d1364aSspupyrev; | | 20713d1364aSspupyrev; v | 20813d1364aSspupyrev; +------------+ | 20913d1364aSspupyrev; | b39 [500] | <+ 21013d1364aSspupyrev; +------------+ 21113d1364aSspupyrev; 21213d1364aSspupyrev 21313d1364aSspupyrevdefine dso_local i32 @foo3(i32 %0, i32 %1) #0 { 21413d1364aSspupyrevb31: 21513d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 1, i32 0, i64 -1) 21613d1364aSspupyrev %cmp = icmp ne i32 %0, 0 21713d1364aSspupyrev br label %b32 21813d1364aSspupyrev; CHECK2: - b31: float = {{.*}}, int = {{.*}}, count = 500 21913d1364aSspupyrev 22013d1364aSspupyrevb32: 22113d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 2, i32 0, i64 -1) 22213d1364aSspupyrev br i1 %cmp, label %b33, label %b34 223*bb6497ffSMircea Trofin; CHECK: edge %b32 -> %b33 probability is 0x1999999a / 0x80000000 = 20.00% 224*bb6497ffSMircea Trofin; CHECK: edge %b32 -> %b34 probability is 0x66666666 / 0x80000000 = 80.00% 22513d1364aSspupyrev; CHECK2: - b32: float = {{.*}}, int = {{.*}}, count = 1500 22613d1364aSspupyrev 22713d1364aSspupyrevb33: 22813d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 3, i32 0, i64 -1) 22913d1364aSspupyrev br label %b37 23013d1364aSspupyrev; CHECK2: - b33: float = {{.*}}, int = {{.*}}, count = 300 23113d1364aSspupyrev 23213d1364aSspupyrevb34: 23313d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 4, i32 0, i64 -1) 23413d1364aSspupyrev br i1 %cmp, label %b35, label %b36 235*bb6497ffSMircea Trofin; CHECK: edge %b34 -> %b35 probability is 0x15555555 / 0x80000000 = 16.67% 236*bb6497ffSMircea Trofin; CHECK: edge %b34 -> %b36 probability is 0x6aaaaaab / 0x80000000 = 83.33% [HOT edge] 23713d1364aSspupyrev; CHECK2: - b34: float = {{.*}}, int = {{.*}}, count = 1200 23813d1364aSspupyrev 23913d1364aSspupyrevb35: 24013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 5, i32 0, i64 -1) 24113d1364aSspupyrev br label %b37 24213d1364aSspupyrev; CHECK2: - b35: float = {{.*}}, int = {{.*}}, count = 200 24313d1364aSspupyrev 24413d1364aSspupyrevb36: 24513d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 6, i32 0, i64 -1) 24613d1364aSspupyrev br label %b32 24713d1364aSspupyrev; CHECK2: - b36: float = {{.*}}, int = {{.*}}, count = 1000 24813d1364aSspupyrev 24913d1364aSspupyrevb37: 25013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 7, i32 0, i64 -1) 25113d1364aSspupyrev br i1 %cmp, label %b38, label %b39 252*bb6497ffSMircea Trofin; CHECK: edge %b37 -> %b38 probability is 0x40000000 / 0x80000000 = 50.00% 253*bb6497ffSMircea Trofin; CHECK: edge %b37 -> %b39 probability is 0x40000000 / 0x80000000 = 50.00% 25413d1364aSspupyrev; CHECK2: - b37: float = {{.*}}, int = {{.*}}, count = 500 25513d1364aSspupyrev 25613d1364aSspupyrevb38: 25713d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 8, i32 0, i64 -1) 25813d1364aSspupyrev br label %b39 25913d1364aSspupyrev; CHECK2: - b38: float = {{.*}}, int = {{.*}}, count = 250 26013d1364aSspupyrev 26113d1364aSspupyrevb39: 26213d1364aSspupyrev call void @llvm.pseudoprobe(i64 -7908226060800700466, i64 9, i32 0, i64 -1) 26313d1364aSspupyrev ret i32 %1 26413d1364aSspupyrev; CHECK2: - b39: float = {{.*}}, int = {{.*}}, count = 500 26513d1364aSspupyrev} 26613d1364aSspupyrev 26713d1364aSspupyrev 26813d1364aSspupyrev; The test verifies that flow rebalancer can ignore 'unlikely' jumps. 26913d1364aSspupyrev; 27013d1364aSspupyrev; +-----------+ 27113d1364aSspupyrev; | b41 [400] | -+ 27213d1364aSspupyrev; +-----------+ | 27313d1364aSspupyrev; | | 27413d1364aSspupyrev; | | 27513d1364aSspupyrev; v | 27613d1364aSspupyrev; +-----------+ | 27713d1364aSspupyrev; | b42 [?] | | 27813d1364aSspupyrev; +-----------+ | 27913d1364aSspupyrev; | | 28013d1364aSspupyrev; | | 28113d1364aSspupyrev; v v 28213d1364aSspupyrev; +---------++---------+ +---------------------------+ +---------++---------+ 28313d1364aSspupyrev; | b48 [?] || b46 [?] | <-- | | --> | b47 [?] || b49 [?] | 28413d1364aSspupyrev; +---------++---------+ | | +---------++---------+ 28513d1364aSspupyrev; | ^ | | | | ^ 28613d1364aSspupyrev; | | | | b43 [400] | | | 28713d1364aSspupyrev; | +-------+-------------| | | | 28813d1364aSspupyrev; | | | | | | 28913d1364aSspupyrev; | | | | ------+----------+ 29013d1364aSspupyrev; | | +---------------------------+ | 29113d1364aSspupyrev; | | | | | 29213d1364aSspupyrev; | | | | | 29313d1364aSspupyrev; | | v v | 29413d1364aSspupyrev; | | +-----------+ +---------+ | 29513d1364aSspupyrev; | | | b44 [?] | | b45 [?] | | 29613d1364aSspupyrev; | | +-----------+ +---------+ | 29713d1364aSspupyrev; | | | | | 29813d1364aSspupyrev; | | | | | 29913d1364aSspupyrev; | | v v | 30013d1364aSspupyrev; | | +---------------------------+ | 30113d1364aSspupyrev; | +-----------> | | <-----+ 30213d1364aSspupyrev; | | b410 [400] | 30313d1364aSspupyrev; | | | 30413d1364aSspupyrev; +----------------------> | | 30513d1364aSspupyrev; +---------------------------+ 30613d1364aSspupyrev 30713d1364aSspupyrev 30813d1364aSspupyrevdefine dso_local void @foo4(i32 %0, i32 %1) #0 { 30913d1364aSspupyrevb41: 31013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 1, i32 0, i64 -1) 31113d1364aSspupyrev %cmp = icmp ne i32 %0, 0 31213d1364aSspupyrev br i1 %cmp, label %b42, label %b43 313*bb6497ffSMircea Trofin; CHECK: edge %b41 -> %b42 probability is 0x40000000 / 0x80000000 = 50.00% 314*bb6497ffSMircea Trofin; CHECK: edge %b41 -> %b43 probability is 0x40000000 / 0x80000000 = 50.00% 31513d1364aSspupyrev; CHECK2: - b41: float = {{.*}}, int = {{.*}}, count = 400 31613d1364aSspupyrev 31713d1364aSspupyrevb42: 31813d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 2, i32 0, i64 -1) 31913d1364aSspupyrev br label %b43 32013d1364aSspupyrev; CHECK2: - b42: float = {{.*}}, int = {{.*}}, count = 200 32113d1364aSspupyrev 32213d1364aSspupyrevb43: 32313d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 3, i32 0, i64 -1) 32413d1364aSspupyrev switch i32 %1, label %b49 [ 32513d1364aSspupyrev i32 1, label %b44 32613d1364aSspupyrev i32 2, label %b45 32713d1364aSspupyrev i32 3, label %b46 32813d1364aSspupyrev i32 4, label %b47 32913d1364aSspupyrev i32 5, label %b48 33013d1364aSspupyrev ] 331*bb6497ffSMircea Trofin; CHECK: edge %b43 -> %b49 probability is 0x00000000 / 0x80000000 = 0.00% 332*bb6497ffSMircea Trofin; CHECK: edge %b43 -> %b44 probability is 0x1999999a / 0x80000000 = 20.00% 333*bb6497ffSMircea Trofin; CHECK: edge %b43 -> %b45 probability is 0x1999999a / 0x80000000 = 20.00% 334*bb6497ffSMircea Trofin; CHECK: edge %b43 -> %b46 probability is 0x1999999a / 0x80000000 = 20.00% 335*bb6497ffSMircea Trofin; CHECK: edge %b43 -> %b47 probability is 0x1999999a / 0x80000000 = 20.00% 336*bb6497ffSMircea Trofin; CHECK: edge %b43 -> %b48 probability is 0x1999999a / 0x80000000 = 20.00% 33713d1364aSspupyrev; CHECK2: - b43: float = {{.*}}, int = {{.*}}, count = 400 33813d1364aSspupyrev 33913d1364aSspupyrevb44: 34013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 4, i32 0, i64 -1) 34113d1364aSspupyrev br label %b410 34213d1364aSspupyrev; CHECK2: - b44: float = {{.*}}, int = {{.*}}, count = 80 34313d1364aSspupyrev 34413d1364aSspupyrevb45: 34513d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 5, i32 0, i64 -1) 34613d1364aSspupyrev br label %b410 34713d1364aSspupyrev; CHECK2: - b45: float = {{.*}}, int = {{.*}}, count = 80 34813d1364aSspupyrev 34913d1364aSspupyrevb46: 35013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 6, i32 0, i64 -1) 35113d1364aSspupyrev br label %b410 35213d1364aSspupyrev; CHECK2: - b46: float = {{.*}}, int = {{.*}}, count = 80 35313d1364aSspupyrev 35413d1364aSspupyrevb47: 35513d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 7, i32 0, i64 -1) 35613d1364aSspupyrev br label %b410 35713d1364aSspupyrev; CHECK2: - b47: float = {{.*}}, int = {{.*}}, count = 80 35813d1364aSspupyrev 35913d1364aSspupyrevb48: 36013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 8, i32 0, i64 -1) 36113d1364aSspupyrev br label %b410 36213d1364aSspupyrev; CHECK2: - b48: float = {{.*}}, int = {{.*}}, count = 80 36313d1364aSspupyrev 36413d1364aSspupyrevb49: 36513d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 9, i32 0, i64 -1) 36613d1364aSspupyrev unreachable 36713d1364aSspupyrev; CHECK2: - b49: float = {{.*}}, int = {{.*}}, count = 0 36813d1364aSspupyrev 36913d1364aSspupyrevb410: 37013d1364aSspupyrev call void @llvm.pseudoprobe(i64 -6882312132165544686, i64 10, i32 0, i64 -1) 37113d1364aSspupyrev ret void 37213d1364aSspupyrev; CHECK2: - b410: float = {{.*}}, int = {{.*}}, count = 400 37313d1364aSspupyrev} 37413d1364aSspupyrev 37513d1364aSspupyrev 37613d1364aSspupyrev; Function Attrs: inaccessiblememonly nounwind willreturn 37713d1364aSspupyrevdeclare void @llvm.pseudoprobe(i64, i64, i32, i64) #4 37813d1364aSspupyrev 37913d1364aSspupyrevattributes #0 = { noinline nounwind uwtable "use-sample-profile" } 38013d1364aSspupyrevattributes #4 = { inaccessiblememonly nounwind willreturn } 38113d1364aSspupyrev 38213d1364aSspupyrev!llvm.pseudo_probe_desc = !{!7, !8, !9, !10} 38313d1364aSspupyrev 38413d1364aSspupyrev!7 = !{i64 7682762345278052905, i64 157181141624, !"foo1", null} 38513d1364aSspupyrev!8 = !{i64 2494702099028631698, i64 208782362068, !"foo2", null} 38613d1364aSspupyrev!9 = !{i64 -7908226060800700466, i64 189901498683, !"foo3", null} 38713d1364aSspupyrev!10 = !{i64 -6882312132165544686, i64 241030178952, !"foo4", null} 388