summaryrefslogtreecommitdiffstats
path: root/mlir/tools
Commit message (Collapse)AuthorAgeFilesLines
...
* Extract openInputFile() into Support/FileUtilitiesLei Zhang2019-03-292-27/+20
| | | | | | | | | | Multiple binaries have the needs to open input files. Use this function to de-duplicate the code. Also changed openOutputFile() to return errors using std::string since it is a library call and accessing I/O in library call is not friendly. PiperOrigin-RevId: 228878221
* Fix error in checking logic and update tests.Jacques Pienaar2019-03-291-1/+1
| | | | | | | | * Check was returning success instead of failure when reporting illegal type; * TFL ops only support tensor types so update tests with corrected logic. - Removed some checks in broadcasting that don't work with tensor input requirement; PiperOrigin-RevId: 228770184
* Replace getAttributeName() with .getName()Lei Zhang2019-03-291-8/+4
| | | | PiperOrigin-RevId: 228581178
* Add tblgen::Attribute to wrap around TableGen Attr defsLei Zhang2019-03-292-40/+32
| | | | | | | | This CL added a tblgen::Attribute class to wrap around raw TableGen Record getValue*() calls on Attr defs, which will provide a nicer API for handling TableGen Record. PiperOrigin-RevId: 228581107
* Put Operator and PredCNF into the tblgen namespaceLei Zhang2019-03-292-2/+7
| | | | PiperOrigin-RevId: 228429130
* Add tblgen::Type to wrap around TableGen Type defsLei Zhang2019-03-291-20/+12
| | | | | | | | | | This CL added a tblgen::Type class to wrap around raw TableGen Record getValue*() calls on Type defs, which will provide a nicer API for handling TableGen Record. The PredCNF class is also updated to work together with tblgen::Type. PiperOrigin-RevId: 228429090
* Match attributes in input pattern.Jacques Pienaar2019-03-292-63/+77
| | | | | | | | | | Bind attributes similar to operands. Use to rewrite leakyreulo and const rewrite pattern. The attribute type/attributes are not currently checked so should only be used where the attributes match due to the construction of the op. To support current attribute namespacing, convert __ in attribute name to "$" for matching purposes ('$' is not valid character in variable in TableGen). Some simplification to make it simpler to specify indented ostream and avoid so many spaces. The goal is not to have perfectly formatted code generated but good enough so that its still easy to read for a user. PiperOrigin-RevId: 228183639
* Verify type of operands match those specifed in op registry.Jacques Pienaar2019-03-292-4/+55
| | | | | | | | | | | | | | Expand type to include matcher predicates. Use CNF form to allow specifying combinations of constraints for type. The matching call for the type is used to verify the construction of the operation as well as in rewrite pattern generation. The matching initially includes redundant checks (e.g., even if the operand of the op is guaranteed to satisfy some requirement, it is still checked during matcher generation for now). As well as some of the traits specified now check what the generated code already checks. Some of the traits can be removed in future as the verify method will include the relevant checks based on the op definition already. More work is needed for variadic operands. CNF form is used so that in the follow up redundant checks in the rewrite patterns could be omitted (e.g., when matching a F32Tensor, one does not need to verify that op X's operand 0 is a Tensor if that is guaranteed by op X's definition). The alternative was to have single matcher function specified, but this would not allow for reasoning about what attributes already hold (at the level of PredAtoms). Use this new operand type restrictions to rewrite BiasAdd with floating point operands as declarative pattern. PiperOrigin-RevId: 227991412
* Fix format for empty method definitionLei Zhang2019-03-291-2/+2
| | | | PiperOrigin-RevId: 227840511
* TableGen standard arithmetic opsAlex Zinenko2019-03-291-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | Use tablegen to generate definitions of the standard binary arithmetic operations. These operations share a lot of boilerplate that is better off generated by a tool. Using tablegen for standard binary arithmetic operations requires the following modifications. 1. Add a bit field `hasConstantFolder` to the base Op tablegen class; generate the `constantFold` method signature if the bit is set. Differentiate between single-result and zero/multi-result functions that use different signatures. The implementation of the method remains in C++, similarly to canonicalization patterns, since it may be large and non-trivial. 2. Define the `AnyType` record of class `Type` since `BinaryOp` currently provided in op_base.td is supposed to operate on tensors and other tablegen users may rely on this behavior. Note that this drops the inline documentation on the operation classes that was copy-pasted around anyway. Since we don't generate g3doc from tablegen yet, keep LangRef.md as it is. Eventually, the user documentation can move to the tablegen definition file as well. PiperOrigin-RevId: 227820815
* Use Operator class in OpDefinitionsGen. Cleanup NFC.Jacques Pienaar2019-03-291-155/+73
| | | | PiperOrigin-RevId: 227764826
* Match the op via isa instead of string compare.Jacques Pienaar2019-03-291-7/+2
| | | | | | | * Match using isa - This limits the rewrite pattern to ops defined in op registry but that is probably better end state (esp. for additional verification). PiperOrigin-RevId: 227598946
* Add tf.Add opJacques Pienaar2019-03-291-9/+0
| | | | | | | | Add ops.td for TF dialect and start by adding tf.Add (op used in legalizer pattern). This CL does not add TensorOp trait (that's not part of OpTrait namespace). Remove OpCode emission that is not currently used and can be added back later if needed. PiperOrigin-RevId: 227590973
* Add builderCall to Type and add constant attr class.Jacques Pienaar2019-03-291-35/+21
| | | | | | With the builder to construct the type on the Type, the appropriate mlir::Type can be constructed where needed. Also add a constant attr class that has the attribute and value as members. PiperOrigin-RevId: 227564789
* Indent auto-generated build methodSmit Hinsu2019-03-291-1/+2
| | | | | | TESTED manually PiperOrigin-RevId: 227495854
* Switch rewriters for relu, relu6, placeholder_input, softmax to patterns.Jacques Pienaar2019-03-291-4/+24
| | | | | | Add a constant F32 attribute for use with softmax legalization. PiperOrigin-RevId: 227241643
* Match multiple pattern nodes as input to rewrite.Jacques Pienaar2019-03-291-37/+127
| | | | | | | | | | * Allow multi input node patterns in the rewrite; * Use number of nodes matched as benefit; * Rewrite relu(add(...)) matching using the new pattern; To allow for undefined ops, do string compare - will address soon! PiperOrigin-RevId: 227225425
* Add convenience wrapper for operator in tblgenJacques Pienaar2019-03-291-132/+163
| | | | | | Add convenience wrapper to make it easier to iterate over attributes and operands of operator defined in TableGen file. Use this class in RewriterGen (not used in the op generator yet, will do shortly). Change the RewriterGen to pass the bound arguments explicitly, this is in preparation for multi-op matching. PiperOrigin-RevId: 227156748
* Rename BBArgument -> BlockArgument, Op::getOperation -> Op::getInst(),Chris Lattner2019-03-291-2/+2
| | | | | | | | StmtResult -> InstResult, StmtOperand -> InstOperand, and remove the old names. This is step 17/n towards merging instructions and statements, NFC. PiperOrigin-RevId: 227121537
* Merge Operation into OperationInst and standardize nomenclature aroundChris Lattner2019-03-292-4/+4
| | | | | | | | OperationInst. This is a big mechanical patch. This is step 16/n towards merging instructions and statements, NFC. PiperOrigin-RevId: 227093712
* Minor renamings: Trim the "Stmt" prefix offChris Lattner2019-03-291-1/+1
| | | | | | | | | StmtSuccessorIterator/StmtSuccessorIterator, and rename and move the CFGFunctionViewGraph pass to ViewFunctionGraph. This is step 13/n towards merging instructions and statements, NFC. PiperOrigin-RevId: 227069438
* Merge SSAValue, CFGValue, and MLValue together into a single Value class, whichChris Lattner2019-03-291-4/+4
| | | | | | | | | is the new base of the SSA value hierarchy. This CL also standardizes all the nomenclature and comments to use 'Value' where appropriate. This also eliminates a large number of cast<MLValue>(x)'s, which is very soothing. This is step 11/n towards merging instructions and statements, NFC. PiperOrigin-RevId: 227064624
* Eliminate the Instruction, BasicBlock, CFGFunction, MLFunction, and ↵Chris Lattner2019-03-291-2/+1
| | | | | | | | | | | | ExtFunction classes, using the Statement/StmtBlock hierarchy and Function instead. This *only* changes the internal data structures, it does not affect the user visible syntax or structure of MLIR code. Function gets new "isCFG()" sorts of predicates as a transitional measure. This patch is gross in a number of ways, largely in an effort to reduce the amount of mechanical churn in one go. It introduces a bunch of using decls to keep the old names alive for now, and a bunch of stuff needs to be renamed. This is step 10/n towards merging instructions and statements, NFC. PiperOrigin-RevId: 227044402
* Move print op stats pass to analysis.Jacques Pienaar2019-03-291-126/+0
| | | | | | | | Move PrintOpStatsPass out of tools and to other passes (moved to Analysis as it doesn't modify the program but it is different than the other analysis passes as it is only consumer at present is the user). PiperOrigin-RevId: 227018996
* Merge mlir-op-gen and mlir-rewriter-gen into mlir-tblgen.Jacques Pienaar2019-03-293-67/+111
| | | | | | Unify the two tools before factoring out helper classes. PiperOrigin-RevId: 227015406
* Expand rewriter gen to handle string attributes in output.Jacques Pienaar2019-03-291-12/+87
| | | | | | | | | * Extend to handle rewrite patterns with output attributes; - Constant attributes are defined with a value and a type; - The type of the value is mapped to the corresponding attribute type (string -> StringAttr); * Verifies the type of operands in the resultant matches the defined op's operands; PiperOrigin-RevId: 226468908
* Change attribute to be input argument.Jacques Pienaar2019-03-291-89/+169
| | | | | | | | | | | Change operands to arguments in Op and use it for both operands and arguments. This unifies the way that operands and attributes are specified and the intended way that matching/creating ops with attributes will look. Both can now be represented using the same dag structure (and also makes the ordering more explicit). Derived attributes are not considered as part of the arguments (as they are inferred from the created op, not something needed to created it). * Generate named operand accessors; * Simplified the way of specifying Attr and use ElementAttr for TFL_Const instead. * Fix a incorrect assertion generated; The input parsing can be made more robust, I'll address that in a follow up. PiperOrigin-RevId: 226307424
* Free the name symbol in TableGenLei Zhang2019-03-292-3/+3
| | | | | | | | | | | Renamed the name field in Op to opName since it is the opcode's name. Renamed the name parameters in TFLite op templates to opSummary since they are meant as a summary of the op's functionality. We will use the name symbol later for the name given by users via TF. PiperOrigin-RevId: 225807135
* Fix asan failures in mlir-op-gen.Jacques Pienaar2019-03-291-8/+9
| | | | PiperOrigin-RevId: 225532488
* Use dag instead of list for operands to allow named operands.Jacques Pienaar2019-03-291-9/+10
| | | | | | Named operands allow generating builders with more meaningful names + lay the groundwork for allowing the specification of attributes as part of the inputs pattern of an op (which allows the declarative pattern rewrite generator to define ops with attributs). This is a minimal change that just changes how input operands are represented, changes to attributes in follow up and returnTypes later. PiperOrigin-RevId: 225509805
* Define TFLite Dequantize and FakeQuant opsFeng Liu2019-03-291-12/+25
| | | | | | | | | | | | Besides the ops.td file changes to define both ops, this CL also changes the mlir-op-gen to allow more flexible traits definition for "optional" operation inputs. Unit tests are added. One TODO for the mlir-op-gen is to make attribute optional in the ops. PiperOrigin-RevId: 225408349
* Add rudimentary pattern rewrite matching generation.Jacques Pienaar2019-03-292-8/+149
| | | | | | | | | | | | | | | | | | | | | | * Start very basic (about as basic as possible) with the pattern rewrite generation by only - Matching single node dags, - Single output, single result, - No constraints on inputs/outputs. - No attributes (only operands) * The matcher generates C++ code akin to what is currently manually written. - This is very much not the final end state, and only intended for the short term; * Always generate the default builder method to make it easier to generate calls; - Also add additional builder method for TFL::Add as attributes are not yet supported; * Replace TF Add -> TFL Add matching using this generation; * Introduce a conceptual textual namespace in the op registry - Will allow importing multiple dialect's op registry - Avoids needing to do anything special with tablegen or define a custom DSL; = I really want to do a custom DSL but this urge could just be as its fun :) So defer for now. From this structure we can dump out another structured form if needed; - Add a mapping from <namespace>_<op> in the op_gen and pattern rewrite gen = This allows placing ops in different namespaces from the same op registry which is convenient, esp. if we want to consider subnamespaces in future; * Update tfl namespace to TFL to match TF and XLA; PiperOrigin-RevId: 225155164
* Generate another op builder with aggregated parametersLei Zhang2019-03-291-0/+31
| | | | | | | | | | | For each op, generate another builder with the following signature: static void build(Builder* builder, OperationState* result, ArrayRef<Type> resultTypes, ArrayRef<SSAValue*> args, ArrayRef<NamedAttribute> attributes); PiperOrigin-RevId: 225066007
* Auto-generate op builder with TableGenLei Zhang2019-03-291-8/+65
| | | | | | | | | | | | If no custom builder is supplied for an op, TableGen now generates a default builder for it with the following signature: static void build(Builder *builder, OperationState* result, <list-of-all-result-types>, <list-of-all-operands>, <list-of-all-attributes>); PiperOrigin-RevId: 224382473
* Clean up base TableGen definitionsLei Zhang2019-03-291-4/+5
| | | | | | | * Removed unused builder field for type definitions * Refined comments and reordered classes PiperOrigin-RevId: 224223038
* Enable using bare attributes.Jacques Pienaar2019-03-291-11/+28
| | | | | | Useful for defining ops such as <dialect>.Const where multiple kinds of attributes are legal. PiperOrigin-RevId: 224210511
* Fix off by one in OpStats.Jacques Pienaar2019-03-291-2/+3
| | | | PiperOrigin-RevId: 223977444
* Remove tfl.reshape op when possibleLei Zhang2019-03-291-0/+11
| | | | | | | | | | | | | | | | | | | Remove tfl.reshape for the following two cases: 1. A tfl.reshape's input is from another tfl.reshape. Then these two tfl.reshape ops can be merged. 2. A tfl.reshape's result type is the same as its input type. This tfl.reshape op does nothing, which can be removed. These transformations are put in a new source file, Canonicalizer.cpp, because they are TFLite op to TFLite op transformations, and aiming to making TFLite ops more canonicalized. Also added a hasCanonicalizationPatterns marker in TableGen Op class to indicate whether an op has custom getCanonicalizationPatterns(). PiperOrigin-RevId: 223806921
* Add derived attribute support.Jacques Pienaar2019-03-291-0/+23
| | | | | | Derived attributes are attributes that are derived from other properties of the operation (e.g., the shape returned from the type). DerivedAttr is parameterized on the return type and function body. PiperOrigin-RevId: 223180315
* Create the Support library.Alex Zinenko2019-03-291-13/+1
| | | | | | | | | This has been a long-standing TODO in the build system. Now that we need to share the non-inlined implementation of file utilities for translators, create a separate library for support functionality. Move Support/* headers to the new library in the build system. PiperOrigin-RevId: 222398880
* Separate translators into "from MLIR" and "to MLIR".Alex Zinenko2019-03-292-66/+41
| | | | | | | | | | | | | | | | | | | | Translations performed by mlir-translate only have MLIR on one end. MLIR-to-MLIR conversions (including dialect changes) should be treated as passes and run by mlir-opt. Individual translations should not care about reading or writing MLIR and should work on in-memory representation of MLIR modules instead. Split the TranslateFunction interface and the translate registry into two parts: "from MLIR" and "to MLIR". Update mlir-translate to handle both registries together by wrapping translation functions into source-to-source convresions. Remove MLIR parsing and writing from individual translations and make them operate on Modules instead. This removes the need for individual translators to include tools/mlir-translate/mlir-translate.h, which can now be safely removed. Remove mlir-to-mlir translation that only existed as a registration example and use mlir-opt instead for tests. PiperOrigin-RevId: 222398707
* Factor out translation registry.Alex Zinenko2019-03-292-39/+26
| | | | | | | | | | | | | | | | | | | | The mlir-translate tool is expected to discover individual translations at link time. These translations must register themselves and may need the utilities that are currently defined in mlir-translate.cpp for their entry point functions. Since mlir-translate is linking against individual translations, the translations cannot link against mlir-translate themselves. Extract out the utilities into a separate "Translation" library to avoid the potential dependency cycle. Individual translations link to that library to access TranslateRegistration. The mlir-translate tool links to individual translations and to the "Translation" library because it needs the utilities as well. The main header of the new library is located in include/mlir/Translation.h to make it easily accessible by translators. The rationale for putting it to include/mlir rather than to one of its subdirectories is that its purpose is similar to that of include/mlir/Pass.h so it makes sense to put them at the same level. PiperOrigin-RevId: 222398617
* Add op stats pass to mlir-opt.Jacques Pienaar2019-03-291-0/+125
| | | | | | op-stats pass currently returns the number of occurrences of different operations in a Module. Useful for verifying transformation properties (e.g., 3 ops of specific dialect, 0 of another), but probably not useful outside of that so keeping it local to mlir-opt. This does not consider op attributes when counting. PiperOrigin-RevId: 222259727
* Convert MLIR DiagnosticKind to LLVM DiagKind when emitting diagnostic via ↵Jacques Pienaar2019-03-291-2/+15
| | | | | | mlir-opt. PiperOrigin-RevId: 222147297
* Update split marker for split-input-file option to be more restrictiveSmit Hinsu2019-03-291-1/+1
| | | | | | | | | | This is to allow usage of comment blocks along with splits in test cases. For example, "Function Control Flow Lowering" comment block in raise-control-flow.mlir TESTED with existing unit tests PiperOrigin-RevId: 221214451
* Implement value type abstraction for locations.River Riddle2019-03-291-4/+4
| | | | | | Value type abstraction for locations differ from others in that a Location can NOT be null. NOTE: dyn_cast returns an Optional<T>. PiperOrigin-RevId: 220682078
* Add static pass registrationJacques Pienaar2019-03-291-110/+8
| | | | | | | | Add static pass registration and change mlir-opt to use it. Future work is needed to refactor the registration for PassManager usage. Change build targets to alwayslink to enforce registration. PiperOrigin-RevId: 220390178
* Introduce loop tiling code generation (hyper-rectangular case)Uday Bondhugula2019-03-291-0/+5
| | | | | | | | | | | - simple perfectly nested band tiling with fixed tile sizes. - only the hyper-rectangular case is handled, with other limitations of getIndexSet applying (constant loop bounds, etc.); once the latter utility is extended, tiled code generation should become more general. - Add FlatAffineConstraints::isHyperRectangular() PiperOrigin-RevId: 220324933
* Start TFLite legalizer passJacques Pienaar2019-03-291-11/+18
| | | | | | | | Start of TFLite legalizer pass. Currently focussed on macro expanding ops, limited to what is registered directly in a separate pass (this should instead be a general pass), no querying of what gets produced, the matching is string based instead of using the ops proper (the matching TF ops should be defined) etc. This is a step to enable prototyping. In addition to the above shortcomings, the legalizer is very verbose in this form and should instead be driven by autogenerated patterns (same is true for the op builders too). But this starts from the explicit form and extracting out commonality in follow up. Add definition for tfl.relu for basic selection of fused relu add. PiperOrigin-RevId: 220287087
* Adds MemRefDependenceCheck analysis pass, plus multiple dependence check tests.MLIR Team2019-03-291-0/+6
| | | | | | Adds equality constraints to dependence constraint system for accesses using dims/symbols where the defining operation of the dim/symbol is a constant. PiperOrigin-RevId: 219814740
OpenPOWER on IntegriCloud