[mlir][emitc] Fix indent in CondBranchOp and block label
authorxndcn <xndchn@gmail.com>
Sun, 19 Sep 2021 12:01:12 +0000 (20:01 +0800)
committerxndcn <xndchn@gmail.com>
Sun, 19 Sep 2021 12:03:42 +0000 (20:03 +0800)
1. Add missing indent in CondBranchOp
2. Remove indent in block label

Differential Revision: https://reviews.llvm.org/D109805

mlir/lib/Target/Cpp/TranslateToCpp.cpp

index 859c6f0..f2d5002 100644 (file)
@@ -248,13 +248,15 @@ static LogicalResult printOperation(CppEmitter &emitter, BranchOp branchOp) {
 
 static LogicalResult printOperation(CppEmitter &emitter,
                                     CondBranchOp condBranchOp) {
-  raw_ostream &os = emitter.ostream();
+  raw_indented_ostream &os = emitter.ostream();
   Block &trueSuccessor = *condBranchOp.getTrueDest();
   Block &falseSuccessor = *condBranchOp.getFalseDest();
 
   os << "if (" << emitter.getOrCreateName(condBranchOp.getCondition())
      << ") {\n";
 
+  os.indent();
+
   // If condition is true.
   for (auto pair : llvm::zip(condBranchOp.getTrueOperands(),
                              trueSuccessor.getArguments())) {
@@ -269,7 +271,8 @@ static LogicalResult printOperation(CppEmitter &emitter,
     return condBranchOp.emitOpError("unable to find label for successor block");
   }
   os << emitter.getOrCreateName(trueSuccessor) << ";\n";
-  os << "} else {\n";
+  os.unindent() << "} else {\n";
+  os.indent();
   // If condition is false.
   for (auto pair : llvm::zip(condBranchOp.getFalseOperands(),
                              falseSuccessor.getArguments())) {
@@ -285,7 +288,7 @@ static LogicalResult printOperation(CppEmitter &emitter,
            << "unable to find label for successor block";
   }
   os << emitter.getOrCreateName(falseSuccessor) << ";\n";
-  os << "}";
+  os.unindent() << "}";
   return success();
 }
 
@@ -876,7 +879,9 @@ LogicalResult CppEmitter::emitAssignPrefix(Operation &op) {
 LogicalResult CppEmitter::emitLabel(Block &block) {
   if (!hasBlockLabel(block))
     return block.getParentOp()->emitError("label for block not found");
-  os << getOrCreateName(block) << ":\n";
+  // FIXME: Add feature in `raw_indented_ostream` to ignore indent for block
+  // label instead of using `getOStream`.
+  os.getOStream() << getOrCreateName(block) << ":\n";
   return success();
 }