Commit aff4ed73 authored by River Riddle's avatar River Riddle
Browse files

[mlir][NFC] Update Operation::getResultTypes to use ArrayRef<Type> instead of iterator_range.

Summary: The new internal representation of operation results now allows for accessing the result types to be more efficient. Changing the API to ArrayRef is more efficient and removes the need to explicitly materialize vectors in several places.

Differential Revision: https://reviews.llvm.org/D73429
parent ce674b13
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -191,6 +191,10 @@ operator<<(OpAsmPrinter &p,
  interleaveComma(types, p);
  return p;
}
inline OpAsmPrinter &operator<<(OpAsmPrinter &p, ArrayRef<Type> types) {
  interleaveComma(types, p);
  return p;
}

//===----------------------------------------------------------------------===//
// OpAsmParser
+4 −4
Original line number Diff line number Diff line
@@ -260,10 +260,10 @@ public:

  /// Support result type iteration.
  using result_type_iterator = result_range::type_iterator;
  using result_type_range = iterator_range<result_type_iterator>;
  result_type_iterator result_type_begin() { return result_begin(); }
  result_type_iterator result_type_end() { return result_end(); }
  result_type_range getResultTypes() { return getResults().getTypes(); }
  using result_type_range = ArrayRef<Type>;
  result_type_iterator result_type_begin() { return getResultTypes().begin(); }
  result_type_iterator result_type_end() { return getResultTypes().end(); }
  result_type_range getResultTypes();

  //===--------------------------------------------------------------------===//
  // Attributes
+2 −2
Original line number Diff line number Diff line
@@ -595,8 +595,8 @@ public:
  ResultRange(Operation *op);

  /// Returns the types of the values within this range.
  using type_iterator = ValueTypeIterator<iterator>;
  iterator_range<type_iterator> getTypes() const { return {begin(), end()}; }
  using type_iterator = ArrayRef<Type>::iterator;
  ArrayRef<Type> getTypes() const;

private:
  /// See `indexed_accessor_range` for details.
+2 −2
Original line number Diff line number Diff line
@@ -53,8 +53,8 @@ LogicalResult mlir::detail::verifyInferredResultTypes(Operation *op) {
                                        op->getOperands(), op->getAttrs(),
                                        op->getRegions(), inferedReturnTypes)))
    return failure();
  SmallVector<Type, 4> resultTypes(op->getResultTypes());
  if (!retTypeFn.isCompatibleReturnTypes(inferedReturnTypes, resultTypes))
  if (!retTypeFn.isCompatibleReturnTypes(inferedReturnTypes,
                                         op->getResultTypes()))
    return op->emitOpError(
        "inferred type incompatible with return type of operation");
  return success();
+1 −2
Original line number Diff line number Diff line
@@ -652,8 +652,7 @@ struct OneToOneLLVMOpLowering : public LLVMLegalizationPattern<SourceOp> {

    Type packedType;
    if (numResults != 0) {
      packedType = this->lowering.packFunctionResults(
          llvm::to_vector<4>(op->getResultTypes()));
      packedType = this->lowering.packFunctionResults(op->getResultTypes());
      if (!packedType)
        return this->matchFailure();
    }
Loading