[PATCH] D62766: [Attributor] Deduce "nosync" function attribute.
Johannes Doerfert via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 1 01:03:18 PDT 2019
jdoerfert added inline comments.
================
Comment at: llvm/docs/LangRef.rst:1479
+ (synchronize) with another thread causing that other thread to delete
+ the memory.
``nounwind``
----------------
The part after "causing" is too specific. We want nosync to be generic.
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:3
+// //
+// // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
----------------
Leftover comments?
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:12
+// abstract interpretation style fixpoint iteration. See the Attributor.h
+// file comment and the class descriptions in that file for more information.
//
----------------
(only a leftover of an old attributor patch version)
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:170
+ StringRef StringAttr = Attr.getKindAsString();
+ if (StringAttr == Attr.getKindAsString())
+ NumFnNoSync++;
----------------
You have to check against "nosync".
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:378
+ /// Returns true of "nosync" is known.
+ bool isKnownNoFree() const { return getKnown(); }
+
----------------
Copy & paste
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:385
+/// helper functions.
+AtomicOrdering getOrdering(Instruction *I) {
+ switch (I->getOpcode()) {
----------------
Make it `static` or member function. Also, describe what it does in the comment.
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:398
+
+bool isVolatile(Instruction *I) {
+ switch (I->getOpcode()) {
----------------
Description missing.
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:418
+ (unsigned)Instruction::Store,
+ (unsigned)Instruction::AtomicRMW};
+
----------------
What about calls? Maybe you need to look at all side-effect instructions?
================
Comment at: llvm/lib/Transforms/IPO/Attributor.cpp:442
+ }
+ indicateOptimisticFixpoint();
+ return ChangeStatus::UNCHANGED;
----------------
This is not a fixpoint. UpdateImpl is called multiple times (potentially). Remove the fixpoint call.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62766/new/
https://reviews.llvm.org/D62766
More information about the llvm-commits
mailing list