summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
| * Rename LoopNestBuilder to AffineLoopNestBuilder - NFCNicolas Vasilache2019-10-178-33/+33
| | | | | | | | PiperOrigin-RevId: 275310747
| * Use a SmallVector instead of an ArrayRef to materialize a temporary local arrayMehdi Amini2019-10-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | This pattern is error prone and unfortunately none of the sanitizer is catching it at the moment. Fixes tensorflow/mlir#192 Closes tensorflow/mlir#193 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/193 from joker-eph:fix_array_ref 8092252e64c426c6a8a790b7638f847bea4818b1 PiperOrigin-RevId: 275280201
| * [DRR] Allow capturing and referencing no-result opsLei Zhang2019-10-174-0/+28
| | | | | | | | | | | | | | | | | | | | Previously when we bind a symbol to an op in DRR, it means to capture the op's result(s) and later references will be expanded to result(s). This means for ops without result, we are replacing the symbol with nothing. This CL treats non-result op capturing and referencing as a special case to mean the op itself. PiperOrigin-RevId: 275269702
| * Fix RewriterGen to support using NativeCodeCall as auxiliary patternLei Zhang2019-10-174-7/+34
| | | | | | | | | | | | | | | | | | NativeCodeCall is handled differently than normal op creation in RewriterGen (because its flexibility). It will only be materialized to output stream if it is used. But when using it for auxiliary patterns, we still want the side effect even if it is not replacing matched root op's results. PiperOrigin-RevId: 275265467
| * Add LLVM_DEBUG in RewritersGen.cpp and Pattern.cppLei Zhang2019-10-173-14/+105
| | | | | | | | | | | | | | | | | | It's usually hard to understand what went wrong if mlir-tblgen crashes on some input. This CL adds a few useful LLVM_DEBUG statements so that we can use mlir-tblegn -debug to figure out the culprit for a crash. PiperOrigin-RevId: 275253532
| * Fix invalid transpose in example and add proper verification.River Riddle2019-10-1610-83/+143
| | | | | | | | | | | | The transpose in the example had the same result type as its input, which is incorrect. PiperOrigin-RevId: 275186568
| * [spirv] Implement inliner interfaceLei Zhang2019-10-165-2/+264
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We just need to implement a few interface hooks to DialectInlinerInterface and CallOpInterface to gain the benefits of an inliner. :) Right now only supports some trivial cases: * Inlining single block with spv.Return/spv.ReturnValue * Inlining multi block with spv.Return * Inlining spv.selection/spv.loop without return ops More advanced cases will require block argument and Phi support. PiperOrigin-RevId: 275151132
| * Add Ch.5 of the toy tutorial.River Riddle2019-10-1636-2681/+1956
| | | | | | | | | | | | This chapter adds a partial lowering of toy operations, all but PrintOp, to a combination of the Affine and Std dialects. This chapter focuses on introducing the conversion framework, the benefits of partial lowering, and how easily dialects may co-exist in the IR. PiperOrigin-RevId: 275150649
| * Add support for inlining toy call operations.River Riddle2019-10-167-7/+97
| | | | | | | | | | | | The GenericCallOp needed to have the CallOpInterface to be picked up by the inliner. This also adds a CastOp to perform shape casts that are generated during inlining. The casts generated by the inliner will be folded away after shape inference. PiperOrigin-RevId: 275150438
| * Fix typo in tutorial.reinerp2019-10-163-3/+3
| | | | | | | | PiperOrigin-RevId: 275147795
| * Add ComplexType to TableGen with Tensor supportRob Suderman2019-10-165-34/+75
| | | | | | | | | | | | | | | | Create a ComplexType for table gen references. Include an AnyComplex type to check whether the resulting tensor can be complex. Expand tensors to allow complex types. PiperOrigin-RevId: 275144804
| * Code cleanups on Ch.4River Riddle2019-10-167-92/+121
| | | | | | | | | | | | This change performs general cleanups of the implementation of ch.4 and fixes some bugs. For example, the operations currently don't inherit from the shape inference interface. PiperOrigin-RevId: 275089914
| * Update Chapter 4 of the Toy tutorialSana Damani2019-10-1626-1645/+1129
| | | | | | | | | | | | | | | | | | | | This Chapter now introduces and makes use of the Interface concept in MLIR to demonstrate ShapeInference. END_PUBLIC Closes tensorflow/mlir#191 PiperOrigin-RevId: 275085151
| * Update comments in ast.toyJacques Pienaar2019-10-163-84/+87
| | | | | | | | PiperOrigin-RevId: 275084969
| * NFC: Update VectorOrTensor -> ShapedGeoffrey Martin-Noble2019-10-161-1/+1
| | | | | | | | | | | | This was missed when the type was renamed. PiperOrigin-RevId: 275082588
| * Makes spv.module generated by GPU->SPIRV conversion spec compliantMahesh Ravishankar2019-10-168-205/+275
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Makes the spv.module generated by the GPU to SPIR-V conversion SPIR-V spec compliant (validated using spirv-val from Vulkan tools). 1) Separate out the VulkanLayoutUtils from DecorateSPIRVCompositeTypeLayoutPass to make it reusable within the Type converter in SPIR-V lowering infrastructure. This is used to compute the layout of the !spv.struct used in global variable type description. 2) Set the capabilities of the spv.module to Shader (needed for use of Logical Memory Model, and the extensions to SPV_KHR_storage_buffer_storage_class for use of Storage Buffer) PiperOrigin-RevId: 275081486
| * Support custom accumulator provided as region to gpu.all_reduce.Christian Sigg2019-10-168-20/+311
| | | | | | | | | | | | | | | | | | | | In addition to specifying the type of accumulation through the 'op' attribute, the accumulation can now also be specified as arbitrary code region. Adds a gpu.yield op to specify the result of the accumulation. Also support more types (integers) and accumulations (mul). PiperOrigin-RevId: 275065447
| * Allow for remapping argument to a Value in SignatureConversion.Mahesh Ravishankar2019-10-164-7/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current SignatureConversion framework (part of DialectConversion) allows remapping input arguments to a function from 1->0, 1->1 or 1->many arguments during conversion. Another case is where the argument itself is dropped, but it's use are remapped to another Value*. An example of this is: The Vulkan/SPIR-V spec requires entry functions to be of type void(void). The GPU -> SPIR-V conversion implemented this without having the DialectConversion framework track the remapping that lead to some undefined behavior. The changes here addresses that. PiperOrigin-RevId: 275059656
| * Add support for PatternRewriter::eraseOp.River Riddle2019-10-1613-31/+54
| | | | | | | | | | | | This hook is useful when an operation is known to be dead, and no replacement values make sense. PiperOrigin-RevId: 275052756
| * Fix CMake configuration after introduction of LICM and LoopLikeInterfaceMehdi Amini2019-10-165-3/+17
| | | | | | | | | | | | | | b843cc5d5a introduced a new op LICM transformation and a LoopLike interface, but missed the CMake aspects of it. This should fix the build. PiperOrigin-RevId: 275038533
| * Fix typo in VectorOps.tdNicolas Vasilache2019-10-161-2/+2
| | | | | | | | PiperOrigin-RevId: 275025323
| * Implement simple loop-invariant-code-motion based on dialect interfaces.Stephan Herhut2019-10-1615-512/+1166
| | | | | | | | PiperOrigin-RevId: 275004258
| * NFC: Remove NoSideEffect traits from all ops except for ConstantOp.River Riddle2019-10-161-4/+4
| | | | | | | | | | | | These traits are added in chapter 3 when we begin discussion optimization on the toy operations. PiperOrigin-RevId: 274974010
| * NFC: Various code cleanups for Ch3.River Riddle2019-10-163-50/+56
| | | | | | | | | | | | This change refactors the toyc driver to be much cleaner and easier to extend. It also cleans up a few comments in the combiner. PiperOrigin-RevId: 274973808
| * Add support for OpBitwiseOr, OpBitwiseXor, and OpBitwiseAnd in SPIR-V dialect.Hanhan Wang2019-10-154-0/+226
| | | | | | | | PiperOrigin-RevId: 274935374
| * Fix typoMLIR Team2019-10-151-1/+1
| | | | | | | | PiperOrigin-RevId: 274905193
| * Fix typosMLIR Team2019-10-151-4/+4
| | | | | | | | PiperOrigin-RevId: 274902838
| * NFC: Split out ToyOpsIncGen into a separate CMakeLists.txt.River Riddle2019-10-156-10/+13
| | | | | | | | | | | | This fixes an issue with make where it fails to properly handle the dependency ordering. PiperOrigin-RevId: 274897702
| * Fix typoMLIR Team2019-10-151-1/+1
| | | | | | | | PiperOrigin-RevId: 274894550
| * [spirv] Add support for SpecId decoration on spv.specConstantLei Zhang2019-10-156-41/+108
| | | | | | | | | | | | | | | | The SpecId decoration is the handle for providing external specialization. Similar to descriptor set and binding on global variables, we directly bake it into assembly parsing and printing. PiperOrigin-RevId: 274893879
| * Fix minor typosMLIR Team2019-10-151-4/+4
| | | | | | | | PiperOrigin-RevId: 274892763
| * Fix typos in InferTypeOpInterface.Jacques Pienaar2019-10-151-4/+3
| | | | | | | | PiperOrigin-RevId: 274866986
| * Update Chapter 3 to demonstrate pattern match and rewrite optimizationsSana Damani2019-10-1516-1172/+1032
| | | | | | | | | | | | | | | | | | This is using Table-driven Declarative Rewrite Rules (DRR), the previous version of the tutorial only showed the C++ patterns. Closes tensorflow/mlir#187 PiperOrigin-RevId: 274852321
| * Fix typos in LangRef and OpDefinitionsJacques Pienaar2019-10-152-21/+21
| | | | | | | | PiperOrigin-RevId: 274848361
| * Consistent use of int in mlir_runner_utils.cppNicolas Vasilache2019-10-151-1/+1
| | | | | | | | | | | | This should fix the OSS build by only using int in template types. PiperOrigin-RevId: 274843584
| * Add conversion for splat of vectors of 2+DNicolas Vasilache2019-10-154-87/+285
| | | | | | | | | | | | | | This CL adds a missing lowering for splat of multi-dimensional vectors. Additional support is also added to the runtime utils library to allow printing memrefs with such vectors. PiperOrigin-RevId: 274794723
| * Expose mlir::parseType to bindingsAlex Zinenko2019-10-155-79/+62
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Python bindings currently currently provide a makeScalarType function that constructs one of the predefined types. It was implemented in the bindings directly to circumvent the absence of standalone type parsing function. Now that mlir::parseType has been made available, rely on the core parsing procedure to construct types from strings in the bindings. This changes includes a library reshuffling that splits out "CoreAPIs" implementing the binding helper APIs into a separate library and makes that dependent on the Parser library. PiperOrigin-RevId: 274794516
| * AsmPrinter: avoid unused-variable warningAlex Zinenko2019-10-151-1/+1
| | | | | | | | | | | | | | | | The value defined in a loop was not being used and the function producing it re-evaluated instead. Use the value to avoid both the warning and the re-evaluation. PiperOrigin-RevId: 274794459
| * Merge Ch3 of the Toy tutorial into chapter 2.River Riddle2019-10-1410-211/+1002
| | | | | | | | | | | | This effectively rewrites Ch.2 to introduce dialects, operations, and registration instead of deferring to Ch.3. This allows for introducing the best practices up front(using ODS, registering operations, etc.), and limits the opaque API to the chapter document instead of the code. PiperOrigin-RevId: 274724289
| * NFC: Replace usages of Value::getKind with explicit isa/casts.River Riddle2019-10-142-29/+23
| | | | | | | | | | | | It is more idiomatic to use the llvm::cast infrastructure for checking the type of a value. PiperOrigin-RevId: 274684945
| * Allowing replacing non-root operations in DialectConversion.River Riddle2019-10-144-4/+47
| | | | | | | | | | | | When dealing with regions, or other patterns that need to generate temporary operations, it is useful to be able to replace other operations than the root op being matched. Before this PR, these operations would still be considered for legalization meaning that the conversion would either fail, erroneously need to mark these ops as legal, or add unnecessary patterns. PiperOrigin-RevId: 274598513
| * Use single quotes to wrap '@HOST_LDFLAGS@' in LIT config fileMehdi Amini2019-10-141-1/+2
| | | | | | | | | | | | ldflags can contain double-quoted paths, so must use single quotes here. PiperOrigin-RevId: 274581983
| * Fix linalg.subview behavior in (partially) static cases.Nicolas Vasilache2019-10-146-52/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the implementation of the strided memref [RFC](https://groups.google.com/a/tensorflow.org/forum/#!msg/mlir/MaL8m2nXuio/1scRqZa6AQAJ) landed, linalg started using this type instead of the now retired !linalg.view. As static and partially static cases appear, the stride information needs to be maintained properly. In particular, the result type of the subview op was generally incorrect. This CL fixes the issue by computing a return type that: 1. always has dynamic sizes, which is generally the only correct way to construct a subview in the absence of data padding and/or code versioning. 2. has the same strides as the base strided memref. Point 1. above can be further refined but will needs further analysis and canonicalization to optimize the particular case where: 1. The base memref has static size along a given dimension. 2. The subview size can be statically derived (e.g. after canonicalization). 3. *And* the subview size is an even divisor of the base memref. This 3rd constraint is well-known in the case of tiled layouts that don't assume implicit padding: the boundary tile may be only partial and has size given by `problem_size % tile_size`. Tests are updated as appropriate. PiperOrigin-RevId: 274578624
| * Add lowering of VectorOps dialect to LLVM to the Linalg LLVM lowering passNicolas Vasilache2019-10-142-0/+44
| | | | | | | | | | | | | | | | | | This fixes an omission that prevents Linalg to lower generic ops regions operating on ops in the VectorOps dialect. To achieve this we simply need to `populateVectorToLLVMConversionPatterns` in the conversion. Relevant tests are added. PiperOrigin-RevId: 274577325
| * Add LLVM IR dialect hooks for FP128 and X86_FP80 typesEric Schweitz2019-10-113-1/+19
| | | | | | | | | | | | | | Closes tensorflow/mlir#184 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/184 from schweitzpgi:more-float-types ca27d00510a86ffc9c79c65fb3a0193b5ea097a0 PiperOrigin-RevId: 274288813
| * Emit LLVM IR equivalent of sizeof when lowering alloc operationsAlex Zinenko2019-10-113-26/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Originally, the lowering of `alloc` operations has been computing the number of bytes to allocate when lowering based on the properties of MLIR type. This does not take into account type legalization that happens when compiling LLVM IR down to target assembly. This legalization can widen the type, potentially leading to out-of-bounds accesses to `alloc`ed data due to mismatches between address computation that takes the widening into account and allocation that does not. Use the LLVM IR's equivalent of `sizeof` to compute the number of bytes to be allocated: %0 = getelementptr %type* null, %indexType 0 %1 = ptrtoint %type* %0 to %indexType adapted from http://nondot.org/sabre/LLVMNotes/SizeOf-OffsetOf-VariableSizedStructs.txt PiperOrigin-RevId: 274159900
| * LLVM Dialect: introduce llvm.mlir.null operationAlex Zinenko2019-10-116-0/+78
| | | | | | | | | | | | | | | | Similarly to `llvm.mlir.undef`, this auxiliary operation creates an SSA value that corresponds to `null` in LLVM IR. This operation is necessary to model sizeof(<...>) behavior when allocating memory. PiperOrigin-RevId: 274158760
| * Drop obsolete code from std to llvm memref loweringUday Bondhugula2019-10-111-22/+11
| | | | | | | | | | | | | | | | | | | | | | | | - dropping what looks like outdated code post some of the previous updates Signed-off-by: Uday Bondhugula <uday@polymagelabs.com> Closes tensorflow/mlir#179 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/179 from bondhugula:llfix 2a72ea441fe1b3924802273ffbe9870afeb90f91 PiperOrigin-RevId: 274158273
| * Rename LLVM::exp and LLVM::fmuladd to LLVM::ExpOP and LLVM::FMulAddOp.Alexander Belyaev2019-10-113-4/+4
| | | | | | | | PiperOrigin-RevId: 274154655
| * Add unary ops and ExpOp to Standard Dialect.Alexander Belyaev2019-10-117-36/+167
| | | | | | | | PiperOrigin-RevId: 274152154
OpenPOWER on IntegriCloud