Integrate LLVM at https://github.com/llvm/llvm-project/commit/7f0d7f326316

PiperOrigin-RevId: 317270655
diff --git a/SUBMODULE_VERSIONS b/SUBMODULE_VERSIONS
index ed2dedc..6721473 100644
--- a/SUBMODULE_VERSIONS
+++ b/SUBMODULE_VERSIONS
@@ -3,7 +3,7 @@
 4c13807b7d43ff0946b7ffea0ae3aee9e611d778 third_party/dear_imgui
 a5d9d0f7d368054fd1691aedf1db4116efcc233e third_party/flatbuffers
 f2fb48c3b3d79a75a88a99fba6576b25d42ec528 third_party/googletest
-c830d517b4e46abb617a80b3967b26546370c928 third_party/llvm-project
+7f0d7f32631648acf48bc23047635ab5e2058a1a third_party/llvm-project
 17b12a4481daa150e2d1ea3ada086b551b856707 third_party/marl
 67f3ccebee84f3488b46a8d3ac005178c52ff264 third_party/mlir-emitc
 80d452484c5409444b0ec19383faa84bb7a4d351 third_party/pybind11
diff --git a/integrations/tensorflow/compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc b/integrations/tensorflow/compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc
index b9e9755..f70fcb2 100644
--- a/integrations/tensorflow/compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc
+++ b/integrations/tensorflow/compiler/dialect/tf_strings/conversion/convert_tf_to_tf_strings.cc
@@ -107,7 +107,8 @@
     target.addLegalDialect<tf_strings::TFStringsDialect>();
     target.addDynamicallyLegalOp<FuncOp>([](FuncOp op) {
       StringTypeConverter typeConverter;
-      return typeConverter.isSignatureLegal(op.getType());
+      return typeConverter.isSignatureLegal(op.getType()) &&
+             typeConverter.isLegal(&op.getBody());
     });
 
     target.addDynamicallyLegalOp<ReturnOp>([](ReturnOp op) {
@@ -127,8 +128,8 @@
     populateCallOpTypeConversionPattern(patterns, &getContext(), typeConverter);
     populateTFToTFStringsPatterns(&getContext(), patterns);
 
-    auto result = applyPartialConversion(module.getOperation(), target,
-                                         patterns, &typeConverter);
+    auto result =
+        applyPartialConversion(module.getOperation(), target, patterns);
 
     // Partial conversion doesn't include return types. Update in a separate
     // walk.
diff --git a/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp b/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp
index 943d296..d2ab95e 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/ConvertToLLVM.cpp
@@ -149,10 +149,8 @@
   patterns.insert<ConvertRankedDimPattern, ConvertTieShapePattern,
                   RemoveMakeRankedShape>(&getContext(), converter);
   LLVMConversionTarget target(getContext());
-  target.addDynamicallyLegalOp<FuncOp>(
-      [&](FuncOp op) { return converter.isSignatureLegal(op.getType()); });
   target.addLegalOp<ModuleOp, ModuleTerminatorOp>();
-  if (failed(applyPartialConversion(module, target, patterns, &converter)))
+  if (failed(applyPartialConversion(module, target, patterns)))
     signalPassFailure();
 }
 
diff --git a/iree/compiler/Conversion/LinalgToLLVM/HALInterfaceToMemrefArguments.cpp b/iree/compiler/Conversion/LinalgToLLVM/HALInterfaceToMemrefArguments.cpp
index d3f6bf2..ac968e4 100644
--- a/iree/compiler/Conversion/LinalgToLLVM/HALInterfaceToMemrefArguments.cpp
+++ b/iree/compiler/Conversion/LinalgToLLVM/HALInterfaceToMemrefArguments.cpp
@@ -210,7 +210,7 @@
     // Allow the rest.
     target.markUnknownOpDynamicallyLegal([](Operation*) { return true; });
 
-    if (failed(applyFullConversion(getOperation(), target, patterns, nullptr)))
+    if (failed(applyFullConversion(getOperation(), target, patterns)))
       return signalPassFailure();
   }
 };
diff --git a/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp b/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp
index 199ca2c..399b3f5 100644
--- a/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp
+++ b/iree/compiler/Conversion/LinalgToSPIRV/ConvertToSPIRVPass.cpp
@@ -412,7 +412,7 @@
   }
 
   for (FuncOp fn : functions)
-    if (failed(applyFullConversion(fn, *target, patterns, &typeConverter)))
+    if (failed(applyFullConversion(fn, *target, patterns)))
       return signalPassFailure();
 
   // Collect all SPIR-V ops into a spv.module.
diff --git a/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp b/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp
index e17225e..634d3f8 100644
--- a/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp
+++ b/iree/compiler/Dialect/Flow/Transforms/PrePostPartitioningConversion.cpp
@@ -65,7 +65,6 @@
  public:
   void runOnFunction() override {
     auto *context = &getContext();
-    FlowTypeConverter typeConverter;
     ConversionTarget conversionTarget(*context);
     OwningRewritePatternList conversionPatterns;
 
@@ -101,7 +100,7 @@
     populateStandardToFlowPatterns(context, conversionPatterns);
 
     if (failed(applyPartialConversion(getFunction(), conversionTarget,
-                                      conversionPatterns, &typeConverter))) {
+                                      conversionPatterns))) {
       getFunction().emitError() << "module is not in a compatible input format";
       return signalPassFailure();
     }
@@ -134,7 +133,6 @@
   void runOnFunction() override {
     auto *context = &getContext();
     ConversionTarget conversionTarget(getContext());
-    FlowTypeConverter typeConverter;
     OwningRewritePatternList conversionPatterns;
 
     // We have completed all flow op creation at this point.
@@ -152,7 +150,7 @@
     populateStandardToFlowPatterns(context, conversionPatterns);
 
     if (failed(applyPartialConversion(getFunction(), conversionTarget,
-                                      conversionPatterns, &typeConverter))) {
+                                      conversionPatterns))) {
       getFunction().emitError() << "module is not in a compatible input format";
       return signalPassFailure();
     }
diff --git a/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp b/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp
index c491097..0077be3 100644
--- a/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/ConversionTarget.cpp
@@ -55,8 +55,10 @@
   addLegalOp<IREE::HAL::ExecutableOp>();
   markOpRecursivelyLegal<IREE::HAL::ExecutableOp>();
 
-  addDynamicallyLegalOp<FuncOp>(
-      [&](FuncOp op) { return typeConverter.isSignatureLegal(op.getType()); });
+  addDynamicallyLegalOp<FuncOp>([&](FuncOp op) {
+    return typeConverter.isSignatureLegal(op.getType()) &&
+           typeConverter.isLegal(&op.getBody());
+  });
   addDynamicallyLegalOp<ConstantOp>(
       [&](ConstantOp op) { return typeConverter.isLegal(op.getType()); });
 }
diff --git a/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertFlowToHAL.cpp b/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertFlowToHAL.cpp
index 5a2928e..b26f0f3 100644
--- a/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertFlowToHAL.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertFlowToHAL.cpp
@@ -108,8 +108,7 @@
     // NOTE: we allow ops that we don't know about to allow custom dialects
     // that don't need anything HAL-specific to pass through. This is handled by
     // the fallback type legality support of the
-    if (failed(applyPartialConversion(getOperation(), target, patterns,
-                                      &typeConverter))) {
+    if (failed(applyPartialConversion(getOperation(), target, patterns))) {
       return signalPassFailure();
     }
   }
diff --git a/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStructuralOps.cpp b/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStructuralOps.cpp
index 2b3a1a6..6e560af 100644
--- a/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStructuralOps.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/FlowToHAL/ConvertStructuralOps.cpp
@@ -63,7 +63,9 @@
                                 newFuncOp.end());
     newFuncOp.setType(rewriter.getFunctionType(newSignature.getConvertedTypes(),
                                                newResultTypes));
-    rewriter.applySignatureConversion(&newFuncOp.getBody(), newSignature);
+    if (failed(rewriter.convertRegionTypes(&newFuncOp.getBody(), converter,
+                                           &newSignature)))
+      return failure();
 
     rewriter.eraseOp(funcOp);
     return success();
diff --git a/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp b/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp
index 1ae740b..79e07c8 100644
--- a/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp
+++ b/iree/compiler/Dialect/HAL/Conversion/HALToVM/ConvertHALToVM.cpp
@@ -117,7 +117,7 @@
                             typeConverter);
 
     if (failed(applyPartialConversion(outerModuleOp, conversionTarget,
-                                      conversionPatterns, &typeConverter))) {
+                                      conversionPatterns))) {
       outerModuleOp.emitError() << "conversion to vm.module failed";
       return signalPassFailure();
     }
diff --git a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp
index 996b93b..72358a0 100644
--- a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVM.cpp
@@ -88,7 +88,6 @@
       FuncOp srcOp, ArrayRef<Value> operands,
       ConversionPatternRewriter &rewriter) const override {
     FunctionType srcFuncType = srcOp.getType();
-    VMTypeConverter typeConverter;
     TypeConverter::SignatureConversion signatureConversion(
         srcOp.getNumArguments());
 
@@ -130,8 +129,10 @@
     }
 
     // Tell the rewriter to convert the region signature.
-    rewriter.applySignatureConversion(&newFuncOp.getBody(),
-                                      signatureConversion);
+    if (failed(rewriter.convertRegionTypes(&newFuncOp.getBody(), typeConverter,
+                                           &signatureConversion))) {
+      return failure();
+    }
 
     // Also add an export for the "raw" form of this function, which operates
     // on low level VM types and does no verification. A later pass will
@@ -151,6 +152,8 @@
     rewriter.replaceOp(srcOp, llvm::None);
     return success();
   }
+
+  mutable VMTypeConverter typeConverter;
 };
 
 class ReturnOpConversion : public OpConversionPattern<mlir::ReturnOp> {
diff --git a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp
index 730dbde..7f71bb0 100644
--- a/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp
+++ b/iree/compiler/Dialect/VM/Conversion/StandardToVM/ConvertStandardToVMTest.cpp
@@ -37,13 +37,10 @@
     OwningRewritePatternList patterns;
     populateStandardToVMPatterns(&getContext(), patterns);
 
-    VMTypeConverter typeConverter;
-
     // NOTE: we allow other dialects besides just VM during this pass as we are
     // only trying to eliminate the std ops. When used as part of a larger set
     // of rewrites a full conversion should be used instead.
-    if (failed(applyPartialConversion(getOperation(), target, patterns,
-                                      &typeConverter))) {
+    if (failed(applyPartialConversion(getOperation(), target, patterns))) {
       return signalPassFailure();
     }
   }
diff --git a/iree/compiler/Dialect/VM/Transforms/Conversion.cpp b/iree/compiler/Dialect/VM/Transforms/Conversion.cpp
index 74a7076..36e6f5f 100644
--- a/iree/compiler/Dialect/VM/Transforms/Conversion.cpp
+++ b/iree/compiler/Dialect/VM/Transforms/Conversion.cpp
@@ -120,7 +120,7 @@
     setupCompilerHintsLegality(context, conversionTarget, typeConverter);
 
     if (failed(applyPartialConversion(outerModuleOp, conversionTarget,
-                                      conversionPatterns, &typeConverter))) {
+                                      conversionPatterns))) {
       outerModuleOp.emitError() << "conversion to vm.module failed";
       return signalPassFailure();
     }
diff --git a/iree/compiler/Dialect/VMLA/Conversion/ConversionTarget.cpp b/iree/compiler/Dialect/VMLA/Conversion/ConversionTarget.cpp
index ca8e7f9..5000418 100644
--- a/iree/compiler/Dialect/VMLA/Conversion/ConversionTarget.cpp
+++ b/iree/compiler/Dialect/VMLA/Conversion/ConversionTarget.cpp
@@ -46,8 +46,10 @@
   // Allow other ops to pass through so long as their type is valid (not a
   // tensor, basically).
   markUnknownOpDynamicallyLegal();
-  addDynamicallyLegalOp<FuncOp>(
-      [&](FuncOp op) { return typeConverter.isSignatureLegal(op.getType()); });
+  addDynamicallyLegalOp<FuncOp>([&](FuncOp op) {
+    return typeConverter.isSignatureLegal(op.getType()) &&
+           typeConverter.isLegal(&op.getBody());
+  });
   addDynamicallyLegalOp<ConstantOp>(
       [&](ConstantOp op) { return typeConverter.isLegal(op.getType()); });
   addLegalOp<ReturnOp>();
diff --git a/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp b/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp
index ff225fe..fd844a5 100644
--- a/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp
+++ b/iree/compiler/Dialect/VMLA/Conversion/VMLAToVM/ConvertVMLAToVM.cpp
@@ -365,7 +365,7 @@
     Shape::populateFoldConversionPatterns(&getContext(), conversionPatterns);
 
     if (failed(applyPartialConversion(outerModuleOp, conversionTarget,
-                                      conversionPatterns, &typeConverter))) {
+                                      conversionPatterns))) {
       outerModuleOp.emitError() << "conversion to vm.module failed";
       return signalPassFailure();
     }
diff --git a/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp b/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp
index b938fb8..6b51351 100644
--- a/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp
+++ b/iree/compiler/Dialect/VMLA/Transforms/Conversion.cpp
@@ -121,7 +121,7 @@
     conversionTarget.addIllegalOp<Shape::RankedBroadcastInDimOp>();
 
     if (failed(applyPartialConversion(getOperation(), conversionTarget,
-                                      conversionPatterns, &typeConverter))) {
+                                      conversionPatterns))) {
       getOperation().emitError() << "conversion to the VMLA dialect failed";
       return signalPassFailure();
     }