Lines Matching refs:llvm
20 #include <llvm/IR/Function.h>
21 #include <llvm/IR/Instructions.h>
22 #include <llvm/IR/Metadata.h>
23 #include <llvm/IR/Module.h>
24 #include <llvm/IR/Type.h>
25 #include <llvm/Pass.h>
64 class RSInvariantPass : public llvm::FunctionPass {
70 virtual bool doInitialization(llvm::Module &M) {
71 EmptyMDNode = llvm::MDNode::get(M.getContext(), llvm::None);
75 virtual bool runOnFunction(llvm::Function &F) {
78 for (llvm::Value &Arg : F.args()) {
79 const llvm::Type *ArgType = Arg.getType();
81 const llvm::Type *ArgPtrDomainType = ArgType->getPointerElementType();
82 if (auto ArgPtrDomainStructType = llvm::dyn_cast<llvm::StructType>(ArgPtrDomainType)) {
84 const llvm::StringRef StructName = getUnsuffixedStructName(ArgPtrDomainStructType);
105 * http://llvm.org/docs/LangRef.html#pointer-aliasing-rules). If a
110 bool markInvariantUserLoads(llvm::Value *Value) {
112 for (llvm::Use &Use : Value->uses()) {
113 llvm::Instruction *Inst = llvm::cast<llvm::Instruction>(Use.getUser());
122 if (auto BitCast = llvm::dyn_cast<llvm::BitCastInst>(Inst)) {
124 } else if (auto GetElementPtr = llvm::dyn_cast<llvm::GetElementPtrInst>(Inst)) {
127 } else if (auto Load = llvm::dyn_cast<llvm::LoadInst>(Inst)) {
138 llvm::MDNode *EmptyMDNode;
142 llvm::RegisterPass<RSInvariantPass> X("rsinvariant", "RS Invariant Load Pass");
148 llvm::FunctionPass *