xref: /llvm-project/mlir/lib/Interfaces/CallInterfaces.cpp (revision 9192367ad1af30c59d5b7adc0a099bd7e524e5dd)
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 //===----------------------------------------------------------------------===//
14a5ea6045SRiver Riddle // CallOpInterface
15a5ea6045SRiver Riddle //===----------------------------------------------------------------------===//
16a5ea6045SRiver Riddle 
17a5ea6045SRiver Riddle Operation *
18d1cad229SHenrich Lauko call_interface_impl::resolveCallable(CallOpInterface call,
19d1cad229SHenrich Lauko                                      SymbolTableCollection *symbolTable) {
20d1cad229SHenrich Lauko   CallInterfaceCallable callable = call.getCallableForCallee();
21e750c41eSNick Kreeger   if (auto symbolVal = dyn_cast<Value>(callable))
22a5ea6045SRiver Riddle     return symbolVal.getDefiningOp();
23a5ea6045SRiver Riddle 
24a5ea6045SRiver Riddle   // If the callable isn't a value, lookup the symbol reference.
25*9192367aSKazu Hirata   auto symbolRef = cast<SymbolRefAttr>(callable);
26a5ea6045SRiver Riddle   if (symbolTable)
27d1cad229SHenrich Lauko     return symbolTable->lookupNearestSymbolFrom(call.getOperation(), symbolRef);
28d1cad229SHenrich Lauko   return SymbolTable::lookupNearestSymbolFrom(call.getOperation(), symbolRef);
29a5ea6045SRiver Riddle }
30a5ea6045SRiver Riddle 
31a5ea6045SRiver Riddle //===----------------------------------------------------------------------===//
327ce1e7abSRiver Riddle // CallInterfaces
337ce1e7abSRiver Riddle //===----------------------------------------------------------------------===//
347ce1e7abSRiver Riddle 
357ce1e7abSRiver Riddle #include "mlir/Interfaces/CallInterfaces.cpp.inc"
36