[PATCH] D100353: Support nodebug in SCCP
David Blaikie via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 13 13:38:21 PDT 2021
dblaikie updated this revision to Diff 337250.
dblaikie added a comment.
Fix think-o, this is about optnone, not about nodebug
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100353/new/
https://reviews.llvm.org/D100353
Files:
llvm/lib/Transforms/Scalar/SCCP.cpp
llvm/test/Transforms/SCCP/optnone.ll
Index: llvm/test/Transforms/SCCP/optnone.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/SCCP/optnone.ll
@@ -0,0 +1,15 @@
+; RUN: opt < %s -ipsccp -instcombine -S | FileCheck %s
+
+attributes #0 = { noinline optnone }
+
+define i32 @callee() #0 {
+ ret i32 52
+}
+
+define i32 @caller() {
+ ; CHECK: define i32 @caller()
+ ; CHECK: ret i32 %X
+ %X = call i32 @callee()
+ ret i32 %X
+}
+
Index: llvm/lib/Transforms/Scalar/SCCP.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/SCCP.cpp
+++ llvm/lib/Transforms/Scalar/SCCP.cpp
@@ -1207,7 +1207,8 @@
// Otherwise, if we have a single return value case, and if the function is
// a declaration, maybe we can constant fold it.
- if (F && F->isDeclaration() && canConstantFoldCallTo(&CB, F)) {
+ if (F && (F->isDeclaration() || F->hasOptNone()) &&
+ canConstantFoldCallTo(&CB, F)) {
SmallVector<Constant *, 8> Operands;
for (auto AI = CB.arg_begin(), E = CB.arg_end(); AI != E; ++AI) {
if (AI->get()->getType()->isStructTy())
@@ -1380,7 +1381,7 @@
// The common case is that we aren't tracking the callee, either because we
// are not doing interprocedural analysis or the callee is indirect, or is
// external. Handle these cases first.
- if (!F || F->isDeclaration())
+ if (!F || F->isDeclaration() || F->hasOptNone())
return handleCallOverdefined(CB);
// If this is a single/zero retval case, see if we're tracking the function.
@@ -1938,7 +1939,7 @@
// Loop over all functions, marking arguments to those with their addresses
// taken or that are external as overdefined.
for (Function &F : M) {
- if (F.isDeclaration())
+ if (F.isDeclaration() || F.hasOptNone())
continue;
Solver.addAnalysis(F, getAnalysis(F));
@@ -1992,7 +1993,7 @@
// constants if we have found them to be of constant values.
for (Function &F : M) {
- if (F.isDeclaration())
+ if (F.isDeclaration() || F.hasOptNone())
continue;
SmallVector<BasicBlock *, 512> BlocksToErase;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100353.337250.patch
Type: text/x-patch
Size: 2123 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210413/642ac540/attachment.bin>
More information about the llvm-commits
mailing list