17ce1e7abSRiver Riddle //===- CallInterfaces.cpp - ControlFlow Interfaces ------------------------===// 27ce1e7abSRiver Riddle // 37ce1e7abSRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47ce1e7abSRiver Riddle // See https://llvm.org/LICENSE.txt for license information. 57ce1e7abSRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67ce1e7abSRiver Riddle // 77ce1e7abSRiver Riddle //===----------------------------------------------------------------------===// 87ce1e7abSRiver Riddle 97ce1e7abSRiver Riddle #include "mlir/Interfaces/CallInterfaces.h" 107ce1e7abSRiver Riddle 117ce1e7abSRiver Riddle using namespace mlir; 127ce1e7abSRiver Riddle 137ce1e7abSRiver Riddle //===----------------------------------------------------------------------===// 14*a5ea6045SRiver Riddle // CallOpInterface 15*a5ea6045SRiver Riddle //===----------------------------------------------------------------------===// 16*a5ea6045SRiver Riddle 17*a5ea6045SRiver Riddle /// Resolve the callable operation for given callee to a CallableOpInterface, or 18*a5ea6045SRiver Riddle /// nullptr if a valid callable was not resolved. `symbolTable` is an optional 19*a5ea6045SRiver Riddle /// parameter that will allow for using a cached symbol table for symbol lookups 20*a5ea6045SRiver Riddle /// instead of performing an O(N) scan. 21*a5ea6045SRiver Riddle Operation * resolveCallable(SymbolTableCollection * symbolTable)22*a5ea6045SRiver RiddleCallOpInterface::resolveCallable(SymbolTableCollection *symbolTable) { 23*a5ea6045SRiver Riddle CallInterfaceCallable callable = getCallableForCallee(); 24*a5ea6045SRiver Riddle if (auto symbolVal = callable.dyn_cast<Value>()) 25*a5ea6045SRiver Riddle return symbolVal.getDefiningOp(); 26*a5ea6045SRiver Riddle 27*a5ea6045SRiver Riddle // If the callable isn't a value, lookup the symbol reference. 28*a5ea6045SRiver Riddle auto symbolRef = callable.get<SymbolRefAttr>(); 29*a5ea6045SRiver Riddle if (symbolTable) 30*a5ea6045SRiver Riddle return symbolTable->lookupNearestSymbolFrom(getOperation(), symbolRef); 31*a5ea6045SRiver Riddle return SymbolTable::lookupNearestSymbolFrom(getOperation(), symbolRef); 32*a5ea6045SRiver Riddle } 33*a5ea6045SRiver Riddle 34*a5ea6045SRiver Riddle //===----------------------------------------------------------------------===// 357ce1e7abSRiver Riddle // CallInterfaces 367ce1e7abSRiver Riddle //===----------------------------------------------------------------------===// 377ce1e7abSRiver Riddle 387ce1e7abSRiver Riddle #include "mlir/Interfaces/CallInterfaces.cpp.inc" 39