Index: llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp =================================================================== --- llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp +++ llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp @@ -335,6 +335,7 @@ HotColdSplitting::extractColdRegion(const SmallVectorImpl &Region, DominatorTree *DT, BlockFrequencyInfo *BFI, OptimizationRemarkEmitter &ORE) { + assert(!Region.empty()); LLVM_DEBUG(for (auto *BB : Region) llvm::dbgs() << "\nExtracting: " << *BB;); @@ -348,6 +349,7 @@ if (Outputs.size() > 0) return nullptr; + Function *OrigF = Region[0]->getParent(); if (Function *OutF = CE.extractCodeRegion()) { User *U = *OutF->user_begin(); CallInst *CI = cast(U); @@ -359,6 +361,12 @@ } CI->setIsNoInline(); LLVM_DEBUG(llvm::dbgs() << "Outlined Region: " << *OutF); + ORE.emit([&]() { + return OptimizationRemark(DEBUG_TYPE, "HotColdSplit", + &*Region[0]->begin()) + << ore::NV("Original", OrigF) << " split cold code into " + << ore::NV("Split", OutF); + }); return OutF; } Index: llvm/trunk/test/Transforms/HotColdSplit/split-cold-2.ll =================================================================== --- llvm/trunk/test/Transforms/HotColdSplit/split-cold-2.ll +++ llvm/trunk/test/Transforms/HotColdSplit/split-cold-2.ll @@ -1,9 +1,10 @@ -; RUN: opt -hotcoldsplit -S < %s | FileCheck %s -; RUN: opt -passes=hotcoldsplit -S < %s | FileCheck %s +; RUN: opt -hotcoldsplit -pass-remarks=hotcoldsplit -S < %s 2>&1 | FileCheck %s +; RUN: opt -passes=hotcoldsplit -pass-remarks=hotcoldsplit -S < %s 2>&1 | FileCheck %s ; Make sure this compiles. This test used to fail with an invalid phi node: the ; two predecessors were outlined and the SSA representation was invalid. +; CHECK: remark: :0:0: fun split cold code into fun_if.else ; CHECK-LABEL: @fun ; CHECK: codeRepl: ; CHECK-NEXT: call void @fun_if.else