Go to the documentation of this file.
9 #ifndef LLVM_LINKER_IRMOVER_H
10 #define LLVM_LINKER_IRMOVER_H
27 struct StructTypeKeyInfo {
38 static unsigned getHashValue(
const KeyTy &
Key);
85 IdentifiedStructTypeSet IdentifiedStructTypes;
This is an optimization pass for GlobalISel generic memory operations.
ArrayRef< Type * > ETypes
unique_function is a type-erasing functor similar to std::function.
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
StructType * findNonOpaque(ArrayRef< Type * > ETypes, bool IsPacked)
void addNonOpaque(StructType *Ty)
we should consider alternate ways to model stack dependencies Lots of things could be done in WebAssemblyTargetTransformInfo cpp there are numerous optimization related hooks that can be overridden in WebAssemblyTargetLowering Instead of the OptimizeReturned which should consider preserving the returned attribute through to MachineInstrs and extending the MemIntrinsicResults pass to do this optimization on calls too That would also let the WebAssemblyPeephole pass clean up dead defs for such as it does for stores Consider implementing and or getMachineCombinerPatterns Find a clean way to fix the problem which leads to the Shrink Wrapping pass being run after the WebAssembly PEI pass When setting multiple variables to the same we currently get code like const It could be done with a smaller encoding like local tee $pop5 local $pop6 WebAssembly registers are implicitly initialized to zero Explicit zeroing is therefore often redundant and could be optimized away Small indices may use smaller encodings than large indices WebAssemblyRegColoring and or WebAssemblyRegRenumbering should sort registers according to their usage frequency to maximize the usage of smaller encodings Many cases of irreducible control flow could be transformed more optimally than via the transform in WebAssemblyFixIrreducibleControlFlow cpp It may also be worthwhile to do transforms before register particularly when duplicating to allow register coloring to be aware of the duplication WebAssemblyRegStackify could use AliasAnalysis to reorder loads and stores more aggressively WebAssemblyRegStackify is currently a greedy algorithm This means that
bool isEqual(const GCNRPTracker::LiveRegSet &S1, const GCNRPTracker::LiveRegSet &S2)
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
KeyTy(ArrayRef< Type * > E, bool P)
bool operator==(const KeyTy &that) const
bool operator!=(const KeyTy &that) const
void addOpaque(StructType *Ty)
Error move(std::unique_ptr< Module > Src, ArrayRef< GlobalValue * > ValuesToLink, LazyCallback AddLazyFor, bool IsPerformingImport)
Move in the provide values in ValuesToLink from Src.
bool hasType(StructType *Ty)
Implements a dense probed hash-table based set.
std::function< void(GlobalValue &)> ValueAdder
print Print MemDeps of function
A Module instance is used to store all the information related to an LLVM module.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Class to represent struct types.
Machine Check Debug Module
Lightweight error class with error context and mandatory checking.
void switchToNonOpaque(StructType *Ty)