diff --git a/compiler/src/iree/compiler/Codegen/Common/EmulateNarrowType.cpp b/compiler/src/iree/compiler/Codegen/Common/EmulateNarrowType.cpp index 1824fb08bb17..e2c8805d270c 100644 --- a/compiler/src/iree/compiler/Codegen/Common/EmulateNarrowType.cpp +++ b/compiler/src/iree/compiler/Codegen/Common/EmulateNarrowType.cpp @@ -146,7 +146,7 @@ struct EmulateNarrowTypePass final } RewritePatternSet sinkBroadcast(ctx); - vector::populateSinkVectorBroadcastPatterns(sinkBroadcast); + vector::populateSinkVectorOpsPatterns(sinkBroadcast); if (failed(applyPatternsAndFoldGreedily(getOperation(), std::move(sinkBroadcast)))) { getOperation()->emitOpError("failed in sinking of broadcasts"); diff --git a/compiler/src/iree/compiler/Codegen/Common/GenericVectorization.cpp b/compiler/src/iree/compiler/Codegen/Common/GenericVectorization.cpp index 98814d134268..8aee5ba2c0e4 100644 --- a/compiler/src/iree/compiler/Codegen/Common/GenericVectorization.cpp +++ b/compiler/src/iree/compiler/Codegen/Common/GenericVectorization.cpp @@ -409,6 +409,7 @@ void GenericVectorizationPass::runOnOperation() { vector::populateVectorTransferPermutationMapLoweringPatterns( vectorizationPatterns); vector::populateVectorReductionToContractPatterns(vectorizationPatterns); + vector::populateSinkVectorOpsPatterns(vectorizationPatterns); } if (foldCastIntoContract) { vector::populateFoldArithExtensionPatterns(vectorizationPatterns); diff --git a/compiler/src/iree/compiler/Codegen/LLVMGPU/ConvertToNVVM.cpp b/compiler/src/iree/compiler/Codegen/LLVMGPU/ConvertToNVVM.cpp index b1ac58b1b62f..16cc62f9a734 100644 --- a/compiler/src/iree/compiler/Codegen/LLVMGPU/ConvertToNVVM.cpp +++ b/compiler/src/iree/compiler/Codegen/LLVMGPU/ConvertToNVVM.cpp @@ -167,7 +167,7 @@ struct ConvertToNVVMPass final LLVM::RoundEvenOp, LLVM::RoundOp, LLVM::SinOp, LLVM::SqrtOp>(); // TODO: Remove once we support replacing non-root ops. - target.addLegalOp(); + target.addLegalOp(); if (failed(applyPartialConversion(m, target, std::move(llvmPatterns)))) { signalPassFailure(); diff --git a/compiler/src/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp b/compiler/src/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp index aa72280e5fcc..f00af4284543 100644 --- a/compiler/src/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp +++ b/compiler/src/iree/compiler/Codegen/LLVMGPU/LLVMGPUTensorCoreVectorization.cpp @@ -96,6 +96,7 @@ class LLVMGPUTensorCoreVectorizationPass final vector::populateVectorTransferPermutationMapLoweringPatterns( contractionPatterns); vector::populateVectorReductionToContractPatterns(contractionPatterns); + vector::populateSinkVectorOpsPatterns(contractionPatterns); if (failed(applyPatternsAndFoldGreedily( funcOp, std::move(contractionPatterns)))) { return signalPassFailure(); diff --git a/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVInitialVectorLowering.cpp b/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVInitialVectorLowering.cpp index 493894675cd3..c24da496891d 100644 --- a/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVInitialVectorLowering.cpp +++ b/compiler/src/iree/compiler/Codegen/SPIRV/SPIRVInitialVectorLowering.cpp @@ -314,6 +314,7 @@ class SPIRVInitialLoweringPass final // cancel them or embed into contract ops. Embedding in the flexible // contract ops will help to sustain the structure through various // transformations. + vector::populateSinkVectorOpsPatterns(patterns); vector::populateVectorReductionToContractPatterns(patterns); // Pull in patterns to canonicalize transfer ops. vector::populateVectorTransferPermutationMapLoweringPatterns(patterns); diff --git a/compiler/src/iree/compiler/Tools/BUILD.bazel b/compiler/src/iree/compiler/Tools/BUILD.bazel index ee5d60dccfff..94d655486068 100644 --- a/compiler/src/iree/compiler/Tools/BUILD.bazel +++ b/compiler/src/iree/compiler/Tools/BUILD.bazel @@ -105,6 +105,7 @@ iree_compiler_cc_library( "@llvm-project//mlir:GPUTransforms", "@llvm-project//mlir:IR", "@llvm-project//mlir:LLVMDialect", + "@llvm-project//mlir:LLVMIRTransforms", "@llvm-project//mlir:LinalgDialect", "@llvm-project//mlir:LinalgPassIncGen", "@llvm-project//mlir:LinalgTransforms", diff --git a/compiler/src/iree/compiler/Tools/CMakeLists.txt b/compiler/src/iree/compiler/Tools/CMakeLists.txt index c8531f6ca1f5..d9033ba99cee 100644 --- a/compiler/src/iree/compiler/Tools/CMakeLists.txt +++ b/compiler/src/iree/compiler/Tools/CMakeLists.txt @@ -90,6 +90,7 @@ iree_cc_library( MLIRGPUToSPIRV MLIRIR MLIRLLVMDialect + MLIRLLVMIRTransforms MLIRLinalgDialect MLIRLinalgTransforms MLIRMLProgramDialect diff --git a/compiler/src/iree/compiler/Tools/init_mlir_dialects.h b/compiler/src/iree/compiler/Tools/init_mlir_dialects.h index 2148ff2e150a..6dde522a94ee 100644 --- a/compiler/src/iree/compiler/Tools/init_mlir_dialects.h +++ b/compiler/src/iree/compiler/Tools/init_mlir_dialects.h @@ -29,6 +29,7 @@ #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/GPU/TransformOps/GPUTransformOps.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" +#include "mlir/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/TransformOps/DialectExtension.h" #include "mlir/Dialect/MLProgram/IR/MLProgram.h" @@ -94,6 +95,7 @@ inline void registerMlirDialects(DialectRegistry ®istry) { // clang-format on cf::registerBufferizableOpInterfaceExternalModels(registry); func::registerInlinerExtension(registry); + LLVM::registerInlinerInterface(registry); tensor::registerInferTypeOpInterfaceExternalModels(registry); tensor::registerTilingInterfaceExternalModels(registry); diff --git a/llvm-external-projects/iree-dialects/BUILD.bazel b/llvm-external-projects/iree-dialects/BUILD.bazel index 680c4b038013..f1c279450fff 100644 --- a/llvm-external-projects/iree-dialects/BUILD.bazel +++ b/llvm-external-projects/iree-dialects/BUILD.bazel @@ -400,6 +400,8 @@ cc_binary( "@llvm-project//mlir:FuncExtensions", "@llvm-project//mlir:FunctionInterfaces", "@llvm-project//mlir:IR", + "@llvm-project//mlir:LLVMDialect", + "@llvm-project//mlir:LLVMIRTransforms", "@llvm-project//mlir:LinalgDialect", "@llvm-project//mlir:LinalgTransformOps", "@llvm-project//mlir:LinalgTransforms", diff --git a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt index 6515519f38c4..c687de7c0f0f 100644 --- a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt +++ b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/CMakeLists.txt @@ -13,6 +13,8 @@ set(LIBS MLIRFuncDialect MLIRFuncInlinerExtension MLIRIndexToLLVM + MLIRLLVMDialect + MLIRLLVMIRTransforms MLIRLinalgDialect MLIRLinalgTransformOps MLIRMemRefDialect diff --git a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp index 885d5839cb48..d42bfb624d93 100644 --- a/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp +++ b/llvm-external-projects/iree-dialects/tools/iree-dialects-opt/iree-dialects-opt.cpp @@ -13,6 +13,7 @@ #include "mlir/Dialect/ControlFlow/IR/ControlFlow.h" #include "mlir/Dialect/Func/Extensions/InlinerExtension.h" #include "mlir/Dialect/Func/IR/FuncOps.h" +#include "mlir/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" #include "mlir/Dialect/Linalg/TransformOps/DialectExtension.h" #include "mlir/Dialect/Linalg/TransformOps/LinalgTransformOps.h" @@ -74,6 +75,7 @@ int main(int argc, char **argv) { // External models. mlir::func::registerInlinerExtension(registry); + mlir::LLVM::registerInlinerInterface(registry); mlir::linalg::registerTilingInterfaceExternalModels(registry); registry.addExtensions(); diff --git a/third_party/llvm-project b/third_party/llvm-project index 6b7afaa9db8f..8835909fd7a9 160000 --- a/third_party/llvm-project +++ b/third_party/llvm-project @@ -1 +1 @@ -Subproject commit 6b7afaa9db8f904ebf0262774e38e54b36598782 +Subproject commit 8835909fd7a905712143e3f833b1fb57e5c6d2a7