[PATCH] D71888: [mlir] Added llvm.resume in LLVM IR Dialect

shraiysh via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 26 01:27:37 PST 2019


shraiysh created this revision.
Herald added subscribers: llvm-commits, rriddle, mehdi_amini.
Herald added a project: LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D71888

Files:
  mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
  mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
  mlir/test/Dialect/LLVMIR/roundtrip.mlir


Index: mlir/test/Dialect/LLVMIR/roundtrip.mlir
===================================================================
--- mlir/test/Dialect/LLVMIR/roundtrip.mlir
+++ mlir/test/Dialect/LLVMIR/roundtrip.mlir
@@ -218,3 +218,10 @@
   %1 = llvm.mlir.null : !llvm<"{void(i32, void()*)*, i64}*">
   llvm.return
 }
+
+// CHECK-LABEL: @resume
+func @resume() {
+  %0 = llvm.mlir.constant(3) : !llvm.i32
+  // CHECK: llvm.resume %0 : !llvm.i32
+  llvm.resume %0 : !llvm.i32
+}
\ No newline at end of file
Index: mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
===================================================================
--- mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -754,6 +754,30 @@
   return success();
 }
 
+//===----------------------------------------------------------------------===//
+// Printing/parsing for LLVM::ResumeOp.
+//===----------------------------------------------------------------------===//
+
+static void printResumeOp(OpAsmPrinter &p, ResumeOp &op) {
+  p << op.getOperationName();
+  p.printOptionalAttrDict(op.getAttrs());
+  assert(op.getNumOperands() == 1);
+  p << ' ' << *op.getOperand(0) << " : " << op.getOperand(0)->getType();
+}
+
+// <operation> ::= `llvm.resume` ssa-use `:` type
+static ParseResult parseResumeOp(OpAsmParser &parser, OperationState &result) {
+  SmallVector<OpAsmParser::OperandType, 1> operands;
+  Type type;
+
+  if (parser.parseOperandList(operands) || operands.empty() ||
+      parser.parseColonType(type) ||
+      parser.resolveOperand(operands[0], type, result.operands))
+    return failure();
+
+  return success();
+}
+
 //===----------------------------------------------------------------------===//
 // Printing/parsing for LLVM::UndefOp.
 //===----------------------------------------------------------------------===//
Index: mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
===================================================================
--- mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
+++ mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td
@@ -452,6 +452,15 @@
   let parser = [{ return parseReturnOp(parser, result); }];
   let printer = [{ printReturnOp(p, *this); }];
 }
+def LLVM_ResumeOp : LLVM_TerminatorOp<"resume", []> {
+  let verifier = [{
+    if(getNumOperands() != 1)
+      return emitOpError("expected exactly two successors");
+    return success();
+  }];
+  let parser = [{ return parseResumeOp(parser, result); }];
+  let printer = [{ printResumeOp(p, *this); }];
+}
 def LLVM_UnreachableOp : LLVM_TerminatorOp<"unreachable", []> {
   string llvmBuilder = [{ builder.CreateUnreachable(); }];
   let parser = [{ return success(); }];


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71888.235326.patch
Type: text/x-patch
Size: 2660 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20191226/bff0b5fa/attachment.bin>


More information about the llvm-commits mailing list