[PATCH] D100689: [funcattrs] Consistently check call site attributes
Philip Reames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 19 13:21:09 PDT 2021
This revision was automatically updated to reflect the committed changes.
Closed by commit rG3c54762226ed: [funcattrs] Consistently check call site attributes (authored by reames).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100689/new/
https://reviews.llvm.org/D100689
Files:
llvm/lib/Transforms/IPO/FunctionAttrs.cpp
llvm/test/Transforms/FunctionAttrs/noreturn.ll
llvm/test/Transforms/FunctionAttrs/willreturn-callsites.ll
Index: llvm/test/Transforms/FunctionAttrs/willreturn-callsites.ll
===================================================================
--- llvm/test/Transforms/FunctionAttrs/willreturn-callsites.ll
+++ llvm/test/Transforms/FunctionAttrs/willreturn-callsites.ll
@@ -1,4 +1,4 @@
-; RUN: opt -function-attrs -S %s | FileCheck %s
+; RUN: opt -inferattrs -function-attrs -S %s | FileCheck %s
declare void @decl_readonly() readonly
declare void @decl_readnone() readnone
Index: llvm/test/Transforms/FunctionAttrs/noreturn.ll
===================================================================
--- llvm/test/Transforms/FunctionAttrs/noreturn.ll
+++ llvm/test/Transforms/FunctionAttrs/noreturn.ll
@@ -64,3 +64,10 @@
define i32 @alreadynoreturn() noreturn {
unreachable
}
+
+; CHECK: Function Attrs: {{.*}}noreturn
+; CHECK-NEXT: @callsite_noreturn()
+define void @callsite_noreturn() {
+ call i32 @f() noreturn
+ ret void
+}
Index: llvm/lib/Transforms/IPO/FunctionAttrs.cpp
===================================================================
--- llvm/lib/Transforms/IPO/FunctionAttrs.cpp
+++ llvm/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -1271,15 +1271,10 @@
if (CB->hasFnAttr(Attribute::NoFree))
return false;
- Function *Callee = CB->getCalledFunction();
- if (!Callee)
- return true;
-
- if (Callee->doesNotFreeMemory())
- return false;
-
- if (SCCNodes.contains(Callee))
- return false;
+ // Speculatively assume in SCC.
+ if (Function *Callee = CB->getCalledFunction())
+ if (SCCNodes.contains(Callee))
+ return false;
return true;
}
@@ -1403,10 +1398,8 @@
}
static bool instructionDoesNotReturn(Instruction &I) {
- if (auto *CB = dyn_cast<CallBase>(&I)) {
- Function *Callee = CB->getCalledFunction();
- return Callee && Callee->doesNotReturn();
- }
+ if (auto *CB = dyn_cast<CallBase>(&I))
+ return CB->hasFnAttr(Attribute::NoReturn);
return false;
}
@@ -1517,13 +1510,6 @@
if (CB->hasFnAttr(Attribute::NoSync))
return false;
- // readnone + not convergent implies nosync
- // (This is needed to initialize inference from declarations which aren't
- // explicitly nosync, but are readnone and not convergent.)
- if (CB->hasFnAttr(Attribute::ReadNone) &&
- !CB->hasFnAttr(Attribute::Convergent))
- return false;
-
// Non volatile memset/memcpy/memmoves are nosync
// NOTE: Only intrinsics with volatile flags should be handled here. All
// others should be marked in Intrinsics.td.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100689.338618.patch
Type: text/x-patch
Size: 2483 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210419/a49d6ba1/attachment.bin>
More information about the llvm-commits
mailing list