LLVMFuncOp: implement addEntryBlock
authorAlex Zinenko <zinenko@google.com>
Thu, 19 Dec 2019 20:16:19 +0000 (12:16 -0800)
committerA. Unique TensorFlower <gardener@tensorflow.org>
Thu, 19 Dec 2019 20:16:51 +0000 (12:16 -0800)
This function has been declared as a part of the LLVMFuncOp interface but never
implemented.

Closes tensorflow/mlir#325.

PiperOrigin-RevId: 286439619

mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp

index abbc4e0..1813b30 100644 (file)
@@ -1115,9 +1115,23 @@ static ParseResult parseShuffleVectorOp(OpAsmParser &parser,
 }
 
 //===----------------------------------------------------------------------===//
-// Builder, printer and verifier for LLVM::LLVMFuncOp.
+// Implementations for LLVM::LLVMFuncOp.
 //===----------------------------------------------------------------------===//
 
+// Add the entry block to the function.
+Block *LLVMFuncOp::addEntryBlock() {
+  assert(empty() && "function already has an entry block");
+  assert(!isVarArg() && "unimplemented: non-external variadic functions");
+
+  auto *entry = new Block;
+  push_back(entry);
+
+  LLVMType type = getType();
+  for (unsigned i = 0, e = type.getFunctionNumParams(); i < e; ++i)
+    entry->addArgument(type.getFunctionParamType(i));
+  return entry;
+}
+
 void LLVMFuncOp::build(Builder *builder, OperationState &result, StringRef name,
                        LLVMType type, LLVM::Linkage linkage,
                        ArrayRef<NamedAttribute> attrs,