720 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes='function(lower-allow-check)' -S | FileCheck %s --check-prefixes=NOPROFILE3; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=0 -S | FileCheck %s --check-prefixes=NONE4; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=1 -S | FileCheck %s --check-prefixes=ALL5;6; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=990000>)' -S | FileCheck %s --check-prefixes=HOT997; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=700000>)' -S | FileCheck %s --check-prefixes=HOT708; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=990000>)' -lower-allow-check-random-rate=0 -S | FileCheck %s --check-prefixes=NONE999; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=700000>)' -lower-allow-check-random-rate=1 -S | FileCheck %s --check-prefixes=ALL7010;11; -lower-allow-check-percentile-cutoff is deprecated and will be removed in the future;12; use the cutoffs parameter to the lower-allow-check pass, as shown above.13; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=990000 -S | FileCheck %s --check-prefixes=HOT9914; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=HOT7015; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-random-rate=0 -lower-allow-check-percentile-cutoff-hot=990000 -S | FileCheck %s --check-prefixes=NONE9916; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-random-rate=1 -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=ALL7017 18target triple = "x86_64-pc-linux-gnu"19 20declare void @llvm.ubsantrap(i8 immarg)21declare i1 @llvm.allow.ubsan.check(i8 immarg)22 23define dso_local noundef i32 @simple(ptr noundef readonly %0) {24; NOPROFILE-LABEL: define dso_local noundef i32 @simple(25; NOPROFILE-SAME: ptr noundef readonly [[TMP0:%.*]]) {26; NOPROFILE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null27; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true28; NOPROFILE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]29; NOPROFILE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]30; NOPROFILE: 3:31; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)32; NOPROFILE-NEXT: unreachable33; NOPROFILE: 4:34; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 435; NOPROFILE-NEXT: ret i32 [[TMP5]]36;37; NONE-LABEL: define dso_local noundef i32 @simple(38; NONE-SAME: ptr noundef readonly [[TMP0:%.*]]) {39; NONE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null40; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true41; NONE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]42; NONE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]43; NONE: 3:44; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)45; NONE-NEXT: unreachable46; NONE: 4:47; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 448; NONE-NEXT: ret i32 [[TMP5]]49;50; ALL-LABEL: define dso_local noundef i32 @simple(51; ALL-SAME: ptr noundef readonly [[TMP0:%.*]]) {52; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null53; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true54; ALL-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]55; ALL-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]56; ALL: 3:57; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)58; ALL-NEXT: unreachable59; ALL: 4:60; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 461; ALL-NEXT: ret i32 [[TMP5]]62;63; HOT99-LABEL: define dso_local noundef i32 @simple(64; HOT99-SAME: ptr noundef readonly [[TMP0:%.*]]) {65; HOT99-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null66; HOT99-NEXT: [[HOT:%.*]] = xor i1 true, true67; HOT99-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]68; HOT99-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]69; HOT99: 3:70; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)71; HOT99-NEXT: unreachable72; HOT99: 4:73; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 474; HOT99-NEXT: ret i32 [[TMP5]]75;76; HOT70-LABEL: define dso_local noundef i32 @simple(77; HOT70-SAME: ptr noundef readonly [[TMP0:%.*]]) {78; HOT70-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null79; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true80; HOT70-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]81; HOT70-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]82; HOT70: 3:83; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)84; HOT70-NEXT: unreachable85; HOT70: 4:86; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 487; HOT70-NEXT: ret i32 [[TMP5]]88;89; NONE99-LABEL: define dso_local noundef i32 @simple(90; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) {91; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null92; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true93; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]94; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]95; NONE99: 3:96; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)97; NONE99-NEXT: unreachable98; NONE99: 4:99; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4100; NONE99-NEXT: ret i32 [[TMP5]]101;102; ALL70-LABEL: define dso_local noundef i32 @simple(103; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) {104; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null105; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true106; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]107; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]108; ALL70: 3:109; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)110; ALL70-NEXT: unreachable111; ALL70: 4:112; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4113; ALL70-NEXT: ret i32 [[TMP5]]114;115 %chk = icmp eq ptr %0, null116 %allow = call i1 @llvm.allow.ubsan.check(i8 22)117 %hot = xor i1 %allow, true118 %2 = or i1 %chk, %hot119 br i1 %2, label %3, label %4120 1213:122 tail call void @llvm.ubsantrap(i8 22)123 unreachable124 1254:126 %5 = load i32, ptr %0, align 4127 ret i32 %5128}129 130 131define dso_local noundef i32 @hot(ptr noundef readonly %0) !prof !36 {132; NOPROFILE-LABEL: define dso_local noundef i32 @hot(133; NOPROFILE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {134; NOPROFILE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null135; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true136; NOPROFILE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]137; NOPROFILE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]138; NOPROFILE: 3:139; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)140; NOPROFILE-NEXT: unreachable141; NOPROFILE: 4:142; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4143; NOPROFILE-NEXT: ret i32 [[TMP5]]144;145; NONE-LABEL: define dso_local noundef i32 @hot(146; NONE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {147; NONE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null148; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true149; NONE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]150; NONE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]151; NONE: 3:152; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)153; NONE-NEXT: unreachable154; NONE: 4:155; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4156; NONE-NEXT: ret i32 [[TMP5]]157;158; ALL-LABEL: define dso_local noundef i32 @hot(159; ALL-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {160; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null161; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true162; ALL-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]163; ALL-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]164; ALL: 3:165; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)166; ALL-NEXT: unreachable167; ALL: 4:168; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4169; ALL-NEXT: ret i32 [[TMP5]]170;171; HOT99-LABEL: define dso_local noundef i32 @hot(172; HOT99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {173; HOT99-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null174; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true175; HOT99-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]176; HOT99-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]177; HOT99: 3:178; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)179; HOT99-NEXT: unreachable180; HOT99: 4:181; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4182; HOT99-NEXT: ret i32 [[TMP5]]183;184; HOT70-LABEL: define dso_local noundef i32 @hot(185; HOT70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {186; HOT70-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null187; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true188; HOT70-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]189; HOT70-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]190; HOT70: 3:191; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)192; HOT70-NEXT: unreachable193; HOT70: 4:194; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4195; HOT70-NEXT: ret i32 [[TMP5]]196;197; NONE99-LABEL: define dso_local noundef i32 @hot(198; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {199; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null200; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true201; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]202; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]203; NONE99: 3:204; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)205; NONE99-NEXT: unreachable206; NONE99: 4:207; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4208; NONE99-NEXT: ret i32 [[TMP5]]209;210; ALL70-LABEL: define dso_local noundef i32 @hot(211; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF16:![0-9]+]] {212; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null213; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true214; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]215; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]216; ALL70: 3:217; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)218; ALL70-NEXT: unreachable219; ALL70: 4:220; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4221; ALL70-NEXT: ret i32 [[TMP5]]222;223 %chk = icmp eq ptr %0, null224 %allow = call i1 @llvm.allow.ubsan.check(i8 22)225 %hot = xor i1 %allow, true226 %2 = or i1 %chk, %hot227 br i1 %2, label %3, label %4228 2293:230 tail call void @llvm.ubsantrap(i8 22)231 unreachable232 2334:234 %5 = load i32, ptr %0, align 4235 ret i32 %5236}237 238define dso_local noundef i32 @veryHot(ptr noundef readonly %0) !prof !39 {239; NOPROFILE-LABEL: define dso_local noundef i32 @veryHot(240; NOPROFILE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {241; NOPROFILE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null242; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true243; NOPROFILE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]244; NOPROFILE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]245; NOPROFILE: 3:246; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)247; NOPROFILE-NEXT: unreachable248; NOPROFILE: 4:249; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4250; NOPROFILE-NEXT: ret i32 [[TMP5]]251;252; NONE-LABEL: define dso_local noundef i32 @veryHot(253; NONE-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {254; NONE-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null255; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true256; NONE-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]257; NONE-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]258; NONE: 3:259; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)260; NONE-NEXT: unreachable261; NONE: 4:262; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4263; NONE-NEXT: ret i32 [[TMP5]]264;265; ALL-LABEL: define dso_local noundef i32 @veryHot(266; ALL-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {267; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null268; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true269; ALL-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]270; ALL-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]271; ALL: 3:272; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)273; ALL-NEXT: unreachable274; ALL: 4:275; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4276; ALL-NEXT: ret i32 [[TMP5]]277;278; HOT99-LABEL: define dso_local noundef i32 @veryHot(279; HOT99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {280; HOT99-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null281; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true282; HOT99-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]283; HOT99-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]284; HOT99: 3:285; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)286; HOT99-NEXT: unreachable287; HOT99: 4:288; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4289; HOT99-NEXT: ret i32 [[TMP5]]290;291; HOT70-LABEL: define dso_local noundef i32 @veryHot(292; HOT70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {293; HOT70-NEXT: [[TMP2:%.*]] = icmp eq ptr [[TMP0]], null294; HOT70-NEXT: [[HOT:%.*]] = xor i1 false, true295; HOT70-NEXT: [[TMP6:%.*]] = or i1 [[TMP2]], [[HOT]]296; HOT70-NEXT: br i1 [[TMP6]], label [[TMP3:%.*]], label [[TMP4:%.*]]297; HOT70: 3:298; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)299; HOT70-NEXT: unreachable300; HOT70: 4:301; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4302; HOT70-NEXT: ret i32 [[TMP5]]303;304; NONE99-LABEL: define dso_local noundef i32 @veryHot(305; NONE99-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {306; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null307; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true308; NONE99-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]309; NONE99-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]310; NONE99: 3:311; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)312; NONE99-NEXT: unreachable313; NONE99: 4:314; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4315; NONE99-NEXT: ret i32 [[TMP5]]316;317; ALL70-LABEL: define dso_local noundef i32 @veryHot(318; ALL70-SAME: ptr noundef readonly [[TMP0:%.*]]) !prof [[PROF17:![0-9]+]] {319; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP0]], null320; ALL70-NEXT: [[HOT:%.*]] = xor i1 false, true321; ALL70-NEXT: [[TMP2:%.*]] = or i1 [[CHK]], [[HOT]]322; ALL70-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]]323; ALL70: 3:324; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)325; ALL70-NEXT: unreachable326; ALL70: 4:327; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4328; ALL70-NEXT: ret i32 [[TMP5]]329;330 %chk = icmp eq ptr %0, null331 %allow = call i1 @llvm.allow.ubsan.check(i8 22)332 %hot = xor i1 %allow, true333 %2 = or i1 %chk, %hot334 br i1 %2, label %3, label %4335 3363:337 tail call void @llvm.ubsantrap(i8 22)338 unreachable339 3404:341 %5 = load i32, ptr %0, align 4342 ret i32 %5343}344 345 346define dso_local noundef i32 @branchColdFnHot(i32 noundef %0, ptr noundef readonly %1) !prof !39 {347; NOPROFILE-LABEL: define dso_local noundef i32 @branchColdFnHot(348; NOPROFILE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {349; NOPROFILE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0350; NOPROFILE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]351; NOPROFILE: 4:352; NOPROFILE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null353; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true354; NOPROFILE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]355; NOPROFILE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]356; NOPROFILE: 6:357; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)358; NOPROFILE-NEXT: unreachable359; NOPROFILE: 7:360; NOPROFILE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4361; NOPROFILE-NEXT: br label [[TMP9]]362; NOPROFILE: 9:363; NOPROFILE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]364; NOPROFILE-NEXT: ret i32 [[TMP10]]365;366; NONE-LABEL: define dso_local noundef i32 @branchColdFnHot(367; NONE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {368; NONE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0369; NONE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]370; NONE: 4:371; NONE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null372; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true373; NONE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]374; NONE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]375; NONE: 6:376; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)377; NONE-NEXT: unreachable378; NONE: 7:379; NONE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4380; NONE-NEXT: br label [[TMP9]]381; NONE: 9:382; NONE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]383; NONE-NEXT: ret i32 [[TMP10]]384;385; ALL-LABEL: define dso_local noundef i32 @branchColdFnHot(386; ALL-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {387; ALL-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0388; ALL-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]389; ALL: 4:390; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null391; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true392; ALL-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]393; ALL-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]394; ALL: 6:395; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)396; ALL-NEXT: unreachable397; ALL: 7:398; ALL-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4399; ALL-NEXT: br label [[TMP9]]400; ALL: 9:401; ALL-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]402; ALL-NEXT: ret i32 [[TMP10]]403;404; HOT99-LABEL: define dso_local noundef i32 @branchColdFnHot(405; HOT99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {406; HOT99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0407; HOT99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]408; HOT99: 4:409; HOT99-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null410; HOT99-NEXT: [[HOT:%.*]] = xor i1 true, true411; HOT99-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]412; HOT99-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]413; HOT99: 6:414; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)415; HOT99-NEXT: unreachable416; HOT99: 7:417; HOT99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4418; HOT99-NEXT: br label [[TMP9]]419; HOT99: 9:420; HOT99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]421; HOT99-NEXT: ret i32 [[TMP10]]422;423; HOT70-LABEL: define dso_local noundef i32 @branchColdFnHot(424; HOT70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {425; HOT70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0426; HOT70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]427; HOT70: 4:428; HOT70-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null429; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true430; HOT70-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]431; HOT70-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]432; HOT70: 6:433; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)434; HOT70-NEXT: unreachable435; HOT70: 7:436; HOT70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4437; HOT70-NEXT: br label [[TMP9]]438; HOT70: 9:439; HOT70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]440; HOT70-NEXT: ret i32 [[TMP10]]441;442; NONE99-LABEL: define dso_local noundef i32 @branchColdFnHot(443; NONE99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {444; NONE99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0445; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]446; NONE99: 4:447; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null448; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true449; NONE99-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]450; NONE99-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]451; NONE99: 6:452; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)453; NONE99-NEXT: unreachable454; NONE99: 7:455; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4456; NONE99-NEXT: br label [[TMP9]]457; NONE99: 9:458; NONE99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]459; NONE99-NEXT: ret i32 [[TMP10]]460;461; ALL70-LABEL: define dso_local noundef i32 @branchColdFnHot(462; ALL70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF17]] {463; ALL70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0464; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]]465; ALL70: 4:466; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null467; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true468; ALL70-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]469; ALL70-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]470; ALL70: 6:471; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)472; ALL70-NEXT: unreachable473; ALL70: 7:474; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4475; ALL70-NEXT: br label [[TMP9]]476; ALL70: 9:477; ALL70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]478; ALL70-NEXT: ret i32 [[TMP10]]479;480 %3 = icmp eq i32 %0, 0481 br i1 %3, label %9, label %4, !prof !38482 4834:484 %chk = icmp eq ptr %1, null485 %allow = call i1 @llvm.allow.ubsan.check(i8 22)486 %hot = xor i1 %allow, true487 %5 = or i1 %chk, %hot488 br i1 %5, label %6, label %7489 4906:491 tail call void @llvm.ubsantrap(i8 22) #2492 unreachable493 4947:495 %8 = load i32, ptr %1, align 4496 br label %9497 4989:499 %10 = phi i32 [ %8, %7 ], [ 0, %2 ]500 ret i32 %10501}502 503define dso_local noundef i32 @branchHotFnCold(i32 noundef %0, ptr noundef readonly %1) !prof !36 {504; NOPROFILE-LABEL: define dso_local noundef i32 @branchHotFnCold(505; NOPROFILE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {506; NOPROFILE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0507; NOPROFILE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]508; NOPROFILE: 4:509; NOPROFILE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null510; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true511; NOPROFILE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]512; NOPROFILE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]513; NOPROFILE: 6:514; NOPROFILE-NEXT: tail call void @llvm.ubsantrap(i8 22)515; NOPROFILE-NEXT: unreachable516; NOPROFILE: 7:517; NOPROFILE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4518; NOPROFILE-NEXT: br label [[TMP9]]519; NOPROFILE: 9:520; NOPROFILE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]521; NOPROFILE-NEXT: ret i32 [[TMP10]]522;523; NONE-LABEL: define dso_local noundef i32 @branchHotFnCold(524; NONE-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {525; NONE-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0526; NONE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]527; NONE: 4:528; NONE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null529; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true530; NONE-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]531; NONE-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]532; NONE: 6:533; NONE-NEXT: tail call void @llvm.ubsantrap(i8 22)534; NONE-NEXT: unreachable535; NONE: 7:536; NONE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4537; NONE-NEXT: br label [[TMP9]]538; NONE: 9:539; NONE-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]540; NONE-NEXT: ret i32 [[TMP10]]541;542; ALL-LABEL: define dso_local noundef i32 @branchHotFnCold(543; ALL-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {544; ALL-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0545; ALL-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]546; ALL: 4:547; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null548; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true549; ALL-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]550; ALL-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]551; ALL: 6:552; ALL-NEXT: tail call void @llvm.ubsantrap(i8 22)553; ALL-NEXT: unreachable554; ALL: 7:555; ALL-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4556; ALL-NEXT: br label [[TMP9]]557; ALL: 9:558; ALL-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]559; ALL-NEXT: ret i32 [[TMP10]]560;561; HOT99-LABEL: define dso_local noundef i32 @branchHotFnCold(562; HOT99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {563; HOT99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0564; HOT99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]565; HOT99: 4:566; HOT99-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null567; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true568; HOT99-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]569; HOT99-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]570; HOT99: 6:571; HOT99-NEXT: tail call void @llvm.ubsantrap(i8 22)572; HOT99-NEXT: unreachable573; HOT99: 7:574; HOT99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4575; HOT99-NEXT: br label [[TMP9]]576; HOT99: 9:577; HOT99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]578; HOT99-NEXT: ret i32 [[TMP10]]579;580; HOT70-LABEL: define dso_local noundef i32 @branchHotFnCold(581; HOT70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {582; HOT70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0583; HOT70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]584; HOT70: 4:585; HOT70-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null586; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true587; HOT70-NEXT: [[TMP11:%.*]] = or i1 [[TMP5]], [[HOT]]588; HOT70-NEXT: br i1 [[TMP11]], label [[TMP6:%.*]], label [[TMP7:%.*]]589; HOT70: 6:590; HOT70-NEXT: tail call void @llvm.ubsantrap(i8 22)591; HOT70-NEXT: unreachable592; HOT70: 7:593; HOT70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4594; HOT70-NEXT: br label [[TMP9]]595; HOT70: 9:596; HOT70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]597; HOT70-NEXT: ret i32 [[TMP10]]598;599; NONE99-LABEL: define dso_local noundef i32 @branchHotFnCold(600; NONE99-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {601; NONE99-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0602; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]603; NONE99: 4:604; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null605; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true606; NONE99-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]607; NONE99-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]608; NONE99: 6:609; NONE99-NEXT: tail call void @llvm.ubsantrap(i8 22)610; NONE99-NEXT: unreachable611; NONE99: 7:612; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4613; NONE99-NEXT: br label [[TMP9]]614; NONE99: 9:615; NONE99-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]616; NONE99-NEXT: ret i32 [[TMP10]]617;618; ALL70-LABEL: define dso_local noundef i32 @branchHotFnCold(619; ALL70-SAME: i32 noundef [[TMP0:%.*]], ptr noundef readonly [[TMP1:%.*]]) !prof [[PROF16]] {620; ALL70-NEXT: [[TMP3:%.*]] = icmp eq i32 [[TMP0]], 0621; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]]622; ALL70: 4:623; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null624; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true625; ALL70-NEXT: [[TMP5:%.*]] = or i1 [[CHK]], [[HOT]]626; ALL70-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]627; ALL70: 6:628; ALL70-NEXT: tail call void @llvm.ubsantrap(i8 22)629; ALL70-NEXT: unreachable630; ALL70: 7:631; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4632; ALL70-NEXT: br label [[TMP9]]633; ALL70: 9:634; ALL70-NEXT: [[TMP10:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ 0, [[TMP2:%.*]] ]635; ALL70-NEXT: ret i32 [[TMP10]]636;637 %3 = icmp eq i32 %0, 0638 br i1 %3, label %9, label %4, !prof !37639 6404:641 %chk = icmp eq ptr %1, null642 %allow = call i1 @llvm.allow.ubsan.check(i8 22)643 %hot = xor i1 %allow, true644 %5 = or i1 %chk, %hot645 br i1 %5, label %6, label %7646 6476:648 tail call void @llvm.ubsantrap(i8 22) #2649 unreachable650 6517:652 %8 = load i32, ptr %1, align 4653 br label %9654 6559:656 %10 = phi i32 [ %8, %7 ], [ 0, %2 ]657 ret i32 %10658}659 660!llvm.module.flags = !{!6}661!6 = !{i32 1, !"ProfileSummary", !7}662!7 = !{!8, !9, !10, !11, !12, !13, !14, !17}663!8 = !{!"ProfileFormat", !"InstrProf"}664!9 = !{!"TotalCount", i64 30000}665!10 = !{!"MaxCount", i64 10000}666!11 = !{!"MaxInternalCount", i64 10000}667!12 = !{!"MaxFunctionCount", i64 10000}668!13 = !{!"NumCounts", i64 3}669!14 = !{!"NumFunctions", i64 5}670!17 = !{!"DetailedSummary", !18}671!18 = !{!19, !29, !30, !32, !34}672!19 = !{i32 10000, i64 10000, i32 3}673!29 = !{i32 950000, i64 5000, i32 3}674!30 = !{i32 990000, i64 500, i32 4}675!32 = !{i32 999900, i64 250, i32 4}676!34 = !{i32 999999, i64 1, i32 6}677 678!36 = !{!"function_entry_count", i64 1000}679!39 = !{!"function_entry_count", i64 7000}680 681!37 = !{!"branch_weights", i32 1, i32 1000}682!38 = !{!"branch_weights", i32 1000, i32 1}683 684;.685; NOPROFILE: [[PROF16]] = !{!"function_entry_count", i64 1000}686; NOPROFILE: [[PROF17]] = !{!"function_entry_count", i64 7000}687; NOPROFILE: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}688; NOPROFILE: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}689;.690; NONE: [[PROF16]] = !{!"function_entry_count", i64 1000}691; NONE: [[PROF17]] = !{!"function_entry_count", i64 7000}692; NONE: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}693; NONE: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}694;.695; ALL: [[PROF16]] = !{!"function_entry_count", i64 1000}696; ALL: [[PROF17]] = !{!"function_entry_count", i64 7000}697; ALL: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}698; ALL: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}699;.700; HOT99: [[PROF16]] = !{!"function_entry_count", i64 1000}701; HOT99: [[PROF17]] = !{!"function_entry_count", i64 7000}702; HOT99: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}703; HOT99: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}704;.705; HOT70: [[PROF16]] = !{!"function_entry_count", i64 1000}706; HOT70: [[PROF17]] = !{!"function_entry_count", i64 7000}707; HOT70: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}708; HOT70: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}709;.710; NONE99: [[PROF16]] = !{!"function_entry_count", i64 1000}711; NONE99: [[PROF17]] = !{!"function_entry_count", i64 7000}712; NONE99: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}713; NONE99: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}714;.715; ALL70: [[PROF16]] = !{!"function_entry_count", i64 1000}716; ALL70: [[PROF17]] = !{!"function_entry_count", i64 7000}717; ALL70: [[PROF18]] = !{!"branch_weights", i32 1000, i32 1}718; ALL70: [[PROF19]] = !{!"branch_weights", i32 1, i32 1000}719;.720