19#ifndef LLVM_TRANSFORMS_IPO_DEADARGUMENTELIMINATION_H
20#define LLVM_TRANSFORMS_IPO_DEADARGUMENTELIMINATION_H
54 return std::tie(
F,
Idx,
IsArg) < std::tie(O.F, O.Idx, O.IsArg);
59 return F == O.F &&
Idx == O.Idx &&
IsArg == O.IsArg;
90 using UseMap = std::multimap<RetOrArg, RetOrArg>;
129 unsigned RetValNum = -1U);
139 bool markFnOrRetTyFrozenOnMusttail(
const Function &
F);
141 bool removeDeadStuffFromFunction(
Function *
F);
143 bool removeDeadArgumentsFromCallers(
Function &
F);
Returns the sub type a function will return at a given Idx Should correspond to the result type of an ExtractValue instruction executed with just that one unsigned Idx
This header defines various interfaces for pass management in LLVM.
Machine Check Debug Module
SI optimize exec mask operations pre RA
This file defines the SmallVector class.
A container for analyses that lazily runs them and caches their results.
Eliminate dead arguments (and return values) from functions.
PreservedAnalyses run(Module &M, ModuleAnalysisManager &)
FuncSet FrozenRetTyFunctions
This set contains all functions that cannot change return type;.
Liveness
During our initial pass over the program, we determine that things are either alive or maybe alive.
LiveSet LiveValues
This set contains all values that have been determined to be live.
RetOrArg createRet(const Function *F, unsigned Idx)
Convenience wrapper.
std::set< const Function * > FuncSet
RetOrArg createArg(const Function *F, unsigned Idx)
Convenience wrapper.
FuncSet FrozenFunctions
This set contains all functions that cannot be changed in any way.
bool ShouldHackArguments
This allows this pass to do double-duty as the dead arg hacking pass (used only by bugpoint).
std::multimap< RetOrArg, RetOrArg > UseMap
DeadArgumentEliminationPass(bool ShouldHackArguments=false)
std::set< RetOrArg > LiveSet
UseMap Uses
This maps a return value or argument to any MaybeLive return values or arguments it uses.
A Module instance is used to store all the information related to an LLVM module.
A set of analyses that are preserved following a run of a transformation pass.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
A Use represents the edge between a Value definition and its users.
LLVM Value Representation.
LLVM_ABI StringRef getName() const
Return a constant reference to the value's name.
NodeAddr< UseNode * > Use
This is an optimization pass for GlobalISel generic memory operations.
Struct that represents (part of) either a return value or a function argument.
bool operator==(const RetOrArg &O) const
Make RetOrArg comparable, so we can easily iterate the multimap.
bool operator<(const RetOrArg &O) const
Make RetOrArg comparable, so we can put it into a map.
std::string getDescription() const
RetOrArg(const Function *F, unsigned Idx, bool IsArg)
A CRTP mix-in to automatically provide informational APIs needed for passes.