Lines Matching refs:funcOp
37 void normalizeFuncOpMemRefs(func::FuncOp funcOp, ModuleOp moduleOp);
38 bool areMemRefsNormalizable(func::FuncOp funcOp);
39 void updateFunctionSignature(func::FuncOp funcOp, ModuleOp moduleOp);
41 func::FuncOp funcOp, ModuleOp moduleOp,
43 Operation *createOpResultsNormalized(func::FuncOp funcOp, Operation *oldOp);
63 moduleOp.walk([&](func::FuncOp funcOp) { normalizableFuncs.insert(funcOp); }); in runOnOperation() argument
71 moduleOp.walk([&](func::FuncOp funcOp) { in runOnOperation() argument
72 if (normalizableFuncs.contains(funcOp)) { in runOnOperation()
73 if (!areMemRefsNormalizable(funcOp)) { in runOnOperation()
75 << "@" << funcOp.getName() in runOnOperation()
80 setCalleesAndCallersNonNormalizable(funcOp, moduleOp, in runOnOperation()
89 for (func::FuncOp &funcOp : normalizableFuncs) in runOnOperation()
90 normalizeFuncOpMemRefs(funcOp, moduleOp); in runOnOperation()
106 func::FuncOp funcOp, ModuleOp moduleOp, in setCalleesAndCallersNonNormalizable() argument
108 if (!normalizableFuncs.contains(funcOp)) in setCalleesAndCallersNonNormalizable()
112 llvm::dbgs() << "@" << funcOp.getName() in setCalleesAndCallersNonNormalizable()
114 normalizableFuncs.erase(funcOp); in setCalleesAndCallersNonNormalizable()
116 Optional<SymbolTable::UseRange> symbolUses = funcOp.getSymbolUses(moduleOp); in setCalleesAndCallersNonNormalizable()
122 for (func::FuncOp &funcOp : normalizableFuncs) { in setCalleesAndCallersNonNormalizable()
123 if (parentFuncOp == funcOp) { in setCalleesAndCallersNonNormalizable()
124 setCalleesAndCallersNonNormalizable(funcOp, moduleOp, in setCalleesAndCallersNonNormalizable()
132 funcOp.walk([&](func::CallOp callOp) { in setCalleesAndCallersNonNormalizable()
134 for (func::FuncOp &funcOp : normalizableFuncs) { in setCalleesAndCallersNonNormalizable()
136 if (callee == funcOp.getNameAttr()) { in setCalleesAndCallersNonNormalizable()
137 setCalleesAndCallersNonNormalizable(funcOp, moduleOp, in setCalleesAndCallersNonNormalizable()
152 bool NormalizeMemRefs::areMemRefsNormalizable(func::FuncOp funcOp) { in areMemRefsNormalizable() argument
154 if (funcOp.isExternal()) in areMemRefsNormalizable()
157 if (funcOp in areMemRefsNormalizable()
167 if (funcOp in areMemRefsNormalizable()
181 for (unsigned argIndex : llvm::seq<unsigned>(0, funcOp.getNumArguments())) { in areMemRefsNormalizable()
182 BlockArgument oldMemRef = funcOp.getArgument(argIndex); in areMemRefsNormalizable()
197 void NormalizeMemRefs::updateFunctionSignature(func::FuncOp funcOp, in updateFunctionSignature() argument
199 FunctionType functionType = funcOp.getFunctionType(); in updateFunctionSignature()
206 if (!funcOp.isExternal()) { in updateFunctionSignature()
208 for (const auto &argEn : llvm::enumerate(funcOp.getArguments())) in updateFunctionSignature()
213 funcOp.walk([&](func::ReturnOp returnOp) { in updateFunctionSignature()
248 Optional<SymbolTable::UseRange> symbolUses = funcOp.getSymbolUses(moduleOp); in updateFunctionSignature()
313 if (!funcOp.isExternal()) in updateFunctionSignature()
314 funcOp.setType(newFuncType); in updateFunctionSignature()
326 void NormalizeMemRefs::normalizeFuncOpMemRefs(func::FuncOp funcOp, in normalizeFuncOpMemRefs() argument
332 funcOp.walk([&](memref::AllocOp op) { allocOps.push_back(op); }); in normalizeFuncOpMemRefs()
337 OpBuilder b(funcOp); in normalizeFuncOpMemRefs()
339 FunctionType functionType = funcOp.getFunctionType(); in normalizeFuncOpMemRefs()
341 funcOp.getArguments(), [](BlockArgument arg) { return arg.getLoc(); })); in normalizeFuncOpMemRefs()
358 if (newMemRefType == memrefType || funcOp.isExternal()) { in normalizeFuncOpMemRefs()
366 BlockArgument newMemRef = funcOp.front().insertArgument( in normalizeFuncOpMemRefs()
368 BlockArgument oldMemRef = funcOp.getArgument(argIndex + 1); in normalizeFuncOpMemRefs()
382 funcOp.front().eraseArgument(argIndex); in normalizeFuncOpMemRefs()
388 funcOp.front().eraseArgument(argIndex + 1); in normalizeFuncOpMemRefs()
396 funcOp.walk([&](Operation *op) { in normalizeFuncOpMemRefs()
399 !funcOp.isExternal()) { in normalizeFuncOpMemRefs()
401 Operation *newOp = createOpResultsNormalized(funcOp, op); in normalizeFuncOpMemRefs()
450 if (funcOp.isExternal()) { in normalizeFuncOpMemRefs()
473 funcOp.setType(newFuncType); in normalizeFuncOpMemRefs()
475 updateFunctionSignature(funcOp, moduleOp); in normalizeFuncOpMemRefs()
483 Operation *NormalizeMemRefs::createOpResultsNormalized(func::FuncOp funcOp, in createOpResultsNormalized() argument
492 OpBuilder b(funcOp); in createOpResultsNormalized()