From f5ee7354284987cb0449c2c4be5a7b81717babaf Mon Sep 17 00:00:00 2001 From: "A. Unique TensorFlower" Date: Sun, 12 Apr 2020 22:11:54 -0700 Subject: [PATCH] Updated for changes in LLVM 7a45aeacf3a2. - The deprecated CreateCall(Value*, ...) IRBuilder API has been removed. - Renamed applyPatternsGreedily to applyPatternsAndFoldGreedily in MLIR. - Update MLIR users after adding support for optional operands/results to ODS (upstream aba1acc89c653b2cc08cccfb754ff16994a05332) - Other updates to BUILD files for upstream changes. PiperOrigin-RevId: 306177884 Change-Id: Idae1009ba89caf296758748ab7aa57815d946a0c --- .../compiler/mlir/lite/converter_gen.cc | 4 ++-- .../quantization/tensorflow/tf_to_quant.cc | 2 +- .../mlir/lite/transforms/dilated_conv.cc | 2 +- .../compiler/mlir/lite/transforms/optimize.cc | 4 ++-- .../transforms/optimize_functional_ops.cc | 2 +- .../mlir/lite/transforms/post_quantize.cc | 2 +- .../mlir/lite/transforms/prepare_quantize.cc | 2 +- .../mlir/lite/transforms/prepare_tf.cc | 8 +++---- .../compiler/mlir/lite/transforms/quantize.cc | 2 +- .../transforms/batchmatmul_to_einsum.cc | 2 +- .../transforms/decompose_resource_ops_pass.cc | 2 +- .../mlir/tensorflow/transforms/einsum.cc | 2 +- .../mlir/tensorflow/transforms/gpu_fusion.cc | 2 +- .../tensorflow/transforms/lower_tf_pass.cc | 2 +- .../mlir/tensorflow/transforms/optimize.cc | 2 +- .../transforms/unroll_batch_matmul.cc | 2 +- .../compiler/mlir/xla/operator_writer_gen.cc | 4 ++-- .../xla/transforms/legalize_to_standard.cc | 2 +- .../xla/transforms/lhlo_legalize_to_affine.cc | 2 +- .../mlir/xla/transforms/lower_complex.cc | 2 +- .../mlir/xla/transforms/lower_general_dot.cc | 2 +- .../xla/transforms/unfuse_batch_norm_pass.cc | 2 +- .../xla/service/llvm_ir/ir_builder_mixin.h | 22 ++++++++++++++++++- third_party/mlir/BUILD | 14 ++++++++++++ 24 files changed, 63 insertions(+), 29 deletions(-) diff --git a/tensorflow/compiler/mlir/lite/converter_gen.cc b/tensorflow/compiler/mlir/lite/converter_gen.cc index bbbd2733932..a5455dccb30 100644 --- a/tensorflow/compiler/mlir/lite/converter_gen.cc +++ b/tensorflow/compiler/mlir/lite/converter_gen.cc @@ -496,7 +496,7 @@ static bool RuntimeVerifierWriterMain(raw_ostream &os, RecordKeeper &records) { auto &value = op.getOperand(i); // Skip from from first variadic operands for now. Else getOperand index // used below doesn't match. - if (value.isVariadic()) break; + if (value.isVariableLength()) break; if (!value.name.empty()) verify_ctx.addSubst(value.name, formatv("op->getOperand({0})", i)); } @@ -504,7 +504,7 @@ static bool RuntimeVerifierWriterMain(raw_ostream &os, RecordKeeper &records) { auto &value = op.getResult(i); // Skip from from first variadic results for now. Else getResult index // used below doesn't match. - if (value.isVariadic()) break; + if (value.isVariableLength()) break; if (!value.name.empty()) verify_ctx.addSubst(value.name, formatv("op->getResult({0})", i)); } diff --git a/tensorflow/compiler/mlir/lite/quantization/tensorflow/tf_to_quant.cc b/tensorflow/compiler/mlir/lite/quantization/tensorflow/tf_to_quant.cc index e216cbb9306..0826b3265f6 100644 --- a/tensorflow/compiler/mlir/lite/quantization/tensorflow/tf_to_quant.cc +++ b/tensorflow/compiler/mlir/lite/quantization/tensorflow/tf_to_quant.cc @@ -146,7 +146,7 @@ void LegalizeTFToQuant::runOnFunction() { auto func = getFunction(); auto *ctx = func.getContext(); patterns.insert(ctx); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/lite/transforms/dilated_conv.cc b/tensorflow/compiler/mlir/lite/transforms/dilated_conv.cc index 23af1ffee64..b85b3de989a 100644 --- a/tensorflow/compiler/mlir/lite/transforms/dilated_conv.cc +++ b/tensorflow/compiler/mlir/lite/transforms/dilated_conv.cc @@ -30,7 +30,7 @@ void IdentifyDilatedConvPass::runOnFunction() { patterns.insert, ConvertTFDilatedConvOp>( &getContext()); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/lite/transforms/optimize.cc b/tensorflow/compiler/mlir/lite/transforms/optimize.cc index ad1577674fd..423525616f6 100644 --- a/tensorflow/compiler/mlir/lite/transforms/optimize.cc +++ b/tensorflow/compiler/mlir/lite/transforms/optimize.cc @@ -711,7 +711,7 @@ void Optimize::runOnFunction() { TFL::populateWithGenerated(ctx, &patterns); patterns.insert(ctx); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); // Fuse the binary ops with the following ops. patterns.insert< @@ -719,7 +719,7 @@ void Optimize::runOnFunction() { FuseBinaryOpToFollowingFullyConnected, FuseConv2DAndMulWithQDQs, FuseDepthwiseConv2DAndMulWithQDQs, ConvertTrivialTransposeOpToReshapeOp>( ctx); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/lite/transforms/optimize_functional_ops.cc b/tensorflow/compiler/mlir/lite/transforms/optimize_functional_ops.cc index 062a78e14d4..61e1eb43f6b 100644 --- a/tensorflow/compiler/mlir/lite/transforms/optimize_functional_ops.cc +++ b/tensorflow/compiler/mlir/lite/transforms/optimize_functional_ops.cc @@ -187,7 +187,7 @@ void OptimizeFunctionalOpsPass::runOnOperation() { patterns.insert(&getContext(), &inlined_funcs); ModuleOp module = getOperation(); - applyPatternsGreedily(module, patterns); + applyPatternsAndFoldGreedily(module, patterns); // Erase inlined functions that don't have any references. // diff --git a/tensorflow/compiler/mlir/lite/transforms/post_quantize.cc b/tensorflow/compiler/mlir/lite/transforms/post_quantize.cc index e737e32044d..97b7d57dbf4 100644 --- a/tensorflow/compiler/mlir/lite/transforms/post_quantize.cc +++ b/tensorflow/compiler/mlir/lite/transforms/post_quantize.cc @@ -125,7 +125,7 @@ void PostQuantizePass::runOnFunction() { auto func = getFunction(); auto* ctx = func.getContext(); TFL::populateWithGenerated(ctx, &patterns); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); if (!emit_quant_adaptor_ops_) { RemoveQuantizationAdaptorOps(getFunction()); diff --git a/tensorflow/compiler/mlir/lite/transforms/prepare_quantize.cc b/tensorflow/compiler/mlir/lite/transforms/prepare_quantize.cc index 3387015ed31..4f25e434fac 100644 --- a/tensorflow/compiler/mlir/lite/transforms/prepare_quantize.cc +++ b/tensorflow/compiler/mlir/lite/transforms/prepare_quantize.cc @@ -267,7 +267,7 @@ void PrepareQuantizePass::runOnFunction() { // Currently, only activation stats are imported, so narrow_range = false. patterns.insert(8, false, false, ctx); } - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); SanityCheckAndAdjustment(func); diff --git a/tensorflow/compiler/mlir/lite/transforms/prepare_tf.cc b/tensorflow/compiler/mlir/lite/transforms/prepare_tf.cc index 012599e96c2..a9b23d38378 100644 --- a/tensorflow/compiler/mlir/lite/transforms/prepare_tf.cc +++ b/tensorflow/compiler/mlir/lite/transforms/prepare_tf.cc @@ -619,8 +619,8 @@ void PrepareTFPass::runOnFunction() { // This pattern was intented to uses TFL QDQs to preserve the quantization // parameters from the TF Quant ops, thus this pattern should run with the - // first `applyPatternsGreedily` method, which would otherwise removes the - // TF FakeQuant ops by the constant folding. + // first `applyPatternsAndFoldGreedily` method, which would otherwise removes + // the TF FakeQuant ops by the constant folding. patterns.insert(ctx); // This pattern will try to identify and optimize for dilated convolution. @@ -634,7 +634,7 @@ void PrepareTFPass::runOnFunction() { // This will allow optimizing any TF_Mul->TF_Conv in the graph // and any expanded from FusedBatchNorm. We need to do this // before converting TF_Conv to TFL_Conv - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); // Load the generated pattern again, so new quantization pass-through // will be applied. @@ -646,7 +646,7 @@ void PrepareTFPass::runOnFunction() { } patterns.insert(ctx); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/lite/transforms/quantize.cc b/tensorflow/compiler/mlir/lite/transforms/quantize.cc index ed40fce3099..20602338956 100644 --- a/tensorflow/compiler/mlir/lite/transforms/quantize.cc +++ b/tensorflow/compiler/mlir/lite/transforms/quantize.cc @@ -88,7 +88,7 @@ void QuantizePass::runOnFunction() { TFL::populateWithGenerated(ctx, &patterns); patterns.insert( ctx, enable_numeric_verify, error_tolerance, enable_single_layer_verify); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/batchmatmul_to_einsum.cc b/tensorflow/compiler/mlir/tensorflow/transforms/batchmatmul_to_einsum.cc index 5d842f53bd9..727b13bc959 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/batchmatmul_to_einsum.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/batchmatmul_to_einsum.cc @@ -55,7 +55,7 @@ void BatchMatMulToEinsumPass::runOnFunction() { patterns.insert, ConvertTFBatchMatMulToEinsumOp>( &getContext()); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/decompose_resource_ops_pass.cc b/tensorflow/compiler/mlir/tensorflow/transforms/decompose_resource_ops_pass.cc index 7c8734fb695..dcd0b9af5e1 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/decompose_resource_ops_pass.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/decompose_resource_ops_pass.cc @@ -45,7 +45,7 @@ struct DecomposeResourceOps OwningRewritePatternList patterns; mlir::TF::PopulateDecomposeResourceOpsPatterns(&getContext(), &patterns); - applyPatternsGreedily(getFunction(), patterns); + applyPatternsAndFoldGreedily(getFunction(), patterns); } }; diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/einsum.cc b/tensorflow/compiler/mlir/tensorflow/transforms/einsum.cc index 69d5de659fa..ae9953a4f3b 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/einsum.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/einsum.cc @@ -364,7 +364,7 @@ void TransformEinsumPass::runOnFunction() { auto func = getFunction(); patterns.insert(&getContext()); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } static PassRegistration pass( diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/gpu_fusion.cc b/tensorflow/compiler/mlir/tensorflow/transforms/gpu_fusion.cc index 736af741842..175baeb627f 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/gpu_fusion.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/gpu_fusion.cc @@ -118,7 +118,7 @@ void GpuOpFusionPass::runOnFunction() { FuncOp func = getFunction(); OwningRewritePatternList patterns; patterns.insert(&getContext()); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/lower_tf_pass.cc b/tensorflow/compiler/mlir/tensorflow/transforms/lower_tf_pass.cc index f6be97e51c9..340b965cdd7 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/lower_tf_pass.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/lower_tf_pass.cc @@ -29,7 +29,7 @@ struct LowerTF : public PassWrapper { OwningRewritePatternList patterns; mlir::TF::PopulateLoweringTFPatterns(&getContext(), &patterns); - applyPatternsGreedily(getFunction(), patterns); + applyPatternsAndFoldGreedily(getFunction(), patterns); } }; diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/optimize.cc b/tensorflow/compiler/mlir/tensorflow/transforms/optimize.cc index 173015fa74f..6c7a47623e2 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/optimize.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/optimize.cc @@ -38,7 +38,7 @@ struct TFOptimizePass : public PassWrapper { OwningRewritePatternList patterns; auto func = getFunction(); populateWithGenerated(&getContext(), &patterns); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } }; diff --git a/tensorflow/compiler/mlir/tensorflow/transforms/unroll_batch_matmul.cc b/tensorflow/compiler/mlir/tensorflow/transforms/unroll_batch_matmul.cc index 1856f9541f4..4f852af47e5 100644 --- a/tensorflow/compiler/mlir/tensorflow/transforms/unroll_batch_matmul.cc +++ b/tensorflow/compiler/mlir/tensorflow/transforms/unroll_batch_matmul.cc @@ -55,7 +55,7 @@ void UnrollBatchMatMulPass::runOnFunction() { patterns.insert, ConvertTFBatchMatMulOp>(&getContext()); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } } // namespace diff --git a/tensorflow/compiler/mlir/xla/operator_writer_gen.cc b/tensorflow/compiler/mlir/xla/operator_writer_gen.cc index d8b54c1acb9..acb7af50996 100644 --- a/tensorflow/compiler/mlir/xla/operator_writer_gen.cc +++ b/tensorflow/compiler/mlir/xla/operator_writer_gen.cc @@ -81,7 +81,7 @@ static void BuildOperator(const Operator& op, raw_ostream* output) { // Emit an argument for an operand. if (auto* operand_cst = arg.dyn_cast()) { // Handle a non-variadic operand. - if (!operand_cst->isVariadic()) { + if (!operand_cst->isVariableLength()) { os << " auto xla_arg_" << index << " = value_map[*xla_op.getODSOperands(" << operand_number++ << ").begin()];\n"; @@ -108,7 +108,7 @@ static void BuildOperator(const Operator& op, raw_ostream* output) { // If all operands are variadic, then pass the builder explicitly to xla // client API call - if (op.getNumOperands() == op.getNumVariadicOperands()) { + if (op.getNumOperands() == op.getNumVariableLengthOperands()) { os << "lowering_context.builder"; if (op.getNumArgs() != 0) os << ", "; } diff --git a/tensorflow/compiler/mlir/xla/transforms/legalize_to_standard.cc b/tensorflow/compiler/mlir/xla/transforms/legalize_to_standard.cc index 604054bd094..a74c8ba68d3 100644 --- a/tensorflow/compiler/mlir/xla/transforms/legalize_to_standard.cc +++ b/tensorflow/compiler/mlir/xla/transforms/legalize_to_standard.cc @@ -198,7 +198,7 @@ void PopulateXlaToStdPatterns(OwningRewritePatternList *patterns, void LegalizeToStandard::runOnFunction() { OwningRewritePatternList patterns; mlir::xla_hlo::PopulateXlaToStdPatterns(&patterns, &getContext()); - applyPatternsGreedily(getFunction(), patterns); + applyPatternsAndFoldGreedily(getFunction(), patterns); } static PassRegistration legalize_pass( diff --git a/tensorflow/compiler/mlir/xla/transforms/lhlo_legalize_to_affine.cc b/tensorflow/compiler/mlir/xla/transforms/lhlo_legalize_to_affine.cc index 164e4dc93d8..2921a49ba70 100644 --- a/tensorflow/compiler/mlir/xla/transforms/lhlo_legalize_to_affine.cc +++ b/tensorflow/compiler/mlir/xla/transforms/lhlo_legalize_to_affine.cc @@ -87,7 +87,7 @@ struct LhloLegalizeToAffine OwningRewritePatternList patterns; auto func = getFunction(); populateLHLOToAffineConversionPattern(func.getContext(), &patterns); - applyPatternsGreedily(func, patterns); + applyPatternsAndFoldGreedily(func, patterns); } }; diff --git a/tensorflow/compiler/mlir/xla/transforms/lower_complex.cc b/tensorflow/compiler/mlir/xla/transforms/lower_complex.cc index cef3138daf0..72e3eec957d 100644 --- a/tensorflow/compiler/mlir/xla/transforms/lower_complex.cc +++ b/tensorflow/compiler/mlir/xla/transforms/lower_complex.cc @@ -71,7 +71,7 @@ void LowerComplex::runOnFunction() { OwningRewritePatternList patterns; mlir::xla::PopulateComplexLoweringPatterns(&getContext(), &patterns); - applyPatternsGreedily(getFunction(), patterns); + applyPatternsAndFoldGreedily(getFunction(), patterns); } static PassRegistration pass( diff --git a/tensorflow/compiler/mlir/xla/transforms/lower_general_dot.cc b/tensorflow/compiler/mlir/xla/transforms/lower_general_dot.cc index 026e88b3671..407dccfd074 100644 --- a/tensorflow/compiler/mlir/xla/transforms/lower_general_dot.cc +++ b/tensorflow/compiler/mlir/xla/transforms/lower_general_dot.cc @@ -178,7 +178,7 @@ struct LegalizeGeneralDot OwningRewritePatternList patterns; mlir::xla_hlo::PopulateGeneralDotOpLoweringPatterns(&patterns, &getContext()); - applyPatternsGreedily(getFunction(), patterns); + applyPatternsAndFoldGreedily(getFunction(), patterns); } }; diff --git a/tensorflow/compiler/mlir/xla/transforms/unfuse_batch_norm_pass.cc b/tensorflow/compiler/mlir/xla/transforms/unfuse_batch_norm_pass.cc index 600c7ece217..18a0c27e6d0 100644 --- a/tensorflow/compiler/mlir/xla/transforms/unfuse_batch_norm_pass.cc +++ b/tensorflow/compiler/mlir/xla/transforms/unfuse_batch_norm_pass.cc @@ -32,7 +32,7 @@ struct TestUnfuseBatchNormPass void runOnOperation() override { OwningRewritePatternList patterns; PopulateUnfuseBatchNormPatterns(&getContext(), &patterns); - applyPatternsGreedily(getOperation(), patterns); + applyPatternsAndFoldGreedily(getOperation(), patterns); } }; diff --git a/tensorflow/compiler/xla/service/llvm_ir/ir_builder_mixin.h b/tensorflow/compiler/xla/service/llvm_ir/ir_builder_mixin.h index 5014aa9c8ae..67e65f29005 100644 --- a/tensorflow/compiler/xla/service/llvm_ir/ir_builder_mixin.h +++ b/tensorflow/compiler/xla/service/llvm_ir/ir_builder_mixin.h @@ -79,11 +79,31 @@ class IrBuilderMixin { return mixin_builder()->CreateBr(std::forward(args)...); } + llvm::CallInst* Call(llvm::FunctionCallee func_callee, + llvm::ArrayRef args = llvm::None, + const llvm::Twine& name = "", + llvm::MDNode* fp_math_tag = nullptr) { + return mixin_builder()->CreateCall(func_callee, args, name, fp_math_tag); + } + + llvm::CallInst* Call(llvm::FunctionType* func_type, llvm::Value* callee, + llvm::ArrayRef args = llvm::None, + const llvm::Twine& name = "", + llvm::MDNode* fp_math_tag = nullptr) { + return mixin_builder()->CreateCall(func_type, callee, args, name, + fp_math_tag); + } + + // DEPRECATED. LLVM is removing getPointerElementType, so calls to this must + // be transitioned to one of the other overloads. llvm::CallInst* Call(llvm::Value* callee, llvm::ArrayRef args = llvm::None, const llvm::Twine& name = "", llvm::MDNode* fp_math_tag = nullptr) { - return mixin_builder()->CreateCall(callee, args, name, fp_math_tag); + return mixin_builder()->CreateCall( + llvm::cast( + callee->getType()->getPointerElementType()), + callee, args, name, fp_math_tag); } template diff --git a/third_party/mlir/BUILD b/third_party/mlir/BUILD index a9199ba9505..00c14ae60ca 100644 --- a/third_party/mlir/BUILD +++ b/third_party/mlir/BUILD @@ -2666,6 +2666,20 @@ cc_binary( ], ) +cc_binary( + name = "mlir-linalg-ods-gen", + srcs = glob([ + "tools/mlir-linalg-ods-gen/mlir-linalg-ods-gen.cpp", + ]), + deps = [ + ":IR", + ":Support", + "@llvm-project//llvm:config", + "@llvm-project//llvm:support", + "@llvm-project//llvm:tablegen", + ], +) + ## OpenMP dialect gentbl( name = "OpenMPOpsIncGen",