Integrate llvm/llvm-project@279d294d26c3 (#11461)

* Reset third_party/llvm-project:
279d294d26c39e86dd7baabf5cd3385676d9a7a4 (2022-12-06 12:13:02 -0800):
Use consistent spacing before custom directives for op and attr/type
assemblyFormat.
* Updated tensorflow/tensorflow@1392623
* Updated tensorflow/mlir-hlo@2a102df
* Removed `let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed`
* Calling `mhlo::populateScalarHloToArithmeticConversionPatterns`

Co-authored-by: Hanhan Wang <hanchung@google.com>
diff --git a/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp b/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp
index 6bc9b7f..5413097 100644
--- a/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp
+++ b/compiler/src/iree/compiler/Codegen/Common/FlattenMemRefSubspanPass.cpp
@@ -463,7 +463,7 @@
 
     rewriter.replaceOpWithNewOp<gpu::SubgroupMmaStoreMatrixOp>(
         storeOp, adaptor.getSrc(), adaptor.getDstMemref(), linearIndex,
-        storeOp.getLeadDimension());
+        storeOp.getLeadDimension(), storeOp.getTransposeAttr());
     return success();
   }
 };
@@ -683,7 +683,8 @@
     } else if constexpr (std::is_same<OpType,
                                       gpu::SubgroupMmaStoreMatrixOp>::value) {
       rewriter.replaceOpWithNewOp<gpu::SubgroupMmaStoreMatrixOp>(
-          op, op.getSrc(), newSubspan, newIndex, op.getLeadDimension());
+          op, op.getSrc(), newSubspan, newIndex, op.getLeadDimension(),
+          op.getTransposeAttr());
     } else if constexpr (std::is_same<OpType, memref::LoadOp>::value) {
       rewriter.replaceOpWithNewOp<memref::LoadOp>(
           op, memrefType.getElementType(), ValueRange{newSubspan, newIndex});
diff --git a/compiler/src/iree/compiler/Codegen/Common/FoldAffineMinInDistributedLoops.cpp b/compiler/src/iree/compiler/Codegen/Common/FoldAffineMinInDistributedLoops.cpp
index 780ac60..d26fbd8 100644
--- a/compiler/src/iree/compiler/Codegen/Common/FoldAffineMinInDistributedLoops.cpp
+++ b/compiler/src/iree/compiler/Codegen/Common/FoldAffineMinInDistributedLoops.cpp
@@ -104,8 +104,8 @@
     };
 
     return scf::canonicalizeMinMaxOpInLoop(
-        rewriter, minOp, minOp.getAffineMap(), minOp.operands(), /*isMin=*/true,
-        loopMatcher);
+        rewriter, minOp, minOp.getAffineMap(), minOp.getOperands(),
+        /*isMin=*/true, loopMatcher);
   }
 };
 
diff --git a/compiler/src/iree/compiler/Codegen/Common/TileAndDistributeToWorkgroupsPass.cpp b/compiler/src/iree/compiler/Codegen/Common/TileAndDistributeToWorkgroupsPass.cpp
index 450dbd5..25180bf 100644
--- a/compiler/src/iree/compiler/Codegen/Common/TileAndDistributeToWorkgroupsPass.cpp
+++ b/compiler/src/iree/compiler/Codegen/Common/TileAndDistributeToWorkgroupsPass.cpp
@@ -154,7 +154,7 @@
   LogicalResult matchAndRewrite(
       IREE::Flow::DispatchWorkgroupCountFromDagRootOp workgroupCountOp,
       PatternRewriter &rewriter) const override {
-    auto workloadValues = workgroupCountOp.operands();
+    auto workloadValues = workgroupCountOp.getOperands();
     SmallVector<OpFoldResult> tileSizes = llvm::to_vector(llvm::map_range(
         givenTileSizes,
         [&](int64_t v) -> OpFoldResult { return rewriter.getIndexAttr(v); }));
diff --git a/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVVectorizeLoadStore.cpp b/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVVectorizeLoadStore.cpp
index edb28c2..bfb93dd 100644
--- a/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVVectorizeLoadStore.cpp
+++ b/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVVectorizeLoadStore.cpp
@@ -549,7 +549,7 @@
 
     rewriter.replaceOpWithNewOp<gpu::SubgroupMmaStoreMatrixOp>(
         storeOp, adaptor.getSrc(), adaptor.getDstMemref(), indices.value(),
-        newLeadDimSize);
+        newLeadDimSize, storeOp.getTransposeAttr());
     return success();
   }
 };
diff --git a/compiler/src/iree/compiler/Dialect/Flow/IR/FlowBase.td b/compiler/src/iree/compiler/Dialect/Flow/IR/FlowBase.td
index 7728ff6..4fa4144 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/IR/FlowBase.td
+++ b/compiler/src/iree/compiler/Dialect/Flow/IR/FlowBase.td
@@ -19,7 +19,6 @@
 def Flow_Dialect : Dialect {
   let name = "flow";
   let cppNamespace = "::mlir::iree_compiler::IREE::Flow";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     A dialect designed to model execution data flow and partitioning.
diff --git a/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOps.cpp b/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
index f7376d7..b2492f0 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/IR/FlowOps.cpp
@@ -452,7 +452,7 @@
     if (!unusedResults.contains(it.index()))
       yieldedValues.push_back(it.value());
   rewriter.updateRootInPlace(
-      returnOp, [&]() { returnOp.operandsMutable().assign(yieldedValues); });
+      returnOp, [&]() { returnOp.getOperandsMutable().assign(yieldedValues); });
 
   // Replace all uses of the old op.
   SmallVector<Value> replacements(regionOp->getNumResults(), nullptr);
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/ExpandTensorShapes.cpp b/compiler/src/iree/compiler/Dialect/Flow/Transforms/ExpandTensorShapes.cpp
index 2a0eb34..3f4110b 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/ExpandTensorShapes.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/ExpandTensorShapes.cpp
@@ -348,7 +348,7 @@
 
   // Build the new call op with expanded operands and results.
   OpBuilder builder(op);
-  auto operands = expandOperands(op.getLoc(), op.operands(), tensorDimMap,
+  auto operands = expandOperands(op.getLoc(), op.getOperands(), tensorDimMap,
                                  indexSet, builder);
   auto resultTypes = expandTypes(op.getResultTypes());
   auto newOp = builder.create<mlir::func::CallOp>(op.getLoc(), op.getCallee(),
@@ -394,7 +394,7 @@
                            TensorDimMap &tensorDimMap) {
   if (!usesDynamicTensors(op)) return;
   OpBuilder builder(op);
-  auto operands = expandOperands(op.getLoc(), op.operands(), tensorDimMap,
+  auto operands = expandOperands(op.getLoc(), op.getOperands(), tensorDimMap,
                                  indexSet, builder);
   builder.create<mlir::func::ReturnOp>(op.getLoc(), operands);
   op.erase();
diff --git a/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp b/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp
index 7bf7904..843ffad 100644
--- a/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp
+++ b/compiler/src/iree/compiler/Dialect/Flow/Transforms/RegionOpUtils.cpp
@@ -189,7 +189,7 @@
   SmallVector<Value> returnedValues(returnOp.getOperands().begin(),
                                     returnOp.getOperands().end());
   returnedValues.push_back(result);
-  returnOp.operandsMutable().assign(returnedValues);
+  returnOp.getOperandsMutable().assign(returnedValues);
 
   return newRegionOp;
 }
diff --git a/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/Patterns.cpp b/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/Patterns.cpp
index 644248d..8bcd7c9 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/Patterns.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/Conversion/StreamToHAL/Patterns.cpp
@@ -674,7 +674,7 @@
       IREE::Stream::TensorTraceOp traceOp, OpAdaptor adaptor,
       ConversionPatternRewriter &rewriter) const override {
     rewriter.replaceOpWithNewOp<IREE::HAL::BufferViewTraceOp>(
-        traceOp, traceOp.getKeyAttr(), adaptor.operands());
+        traceOp, traceOp.getKeyAttr(), adaptor.getOperands());
     return success();
   }
 };
diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/HALDialect.td b/compiler/src/iree/compiler/Dialect/HAL/IR/HALDialect.td
index 69ce6ac..b619186 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/HALDialect.td
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/HALDialect.td
@@ -16,7 +16,6 @@
 def HAL_Dialect : Dialect {
   let name = "hal";
   let cppNamespace = "::mlir::iree_compiler::IREE::HAL";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     A dialect representing operations against the IREE HAL.
diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp
index edb2fe9..c152b96 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOpFolders.cpp
@@ -654,7 +654,7 @@
     for (auto [i, operand] : llvm::enumerate(returnOp.getOperands())) {
       if (preservedIndices.test(i)) operands.push_back(operand);
     }
-    returnOp.operandsMutable().assign(operands);
+    returnOp.getOperandsMutable().assign(operands);
   }
 }
 
diff --git a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp
index 178ebfd..efa16f9 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/IR/HALOps.cpp
@@ -139,7 +139,8 @@
                               << op.getNumOperands() << ", expected "
                               << expectedTypes.size() << ")";
     }
-    for (auto pair : llvm::enumerate(llvm::zip(op.operands(), expectedTypes))) {
+    for (auto pair :
+         llvm::enumerate(llvm::zip(op.getOperands(), expectedTypes))) {
       auto operand = std::get<0>(pair.value());
       auto expectedType = std::get<1>(pair.value());
       if (operand.getType() != expectedType) {
@@ -754,7 +755,7 @@
   // TODO(ravishankarm): The SingleBlockImplicitTerminator<"HAL::ReturnOp">
   // should generate this check, but it doesnt.
   auto returnOp = dyn_cast<ReturnOp>(body->getTerminator());
-  if (!returnOp || returnOp.operands().size() != getNumWorkgroupDims()) {
+  if (!returnOp || returnOp.getOperands().size() != getNumWorkgroupDims()) {
     return op.emitOpError("expected operation to yield ")
            << getNumWorkgroupDims() << " values";
   }
@@ -831,9 +832,9 @@
   auto returnOp = cast<IREE::HAL::ReturnOp>(body->getTerminator());
   assert(returnOp.getNumOperands() == 3 && "must return xyz");
   return {
-      bvm.lookup(returnOp.operands()[0]),
-      bvm.lookup(returnOp.operands()[1]),
-      bvm.lookup(returnOp.operands()[2]),
+      bvm.lookup(returnOp.getOperands()[0]),
+      bvm.lookup(returnOp.getOperands()[1]),
+      bvm.lookup(returnOp.getOperands()[2]),
   };
 }
 
diff --git a/compiler/src/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp b/compiler/src/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
index 85b808d..3e9eb13 100644
--- a/compiler/src/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
+++ b/compiler/src/iree/compiler/Dialect/HAL/Transforms/MaterializeInterfaces.cpp
@@ -348,7 +348,7 @@
   using OpRewritePattern<IREE::Stream::ReturnOp>::OpRewritePattern;
   LogicalResult matchAndRewrite(IREE::Stream::ReturnOp op,
                                 PatternRewriter &rewriter) const override {
-    rewriter.replaceOpWithNewOp<IREE::HAL::ReturnOp>(op, op.operands());
+    rewriter.replaceOpWithNewOp<IREE::HAL::ReturnOp>(op, op.getOperands());
     return success();
   }
 };
diff --git a/compiler/src/iree/compiler/Dialect/Stream/Conversion/FlowToStream/Patterns.cpp b/compiler/src/iree/compiler/Dialect/Stream/Conversion/FlowToStream/Patterns.cpp
index 2b96754..3b51b03 100644
--- a/compiler/src/iree/compiler/Dialect/Stream/Conversion/FlowToStream/Patterns.cpp
+++ b/compiler/src/iree/compiler/Dialect/Stream/Conversion/FlowToStream/Patterns.cpp
@@ -229,7 +229,7 @@
       IREE::Flow::TensorTraceOp op, OpAdaptor adaptor,
       ConversionPatternRewriter &rewriter) const override {
     SmallVector<Value> exportedTensors;
-    for (auto it : llvm::zip(op.operands(), adaptor.operands())) {
+    for (auto it : llvm::zip(op.getOperands(), adaptor.getOperands())) {
       auto tensorOperand = std::get<0>(it);
       auto resourceOperand = std::get<1>(it);
       auto source =
@@ -394,7 +394,7 @@
 static void convertReturnOps(Region &region) {
   region.walk([](IREE::Flow::ReturnOp oldOp) {
     OpBuilder(oldOp).create<IREE::Stream::ReturnOp>(oldOp.getLoc(),
-                                                    oldOp.operands());
+                                                    oldOp.getOperands());
     oldOp.erase();
   });
 }
@@ -479,7 +479,8 @@
   LogicalResult matchAndRewrite(
       IREE::Flow::ReturnOp op, OpAdaptor adaptor,
       ConversionPatternRewriter &rewriter) const override {
-    rewriter.replaceOpWithNewOp<IREE::Stream::ReturnOp>(op, adaptor.operands());
+    rewriter.replaceOpWithNewOp<IREE::Stream::ReturnOp>(op,
+                                                        adaptor.getOperands());
     return success();
   }
 };
diff --git a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamBase.td b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamBase.td
index 9167d93..e256aeb 100644
--- a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamBase.td
+++ b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamBase.td
@@ -23,7 +23,6 @@
 def Stream_Dialect : Dialect {
   let name = "stream";
   let cppNamespace = "::mlir::iree_compiler::IREE::Stream";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     A dialect designed to model execution partitioning and scheduling.
diff --git a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOpFolders.cpp b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOpFolders.cpp
index 76f80ec..1a2f70f 100644
--- a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOpFolders.cpp
+++ b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOpFolders.cpp
@@ -2251,7 +2251,7 @@
   if (auto importOp = dyn_cast_or_null<TimepointImportOp>(
           getAwaitTimepoint().getDefiningOp())) {
     if (llvm::equal(importOp.getOperandTypes(), getResultTypes())) {
-      llvm::append_range(results, importOp.operands());
+      llvm::append_range(results, importOp.getOperands());
       return success();
     }
   }
diff --git a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOps.cpp b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOps.cpp
index d668223..728b912 100644
--- a/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOps.cpp
+++ b/compiler/src/iree/compiler/Dialect/Stream/IR/StreamOps.cpp
@@ -2623,7 +2623,7 @@
 
 MutableOperandRange ReturnOp::getMutableSuccessorOperands(
     Optional<unsigned> index) {
-  return operandsMutable();
+  return getOperandsMutable();
 }
 
 //===----------------------------------------------------------------------===//
diff --git a/compiler/src/iree/compiler/Dialect/Stream/Transforms/PropagateTimepoints.cpp b/compiler/src/iree/compiler/Dialect/Stream/Transforms/PropagateTimepoints.cpp
index ac02b17..7c91b76 100644
--- a/compiler/src/iree/compiler/Dialect/Stream/Transforms/PropagateTimepoints.cpp
+++ b/compiler/src/iree/compiler/Dialect/Stream/Transforms/PropagateTimepoints.cpp
@@ -418,8 +418,8 @@
 
   // Build the new call op with expanded operands and results.
   OpBuilder builder(op);
-  auto operands =
-      expandOperands(op.getLoc(), op.operands(), resourceTimepointMap, builder);
+  auto operands = expandOperands(op.getLoc(), op.getOperands(),
+                                 resourceTimepointMap, builder);
   auto resultTypes = expandTypes(op.getResultTypes());
   auto newOp = builder.create<mlir::func::CallOp>(op.getLoc(), op.getCallee(),
                                                   resultTypes, operands);
@@ -464,8 +464,8 @@
   if (!usesResources(op)) return;
   if (isPublicOrExternal(op->getParentOfType<mlir::func::FuncOp>())) return;
   OpBuilder builder(op);
-  auto operands =
-      expandOperands(op.getLoc(), op.operands(), resourceTimepointMap, builder);
+  auto operands = expandOperands(op.getLoc(), op.getOperands(),
+                                 resourceTimepointMap, builder);
   builder.create<mlir::func::ReturnOp>(op.getLoc(), operands);
   op.erase();
 }
diff --git a/compiler/src/iree/compiler/Dialect/Util/Conversion/ConversionPatterns.cpp b/compiler/src/iree/compiler/Dialect/Util/Conversion/ConversionPatterns.cpp
index 0913855..77b2606 100644
--- a/compiler/src/iree/compiler/Dialect/Util/Conversion/ConversionPatterns.cpp
+++ b/compiler/src/iree/compiler/Dialect/Util/Conversion/ConversionPatterns.cpp
@@ -149,7 +149,7 @@
       return rewriter.notifyMatchFailure(op, "unable to convert result types");
     }
     rewriter.replaceOpWithNewOp<mlir::func::CallOp>(
-        op, resultTypes, op.getCallee(), adaptor.operands());
+        op, resultTypes, op.getCallee(), adaptor.getOperands());
     return success();
   }
 };
@@ -160,7 +160,7 @@
       mlir::func::ReturnOp returnOp, OpAdaptor adaptor,
       ConversionPatternRewriter &rewriter) const override {
     rewriter.replaceOpWithNewOp<mlir::func::ReturnOp>(returnOp,
-                                                      adaptor.operands());
+                                                      adaptor.getOperands());
     return success();
   }
 };
diff --git a/compiler/src/iree/compiler/Dialect/Util/IR/UtilBase.td b/compiler/src/iree/compiler/Dialect/Util/IR/UtilBase.td
index a5246fa..bbf52f8 100644
--- a/compiler/src/iree/compiler/Dialect/Util/IR/UtilBase.td
+++ b/compiler/src/iree/compiler/Dialect/Util/IR/UtilBase.td
@@ -17,7 +17,6 @@
 def Util_Dialect : Dialect {
   let name = "util";
   let cppNamespace = "::mlir::iree_compiler::IREE::Util";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     A dialect used for types common across IREE subdialects.
diff --git a/compiler/src/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp b/compiler/src/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp
index 461eeb2..ab3192e 100644
--- a/compiler/src/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp
+++ b/compiler/src/iree/compiler/Dialect/Util/IR/UtilOpFolders.cpp
@@ -73,11 +73,11 @@
 }
 
 OpFoldResult RangeMinOp::fold(ArrayRef<Attribute> operands) {
-  return foldRangeOp<INT64_MAX, xmin>(getType(), this->operands(), operands);
+  return foldRangeOp<INT64_MAX, xmin>(getType(), this->getOperands(), operands);
 }
 
 OpFoldResult RangeMaxOp::fold(ArrayRef<Attribute> operands) {
-  return foldRangeOp<INT64_MIN, xmax>(getType(), this->operands(), operands);
+  return foldRangeOp<INT64_MIN, xmax>(getType(), this->getOperands(), operands);
 }
 
 namespace {
@@ -129,7 +129,7 @@
       }
     }
     if (operands.size() + (constantValue != initialValue ? 1 : 0) ==
-        op.operands().size()) {
+        op.getOperands().size()) {
       // No change in operand count.
       return failure();
     }
diff --git a/compiler/src/iree/compiler/Dialect/Util/Transforms/IPO.cpp b/compiler/src/iree/compiler/Dialect/Util/Transforms/IPO.cpp
index b0e2f1c..52cc4ea 100644
--- a/compiler/src/iree/compiler/Dialect/Util/Transforms/IPO.cpp
+++ b/compiler/src/iree/compiler/Dialect/Util/Transforms/IPO.cpp
@@ -461,7 +461,7 @@
   // Erase dead results from all return sites.
   funcOp.walk([&](func::ReturnOp returnOp) {
     for (int i = deadResults.size() - 1; i >= 0; --i) {
-      if (deadResults.test(i)) returnOp.operandsMutable().erase(i);
+      if (deadResults.test(i)) returnOp.getOperandsMutable().erase(i);
     }
   });
 
diff --git a/compiler/src/iree/compiler/Dialect/Util/Transforms/PropagateSubranges.cpp b/compiler/src/iree/compiler/Dialect/Util/Transforms/PropagateSubranges.cpp
index af0cbc6..19cee25 100644
--- a/compiler/src/iree/compiler/Dialect/Util/Transforms/PropagateSubranges.cpp
+++ b/compiler/src/iree/compiler/Dialect/Util/Transforms/PropagateSubranges.cpp
@@ -454,7 +454,7 @@
 
   // Build the new call op with expanded operands and results.
   OpBuilder builder(op);
-  auto operands = expandOperands(op.getLoc(), op.operands(), subrangeMap,
+  auto operands = expandOperands(op.getLoc(), op.getOperands(), subrangeMap,
                                  indexSet, builder);
   auto resultTypes = expandTypes(op.getResultTypes());
   auto newOp = builder.create<mlir::func::CallOp>(op.getLoc(), op.getCallee(),
@@ -501,7 +501,7 @@
   if (!usesResources(op)) return;
   if (isPublicOrExternal(op->getParentOfType<mlir::func::FuncOp>())) return;
   OpBuilder builder(op);
-  auto operands = expandOperands(op.getLoc(), op.operands(), subrangeMap,
+  auto operands = expandOperands(op.getLoc(), op.getOperands(), subrangeMap,
                                  indexSet, builder);
   builder.create<mlir::func::ReturnOp>(op.getLoc(), operands);
   op.erase();
diff --git a/compiler/src/iree/compiler/Dialect/VM/IR/VMBase.td b/compiler/src/iree/compiler/Dialect/VM/IR/VMBase.td
index 1255449..6d813f0 100644
--- a/compiler/src/iree/compiler/Dialect/VM/IR/VMBase.td
+++ b/compiler/src/iree/compiler/Dialect/VM/IR/VMBase.td
@@ -16,7 +16,6 @@
 def VM_Dialect : Dialect {
   let name = "vm";
   let cppNamespace = "::mlir::iree_compiler::IREE::VM";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     A dialect representing operations against an abstract virtual machine.
diff --git a/compiler/src/iree/compiler/Dialect/VMVX/IR/VMVXBase.td b/compiler/src/iree/compiler/Dialect/VMVX/IR/VMVXBase.td
index 84db114..77c5fdf 100644
--- a/compiler/src/iree/compiler/Dialect/VMVX/IR/VMVXBase.td
+++ b/compiler/src/iree/compiler/Dialect/VMVX/IR/VMVXBase.td
@@ -17,7 +17,6 @@
 def VMVX_Dialect : Dialect {
   let name = "vmvx";
   let cppNamespace = "::mlir::iree_compiler::IREE::VMVX";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     Vector extensions to the IREE VM.
diff --git a/compiler/src/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp b/compiler/src/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp
index e53811d..f8aadfa 100644
--- a/compiler/src/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp
+++ b/compiler/src/iree/compiler/InputConversion/MHLO/MHLOToLinalgOnTensors.cpp
@@ -358,6 +358,9 @@
     populateMHLOToFlowPatterns(context, patterns);
     chlo::populateDecomposeChloPatterns(context, &patterns);
     populateMHLOBroadcastingToLinalgPatterns(context, *typeConverter, patterns);
+    mhlo::populateScalarHloToArithmeticConversionPatterns(
+        context, *typeConverter, &patterns,
+        [](Operation *op) { return mhlo::isInBodyOfLinalgOps(op); });
     populateMHLOToLinalgOnTensorsConversionPatterns(context, *typeConverter,
                                                     patterns);
     populateMHLOComplexToRealPatterns(context, *typeConverter, patterns);
diff --git a/compiler/src/iree/compiler/Modules/HAL/Inline/IR/HALInlineBase.td b/compiler/src/iree/compiler/Modules/HAL/Inline/IR/HALInlineBase.td
index c8bb807..81cba90 100644
--- a/compiler/src/iree/compiler/Modules/HAL/Inline/IR/HALInlineBase.td
+++ b/compiler/src/iree/compiler/Modules/HAL/Inline/IR/HALInlineBase.td
@@ -16,7 +16,6 @@
 def HALInline_Dialect : Dialect {
   let name = "hal_inline";
   let cppNamespace = "::mlir::iree_compiler::IREE::HAL::Inline";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     IREE inline HAL interop runtime module dialect.
diff --git a/compiler/src/iree/compiler/Modules/HAL/Loader/IR/HALLoaderBase.td b/compiler/src/iree/compiler/Modules/HAL/Loader/IR/HALLoaderBase.td
index 13a4f93..6b7bc3a 100644
--- a/compiler/src/iree/compiler/Modules/HAL/Loader/IR/HALLoaderBase.td
+++ b/compiler/src/iree/compiler/Modules/HAL/Loader/IR/HALLoaderBase.td
@@ -16,7 +16,6 @@
 def HALLoader_Dialect : Dialect {
   let name = "hal_loader";
   let cppNamespace = "::mlir::iree_compiler::IREE::HAL::Loader";
-  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
 
   let summary = [{
     IREE HAL inline executable loader runtime module dialect.
diff --git a/integrations/tensorflow/WORKSPACE b/integrations/tensorflow/WORKSPACE
index e1b8fc6..ec469ab 100644
--- a/integrations/tensorflow/WORKSPACE
+++ b/integrations/tensorflow/WORKSPACE
@@ -7,7 +7,7 @@
 
 load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
 
-TENSORFLOW_COMMIT = "a4ed969207533e0e82cdda414d1eb78cb1072f6d"
+TENSORFLOW_COMMIT = "139262352e646b622ea7275815097fc162f1f8b9"
 
 git_repository(
     name = "org_tensorflow",
diff --git a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Transforms.cpp b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Transforms.cpp
index 725d2ad..619345a 100644
--- a/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Transforms.cpp
+++ b/llvm-external-projects/iree-dialects/lib/Dialect/LinalgExt/Transforms/Transforms.cpp
@@ -9,7 +9,6 @@
 #include "iree-dialects/Dialect/LinalgExt/IR/LinalgExtOps.h"
 #include "iree-dialects/Dialect/LinalgExt/Passes/PassDetail.h"
 #include "iree-dialects/Dialect/LinalgExt/Passes/Passes.h"
-#include "iree-dialects/Dialect/LinalgExt/Passes/Transforms.h"
 #include "iree-dialects/Dialect/LinalgExt/Utils/Utils.h"
 #include "mlir/Dialect/Affine/IR/AffineOps.h"
 #include "mlir/Dialect/Affine/LoopUtils.h"
@@ -21,7 +20,6 @@
 #include "mlir/Dialect/Tensor/Utils/Utils.h"
 #include "mlir/Dialect/Utils/IndexingUtils.h"
 #include "mlir/Dialect/Utils/StaticValueUtils.h"
-#include "mlir/Dialect/Vector/Transforms/VectorTransforms.h"
 #include "mlir/IR/PatternMatch.h"
 #include "mlir/Pass/PassManager.h"
 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
@@ -45,7 +43,7 @@
     const Optional<linalg::LinalgLoopDistributionOptions> &tileDistribution) {
   assert(tileSizes.size() == tileInterchange.size() &&
          "expect the number of tile sizes and interchange dims to match");
-  assert(linalg::isPermutation(tileInterchange) &&
+  assert(isPermutationVector(tileInterchange) &&
          "expect tile interchange is a permutation");
 
   // Create an empty tile loop nest.
diff --git a/third_party/llvm-project b/third_party/llvm-project
index ca23b7c..279d294 160000
--- a/third_party/llvm-project
+++ b/third_party/llvm-project
@@ -1 +1 @@
-Subproject commit ca23b7ca476fb66771d1c6d02c6837938fde6c7e
+Subproject commit 279d294d26c39e86dd7baabf5cd3385676d9a7a4
diff --git a/third_party/mlir-hlo b/third_party/mlir-hlo
index 9e3d164..2a102df 160000
--- a/third_party/mlir-hlo
+++ b/third_party/mlir-hlo
@@ -1 +1 @@
-Subproject commit 9e3d164c0e7f4bd4eee80ce95cef0941755d5a8e
+Subproject commit 2a102dfc718c48e52c79de37557f29b3f76d0e9a