1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2; RUN: opt < %s -passes='function(lower-allow-check)' -S | FileCheck %s --check-prefixes=NOPROFILE 3; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=0 -S | FileCheck %s --check-prefixes=NONE 4; RUN: opt < %s -passes='function(lower-allow-check)' -lower-allow-check-random-rate=1 -S | FileCheck %s --check-prefixes=ALL 5; 6; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=990000>)' -S | FileCheck %s --check-prefixes=HOT99 7; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check<cutoffs[22]=700000>)' -S | FileCheck %s --check-prefixes=HOT70 8; 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=NONE99 9; 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=ALL70 10; 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=HOT99 14; RUN: opt < %s -passes='require<profile-summary>,function(lower-allow-check)' -lower-allow-check-percentile-cutoff-hot=700000 -S | FileCheck %s --check-prefixes=HOT70 15; 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=NONE99 16; 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=ALL70 17 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]], null 27; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true 28; 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: unreachable 33; NOPROFILE: 4: 34; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 35; 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]], null 40; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true 41; 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: unreachable 46; NONE: 4: 47; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 48; 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]], null 53; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true 54; 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: unreachable 59; ALL: 4: 60; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 61; 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]], null 66; HOT99-NEXT: [[HOT:%.*]] = xor i1 true, true 67; 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: unreachable 72; HOT99: 4: 73; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 74; 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]], null 79; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true 80; 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: unreachable 85; HOT70: 4: 86; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 87; 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]], null 92; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true 93; 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: unreachable 98; NONE99: 4: 99; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 100; 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]], null 105; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true 106; 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: unreachable 111; ALL70: 4: 112; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 113; ALL70-NEXT: ret i32 [[TMP5]] 114; 115 %chk = icmp eq ptr %0, null 116 %allow = call i1 @llvm.allow.ubsan.check(i8 22) 117 %hot = xor i1 %allow, true 118 %2 = or i1 %chk, %hot 119 br i1 %2, label %3, label %4 120 1213: 122 tail call void @llvm.ubsantrap(i8 22) 123 unreachable 124 1254: 126 %5 = load i32, ptr %0, align 4 127 ret i32 %5 128} 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]], null 135; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true 136; 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: unreachable 141; NOPROFILE: 4: 142; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 143; 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]], null 148; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true 149; 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: unreachable 154; NONE: 4: 155; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 156; 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]], null 161; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true 162; 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: unreachable 167; ALL: 4: 168; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 169; 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]], null 174; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true 175; 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: unreachable 180; HOT99: 4: 181; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 182; 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]], null 187; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true 188; 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: unreachable 193; HOT70: 4: 194; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 195; 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]], null 200; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true 201; 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: unreachable 206; NONE99: 4: 207; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 208; 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]], null 213; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true 214; 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: unreachable 219; ALL70: 4: 220; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 221; ALL70-NEXT: ret i32 [[TMP5]] 222; 223 %chk = icmp eq ptr %0, null 224 %allow = call i1 @llvm.allow.ubsan.check(i8 22) 225 %hot = xor i1 %allow, true 226 %2 = or i1 %chk, %hot 227 br i1 %2, label %3, label %4 228 2293: 230 tail call void @llvm.ubsantrap(i8 22) 231 unreachable 232 2334: 234 %5 = load i32, ptr %0, align 4 235 ret i32 %5 236} 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]], null 242; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true 243; 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: unreachable 248; NOPROFILE: 4: 249; NOPROFILE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 250; 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]], null 255; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true 256; 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: unreachable 261; NONE: 4: 262; NONE-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 263; 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]], null 268; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true 269; 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: unreachable 274; ALL: 4: 275; ALL-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 276; 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]], null 281; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true 282; 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: unreachable 287; HOT99: 4: 288; HOT99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 289; 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]], null 294; HOT70-NEXT: [[HOT:%.*]] = xor i1 false, true 295; 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: unreachable 300; HOT70: 4: 301; HOT70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 302; 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]], null 307; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true 308; 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: unreachable 313; NONE99: 4: 314; NONE99-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 315; 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]], null 320; ALL70-NEXT: [[HOT:%.*]] = xor i1 false, true 321; 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: unreachable 326; ALL70: 4: 327; ALL70-NEXT: [[TMP5:%.*]] = load i32, ptr [[TMP0]], align 4 328; ALL70-NEXT: ret i32 [[TMP5]] 329; 330 %chk = icmp eq ptr %0, null 331 %allow = call i1 @llvm.allow.ubsan.check(i8 22) 332 %hot = xor i1 %allow, true 333 %2 = or i1 %chk, %hot 334 br i1 %2, label %3, label %4 335 3363: 337 tail call void @llvm.ubsantrap(i8 22) 338 unreachable 339 3404: 341 %5 = load i32, ptr %0, align 4 342 ret i32 %5 343} 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]], 0 350; NOPROFILE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 351; NOPROFILE: 4: 352; NOPROFILE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 353; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true 354; 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: unreachable 359; NOPROFILE: 7: 360; NOPROFILE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 361; 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]], 0 369; NONE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 370; NONE: 4: 371; NONE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 372; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true 373; 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: unreachable 378; NONE: 7: 379; NONE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 380; 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]], 0 388; ALL-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 389; ALL: 4: 390; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null 391; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true 392; 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: unreachable 397; ALL: 7: 398; ALL-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 399; 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]], 0 407; HOT99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 408; HOT99: 4: 409; HOT99-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 410; HOT99-NEXT: [[HOT:%.*]] = xor i1 true, true 411; 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: unreachable 416; HOT99: 7: 417; HOT99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 418; 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]], 0 426; HOT70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 427; HOT70: 4: 428; HOT70-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 429; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true 430; 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: unreachable 435; HOT70: 7: 436; HOT70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 437; 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]], 0 445; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 446; NONE99: 4: 447; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null 448; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true 449; 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: unreachable 454; NONE99: 7: 455; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 456; 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]], 0 464; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF18:![0-9]+]] 465; ALL70: 4: 466; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null 467; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true 468; 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: unreachable 473; ALL70: 7: 474; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 475; 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, 0 481 br i1 %3, label %9, label %4, !prof !38 482 4834: 484 %chk = icmp eq ptr %1, null 485 %allow = call i1 @llvm.allow.ubsan.check(i8 22) 486 %hot = xor i1 %allow, true 487 %5 = or i1 %chk, %hot 488 br i1 %5, label %6, label %7 489 4906: 491 tail call void @llvm.ubsantrap(i8 22) #2 492 unreachable 493 4947: 495 %8 = load i32, ptr %1, align 4 496 br label %9 497 4989: 499 %10 = phi i32 [ %8, %7 ], [ 0, %2 ] 500 ret i32 %10 501} 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]], 0 507; NOPROFILE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 508; NOPROFILE: 4: 509; NOPROFILE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 510; NOPROFILE-NEXT: [[HOT:%.*]] = xor i1 true, true 511; 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: unreachable 516; NOPROFILE: 7: 517; NOPROFILE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 518; 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]], 0 526; NONE-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 527; NONE: 4: 528; NONE-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 529; NONE-NEXT: [[HOT:%.*]] = xor i1 false, true 530; 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: unreachable 535; NONE: 7: 536; NONE-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 537; 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]], 0 545; ALL-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 546; ALL: 4: 547; ALL-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null 548; ALL-NEXT: [[HOT:%.*]] = xor i1 true, true 549; 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: unreachable 554; ALL: 7: 555; ALL-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 556; 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]], 0 564; HOT99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 565; HOT99: 4: 566; HOT99-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 567; HOT99-NEXT: [[HOT:%.*]] = xor i1 false, true 568; 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: unreachable 573; HOT99: 7: 574; HOT99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 575; 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]], 0 583; HOT70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 584; HOT70: 4: 585; HOT70-NEXT: [[TMP5:%.*]] = icmp eq ptr [[TMP1]], null 586; HOT70-NEXT: [[HOT:%.*]] = xor i1 true, true 587; 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: unreachable 592; HOT70: 7: 593; HOT70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 594; 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]], 0 602; NONE99-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 603; NONE99: 4: 604; NONE99-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null 605; NONE99-NEXT: [[HOT:%.*]] = xor i1 false, true 606; 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: unreachable 611; NONE99: 7: 612; NONE99-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 613; 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]], 0 621; ALL70-NEXT: br i1 [[TMP3]], label [[TMP9:%.*]], label [[TMP4:%.*]], !prof [[PROF19:![0-9]+]] 622; ALL70: 4: 623; ALL70-NEXT: [[CHK:%.*]] = icmp eq ptr [[TMP1]], null 624; ALL70-NEXT: [[HOT:%.*]] = xor i1 true, true 625; 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: unreachable 630; ALL70: 7: 631; ALL70-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP1]], align 4 632; 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, 0 638 br i1 %3, label %9, label %4, !prof !37 639 6404: 641 %chk = icmp eq ptr %1, null 642 %allow = call i1 @llvm.allow.ubsan.check(i8 22) 643 %hot = xor i1 %allow, true 644 %5 = or i1 %chk, %hot 645 br i1 %5, label %6, label %7 646 6476: 648 tail call void @llvm.ubsantrap(i8 22) #2 649 unreachable 650 6517: 652 %8 = load i32, ptr %1, align 4 653 br label %9 654 6559: 656 %10 = phi i32 [ %8, %7 ], [ 0, %2 ] 657 ret i32 %10 658} 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