; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 ; RUN: opt -S -passes=hotcoldsplit < %s | FileCheck %s ; Reproducer for https://github.com/llvm/llvm-project/issues/197982 @g = external global ptr declare void @ext() define void @ctor(ptr %this) !prof !14 { ; CHECK-LABEL: define void @ctor( ; CHECK-SAME: ptr [[THIS:%.*]]) #[[ATTR0:[0-9]+]] !prof [[PROF14:![0-9]+]] { ; CHECK-NEXT: tail call void @ext() ; CHECK-NEXT: store ptr null, ptr [[THIS]], align 16 ; CHECK-NEXT: [[P:%.*]] = getelementptr i8, ptr [[THIS]], i64 16 ; CHECK-NEXT: store ptr null, ptr [[P]], align 16 ; CHECK-NEXT: store i8 0, ptr [[THIS]], align 16 ; CHECK-NEXT: tail call void @ext() ; CHECK-NEXT: store i32 0, ptr [[THIS]], align 16 ; CHECK-NEXT: ret void ; tail call void @ext() store ptr null, ptr %this, align 16 %p = getelementptr i8, ptr %this, i64 16 store ptr null, ptr %p, align 16 store i8 0, ptr %this, align 16 tail call void @ext() store i32 0, ptr %this, align 16 ret void } define void @writeAsOperandInternal(ptr %WriterCtx, i1 %cond) { ; CHECK-LABEL: define void @writeAsOperandInternal( ; CHECK-SAME: ptr [[WRITERCTX:%.*]], i1 [[COND:%.*]]) { ; CHECK-NEXT: [[ENTRY:.*]]: ; CHECK-NEXT: br i1 [[COND]], label %[[CODEREPL:.*]], label %[[IF_END:.*]] ; CHECK: [[CODEREPL]]: ; CHECK-NEXT: [[TMP0:%.*]] = call ptr @writeAsOperandInternal.cold.1() #[[ATTR1:[0-9]+]] ; CHECK-NEXT: br label %[[IF_END]] ; CHECK: [[IF_END]]: ; CHECK-NEXT: [[S_SROA_0_0:%.*]] = phi ptr [ [[TMP0]], %[[CODEREPL]] ], [ @g, %[[ENTRY]] ] ; CHECK-NEXT: [[P:%.*]] = phi ptr [ [[TMP0]], %[[CODEREPL]] ], [ @g, %[[ENTRY]] ] ; CHECK-NEXT: [[FP:%.*]] = load ptr, ptr [[WRITERCTX]], align 8 ; CHECK-NEXT: [[R:%.*]] = tail call i32 [[FP]](ptr [[P]], ptr @g) ; CHECK-NEXT: store volatile i32 0, ptr [[S_SROA_0_0]], align 4 ; CHECK-NEXT: ret void ; entry: br i1 %cond, label %if.then, label %if.end if.then: tail call void @ctor(ptr @g) %call.i = load volatile ptr, ptr @g, align 8 store volatile i32 0, ptr @g, align 4 br label %if.end if.end: %s.sroa.0.0 = phi ptr [ %call.i, %if.then ], [ @g, %entry ] %p = phi ptr [ %call.i, %if.then ], [ @g, %entry ] %fp = load ptr, ptr %WriterCtx, align 8 %r = tail call i32 %fp(ptr %p, ptr @g) store volatile i32 0, ptr %s.sroa.0.0, align 4 ret void } !llvm.module.flags = !{!0} !0 = !{i32 1, !"ProfileSummary", !1} !1 = !{!2, !3, !4, !5, !6, !7, !8, !9, !10, !11} !2 = !{!"ProfileFormat", !"InstrProf"} !3 = !{!"TotalCount", i64 436329363820} !4 = !{!"MaxCount", i64 7373450795} !5 = !{!"MaxInternalCount", i64 502022957} !6 = !{!"MaxFunctionCount", i64 7373450795} !7 = !{!"NumCounts", i64 3070596} !8 = !{!"NumFunctions", i64 874091} !9 = !{!"IsPartialProfile", i64 0} !10 = !{!"PartialProfileRatio", double 0.000000e+00} !11 = !{!"DetailedSummary", !12} !12 = !{!13} !13 = !{i32 999999, i64 24, i32 423785} !14 = !{!"function_entry_count", i64 0} ;. ; CHECK: [[PROF14]] = !{!"function_entry_count", i64 0} ;.