mirror of
https://github.com/RPCS3/llvm.git
synced 2025-05-14 09:26:22 +00:00

Summary: This patch fixes clang-tidy warnings on wasm-only files. The list of checks used is: `-*,clang-diagnostic-*,llvm-*,misc-*,-misc-unused-parameters,readability-identifier-naming,modernize-*` (LLVM's default .clang-tidy list is the same except it does not have `modernize-*`. But I've seen in multiple CLs in LLVM the modernize style was recommended and code was fixed based on the style, so I added it as well.) The common fixes are: - Variable names start with an uppercase letter - Function names start with a lowercase letter - Use `auto` when you use casts so the type is evident - Use inline initialization for class member variables - Use `= default` for empty constructors / destructors - Use `using` in place of `typedef` Reviewers: sbc100, tlively, aardappel Subscribers: dschuff, sunfish, jgravelle-google, yurydelendik, kripken, MatzeB, mgorny, rupprecht, llvm-commits Differential Revision: https://reviews.llvm.org/D57500 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353075 91177308-0d34-0410-b5e6-96231b3b80d8
84 lines
2.6 KiB
C++
84 lines
2.6 KiB
C++
//===-- WebAssemblyOptimizeReturned.cpp - Optimize "returned" attributes --===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file
|
|
/// Optimize calls with "returned" attributes for WebAssembly.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "WebAssembly.h"
|
|
#include "llvm/IR/Dominators.h"
|
|
#include "llvm/IR/InstVisitor.h"
|
|
#include "llvm/Support/Debug.h"
|
|
#include "llvm/Support/raw_ostream.h"
|
|
using namespace llvm;
|
|
|
|
#define DEBUG_TYPE "wasm-optimize-returned"
|
|
|
|
namespace {
|
|
class OptimizeReturned final : public FunctionPass,
|
|
public InstVisitor<OptimizeReturned> {
|
|
StringRef getPassName() const override {
|
|
return "WebAssembly Optimize Returned";
|
|
}
|
|
|
|
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
|
AU.setPreservesCFG();
|
|
AU.addRequired<DominatorTreeWrapperPass>();
|
|
AU.addPreserved<DominatorTreeWrapperPass>();
|
|
FunctionPass::getAnalysisUsage(AU);
|
|
}
|
|
|
|
bool runOnFunction(Function &F) override;
|
|
|
|
DominatorTree *DT = nullptr;
|
|
|
|
public:
|
|
static char ID;
|
|
OptimizeReturned() : FunctionPass(ID) {}
|
|
|
|
void visitCallSite(CallSite CS);
|
|
};
|
|
} // End anonymous namespace
|
|
|
|
char OptimizeReturned::ID = 0;
|
|
INITIALIZE_PASS(OptimizeReturned, DEBUG_TYPE,
|
|
"Optimize calls with \"returned\" attributes for WebAssembly",
|
|
false, false)
|
|
|
|
FunctionPass *llvm::createWebAssemblyOptimizeReturned() {
|
|
return new OptimizeReturned();
|
|
}
|
|
|
|
void OptimizeReturned::visitCallSite(CallSite CS) {
|
|
for (unsigned I = 0, E = CS.getNumArgOperands(); I < E; ++I)
|
|
if (CS.paramHasAttr(I, Attribute::Returned)) {
|
|
Instruction *Inst = CS.getInstruction();
|
|
Value *Arg = CS.getArgOperand(I);
|
|
// Ignore constants, globals, undef, etc.
|
|
if (isa<Constant>(Arg))
|
|
continue;
|
|
// Like replaceDominatedUsesWith but using Instruction/Use dominance.
|
|
for (auto UI = Arg->use_begin(), UE = Arg->use_end(); UI != UE;) {
|
|
Use &U = *UI++;
|
|
if (DT->dominates(Inst, U))
|
|
U.set(Inst);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool OptimizeReturned::runOnFunction(Function &F) {
|
|
LLVM_DEBUG(dbgs() << "********** Optimize returned Attributes **********\n"
|
|
"********** Function: "
|
|
<< F.getName() << '\n');
|
|
|
|
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
|
visit(F);
|
|
return true;
|
|
}
|