[PATCH] D68145: [AMDGPU] Make printf lowering faster when there are no printfs
Jay Foad via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 2 01:44:43 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL373433: [AMDGPU] Make printf lowering faster when there are no printfs (authored by foad, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D68145?vs=222191&id=222770#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D68145/new/
https://reviews.llvm.org/D68145
Files:
llvm/trunk/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
Index: llvm/trunk/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
===================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUPrintfRuntimeBinding.cpp
@@ -30,7 +30,6 @@
#include "llvm/IR/Dominators.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/IRBuilder.h"
-#include "llvm/IR/InstVisitor.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
@@ -45,20 +44,13 @@
namespace {
class LLVM_LIBRARY_VISIBILITY AMDGPUPrintfRuntimeBinding final
- : public ModulePass,
- public InstVisitor<AMDGPUPrintfRuntimeBinding> {
+ : public ModulePass {
public:
static char ID;
explicit AMDGPUPrintfRuntimeBinding();
- void visitCallSite(CallSite CS) {
- Function *F = CS.getCalledFunction();
- if (F && F->hasName() && F->getName() == "printf")
- Printfs.push_back(CS.getInstruction());
- }
-
private:
bool runOnModule(Module &M) override;
void getConversionSpecifiers(SmallVectorImpl<char> &OpConvSpecifiers,
@@ -80,7 +72,7 @@
const DataLayout *TD;
const DominatorTree *DT;
- SmallVector<Value *, 32> Printfs;
+ SmallVector<CallInst *, 32> Printfs;
};
} // namespace
@@ -162,8 +154,7 @@
// NB: This is important for this string size to be divizable by 4
const char NonLiteralStr[4] = "???";
- for (auto P : Printfs) {
- auto CI = cast<CallInst>(P);
+ for (auto CI : Printfs) {
unsigned NumOps = CI->getNumArgOperands();
SmallString<16> OpConvSpecifiers;
@@ -564,10 +555,8 @@
}
// erase the printf calls
- for (auto P : Printfs) {
- auto CI = cast<CallInst>(P);
+ for (auto CI : Printfs)
CI->eraseFromParent();
- }
Printfs.clear();
return true;
@@ -578,7 +567,16 @@
if (TT.getArch() == Triple::r600)
return false;
- visit(M);
+ auto PrintfFunction = M.getFunction("printf");
+ if (!PrintfFunction)
+ return false;
+
+ for (auto &U : PrintfFunction->uses()) {
+ if (auto *CI = dyn_cast<CallInst>(U.getUser())) {
+ if (CI->isCallee(&U))
+ Printfs.push_back(CI);
+ }
+ }
if (Printfs.empty())
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D68145.222770.patch
Type: text/x-patch
Size: 2211 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191002/f788a7a1/attachment.bin>
More information about the llvm-commits
mailing list