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();
}