Move function template definition to the header file. NFC
authorAlex Zinenko <zinenko@google.com>
Wed, 18 Dec 2019 17:04:42 +0000 (09:04 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Wed, 18 Dec 2019 17:10:23 +0000 (09:10 -0800)
The definition of the function template LLVM::ModuleTranslation::lookupValues
has been located in a source file. As long as it has been the only file that
actually called into the function, this did not cause any problem. However, it
creates linking issues if the function is used from other translation units.

PiperOrigin-RevId: 286203078

mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp

index 2889012..0b65218 100644 (file)
@@ -87,8 +87,16 @@ protected:
                                          llvm::IRBuilder<> &builder);
   static std::unique_ptr<llvm::Module> prepareLLVMModule(Operation *m);
 
+  // A helper to look up remapped operands in the value remapping table.
   template <typename Range>
-  SmallVector<llvm::Value *, 8> lookupValues(Range &&values);
+  SmallVector<llvm::Value *, 8> lookupValues(Range &&values) {
+    SmallVector<llvm::Value *, 8> remapped;
+    remapped.reserve(llvm::size(values));
+    for (Value *v : values) {
+      remapped.push_back(valueMapping.lookup(v));
+    }
+    return remapped;
+  }
 
 private:
   /// Check whether the module contains only supported ops directly in its body.
index f5f9cca..7a7964d 100644 (file)
@@ -159,17 +159,6 @@ static llvm::CmpInst::Predicate getLLVMCmpPredicate(FCmpPredicate p) {
   llvm_unreachable("incorrect comparison predicate");
 }
 
-// A helper to look up remapped operands in the value remapping table.
-template <typename Range>
-SmallVector<llvm::Value *, 8> ModuleTranslation::lookupValues(Range &&values) {
-  SmallVector<llvm::Value *, 8> remapped;
-  remapped.reserve(llvm::size(values));
-  for (Value *v : values) {
-    remapped.push_back(valueMapping.lookup(v));
-  }
-  return remapped;
-}
-
 // Given a single MLIR operation, create the corresponding LLVM IR operation
 // using the `builder`.  LLVM IR Builder does not have a generic interface so
 // this has to be a long chain of `if`s calling different functions with a