diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Transforms/Utils/CodeExtractor.cpp | 7 | ||||
-rw-r--r-- | llvm/test/Transforms/HotColdSplit/split-cold-2.ll | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/CodeExtractor.cpp b/llvm/lib/Transforms/Utils/CodeExtractor.cpp index 419e1db08bf..41c3632c82a 100644 --- a/llvm/lib/Transforms/Utils/CodeExtractor.cpp +++ b/llvm/lib/Transforms/Utils/CodeExtractor.cpp @@ -1330,6 +1330,13 @@ Function *CodeExtractor::extractCodeRegion() { DVI->eraseFromParent(); } + // Mark the new function `noreturn` if applicable. + bool doesNotReturn = none_of(*newFunction, [](const BasicBlock &BB) { + return isa<ReturnInst>(BB.getTerminator()); + }); + if (doesNotReturn) + newFunction->setDoesNotReturn(); + LLVM_DEBUG(if (verifyFunction(*newFunction)) report_fatal_error("verifyFunction failed!")); return newFunction; diff --git a/llvm/test/Transforms/HotColdSplit/split-cold-2.ll b/llvm/test/Transforms/HotColdSplit/split-cold-2.ll index ac7d856608c..66c6fbb1b8d 100644 --- a/llvm/test/Transforms/HotColdSplit/split-cold-2.ll +++ b/llvm/test/Transforms/HotColdSplit/split-cold-2.ll @@ -9,6 +9,9 @@ ; CHECK: codeRepl: ; CHECK-NEXT: call void @fun.cold.1 +; CHECK: define {{.*}}@fun.cold.1{{.*}} [[cold_attr:#[0-9]+]] +; CHECK: attributes [[cold_attr]] = { {{.*}}noreturn + define void @fun() { entry: br i1 undef, label %if.then, label %if.else |