summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
| * Homogenize the description of the MemRef conversion to the LLVM dialectAlex Zinenko2019-12-171-46/+53
| | | | | | | | | | | | | | | | | | The conversion procedure has been updated to reflect the most recent MemRef descriptor proposal, but the documentation was only updated for the type conversion, omitting the address computation section. Make sure the two sections agree. PiperOrigin-RevId: 286022684
| * Add pattern rewrite to forward vector tuple elements to their users.Andy Davis2019-12-172-14/+38
| | | | | | | | | | | | User(TupleGetOp(ExtractSlicesOp(InsertSlicesOp(TupleOp(Producer))) -> User(Producer) PiperOrigin-RevId: 286020249
| * fix a typo in OpDefinitions docJin Mingjian2019-12-171-1/+1
| | | | | | | | | | | | | | | | | | [{ matched with }], rather than ]} Closes tensorflow/mlir#320 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/320 from jinmingjian:patch-1 6b0870d02284f023bda2b28380960eb31d34f3b6 PiperOrigin-RevId: 286007638
| * Add a new utility class TypeSwitch to ADT.River Riddle2019-12-175-0/+326
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This class provides a simplified mechanism for defining a switch over a set of types using llvm casting functionality. More specifically, this allows for defining a switch over a value of type T where each case corresponds to a type(CaseT) that can be used with dyn_cast<CaseT>(...). An example is shown below: // Traditional piece of code: Operation *op = ...; if (auto constant = dyn_cast<ConstantOp>(op)) ...; else if (auto return = dyn_cast<ReturnOp>(op)) ...; else ...; // New piece of code: Operation *op = ...; TypeSwitch<Operation *>(op) .Case<ConstantOp>([](ConstantOp constant) { ... }) .Case<ReturnOp>([](ReturnOp return) { ... }) .Default([](Operation *op) { ... }); Aside from the above, TypeSwitch supports return values, void return, multiple types per case, etc. The usability is intended to be very similar to StringSwitch. (Using c++14 template lambdas makes everything even nicer) More complex example of how this makes certain things easier: LogicalResult process(Constant op); LogicalResult process(ReturnOp op); LogicalResult process(FuncOp op); TypeSwitch<Operation *, LogicalResult>(op) .Case<ConstantOp, ReturnOp, FuncOp>([](auto op) { return process(op); }) .Default([](Operation *op) { return op->emitError() << "could not be processed"; }); PiperOrigin-RevId: 286003613
| * Integrate from upstream at revision e4fce659a759.MLIR Team2019-12-172-0/+2
| | | | | | | | PiperOrigin-RevId: 285982330
| * Add pattern rewrite which splits a vector TransferReadOp into slices ↵Andy Davis2019-12-172-39/+56
| | | | | | | | | | | | according to the unrolling/slicing scheme of its ExtractSlicesOp user. PiperOrigin-RevId: 285975613
| * Replace code with equivalent satisfiesLLVMModule() function call.Tres Popp2019-12-171-3/+1
| | | | | | | | | | | | This is a general code cleanup and should be a NFC. PiperOrigin-RevId: 285972718
| * Update vector op unrolling transformation to generate ExtractSlicesOp and ↵Andy Davis2019-12-173-178/+236
| | | | | | | | | | | | InsertSlicesOp (instead of less structured chain of StridedSliceOps and InsertStridedSliceOps). PiperOrigin-RevId: 285968051
| * Add atomic operations to SPIR-V dialect.Mahesh Ravishankar2019-12-169-18/+739
| | | | | | | | | | | | | | Some changes to the dialect generation script to allow specification of different base class to derive from in ODS. PiperOrigin-RevId: 285859230
| * Fix (de)serialization generation for SPV_ScopeAttr, SPV_MemorySemanticsAttr.Mahesh Ravishankar2019-12-161-2/+14
| | | | | | | | | | | | | | | | Scope and Memory Semantics attributes need to be serialized as a constant integer value and the <id> needs to be used to specify the value. Fix the auto-generated SPIR-V (de)serialization to handle this. PiperOrigin-RevId: 285849431
| * [spirv] Re-enable nested loop (de)serialization testLei Zhang2019-12-161-98/+99
| | | | | | | | PiperOrigin-RevId: 285849308
| * Add edsc::ops for pointwise, conv and dilated_convNicolas Vasilache2019-12-166-31/+443
| | | | | | | | | | | | | | | | | | This CL adds more Linalg EDSC ops and tests to support building pointwise operations along with conv and dilated_conv. This also fixes a bug in the existing linalg_matmul EDSC and beefs up the test. The current set of ops is already enough to build an interesting, albeit simple, model used internally. PiperOrigin-RevId: 285838012
| * Add InsertSlicesOp to the VectorOps dialect.Andy Davis2019-12-164-1/+150
| | | | | | | | PiperOrigin-RevId: 285830394
| * Plug gpu.func into the GPU lowering pipelinesAlex Zinenko2019-12-1616-126/+213
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This updates the lowering pipelines from the GPU dialect to lower-level dialects (NVVM, SPIRV) to use the recently introduced gpu.func operation instead of a standard function annotated with an attribute. In particular, the kernel outlining is updated to produce gpu.func instead of std.func and the individual conversions are updated to consume gpu.funcs and disallow standard funcs after legalization, if necessary. The attribute "gpu.kernel" is preserved in the generic syntax, but can also be used with the custom syntax on gpu.funcs. The special kind of function for GPU allows one to use additional features such as memory attribution. PiperOrigin-RevId: 285822272
| * Insert signature-converted blocks into a region with a parent operation.River Riddle2019-12-163-28/+63
| | | | | | | | | | | | This keeps the IR valid and consistent as it is expected that each block should have a valid parent region/operation. Previously, converted blocks were kept floating without a valid parent region. PiperOrigin-RevId: 285821687
| * Make "LowerToCFG" an operation passAlex Zinenko2019-12-162-8/+7
| | | | | | | | | | | | | | | | | | The conversion from the Loops dialect to the Standard dialect, also known as loop-to-cfg lowering, has been historically a function pass. It can be required on non-Standard function Ops, in particular the recently introduced GPU functions. Make the conversion an operation pass instead of a function pass. PiperOrigin-RevId: 285814560
| * [Linalg] Expose subview promotion as a declarative patternJose Ignacio Gomez2019-12-167-8/+113
| | | | | | | | | | | | | | | | | | | | | | | | This PR targest issue tensorflow/mlir#295. It exposes the already existing subiew promotion pass as a declarative pattern Change-Id: If901ebef9fb53fcd0b12ecc536f6b174ce320b92 Closes tensorflow/mlir#315 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/315 from tetuante:issue295 8e5f268b6d85f31015c33505329dbd7a4db97ac5 PiperOrigin-RevId: 285801463
| * Remove unused variable (fix warning) NFCMehdi Amini2019-12-161-2/+1
| | | | | | | | PiperOrigin-RevId: 285799680
| * [VectorOps] Add [insert/extract]element definition together with lowering to ↵Aart Bik2019-12-166-2/+248
| | | | | | | | | | | | | | | | | | | | | | | | | | | | LLVM Similar to insert/extract vector instructions but (1) work on 1-D vectors only (2) allow for a dynamic index %c3 = constant 3 : index %0 = vector.insertelement %arg0, %arg1[%c : index] : vector<4xf32> %1 = vector.extractelement %arg0[%c3 : index] : vector<4xf32> PiperOrigin-RevId: 285792205
| * Adds ExtractSlicesOp to the VectorOps dialect.Andy Davis2019-12-164-6/+388
| | | | | | | | | | | | | | ExtractSlicesOp extracts slices of its vector operand and with a specified tiling scheme. This operation centralizes the tiling scheme around a single op, which simplifies vector op unrolling and subsequent pattern rewrite transformations. PiperOrigin-RevId: 285761129
| * Make memref promotion during std->LLVM lowering the default calling conventionAlex Zinenko2019-12-163-29/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | During the conversion from the standard dialect to the LLVM dialect, memref-typed arguments are promoted from registers to memory and passed into functions by pointer. This had been introduced into the lowering to work around the abesnce of calling convention modeling in MLIR to enable better interoperability with LLVM IR generated from C, and has been exerciced for several months. Make this promotion the default calling covention when converting to the LLVM dialect. This adds the documentation, simplifies the code and makes the conversion consistent across function operations and function types used in other places, e.g. in high-order functions or attributes, which would not follow the same rule previously. PiperOrigin-RevId: 285751280
| * Remove LLVM dependency on mlir::Module and instead check Traits.Tres Popp2019-12-168-34/+61
| | | | | | | | PiperOrigin-RevId: 285724678
| * Splat op doc - fix misformat / update tablegen op desc. commentUday Bondhugula2019-12-142-5/+18
| | | | | | | | | | | | | | | | | | | | | | | | - bring op description comment in sync with the doc - fix misformat in doc Signed-off-by: Uday Bondhugula <uday@polymagelabs.com> Closes tensorflow/mlir#317 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/317 from bondhugula:quickfix 7fcd945b318c973b2488b702874c87526855c8ef PiperOrigin-RevId: 285574527
| * Add verifyCompatibleShape function overload with shapesSmit Hinsu2019-12-142-11/+24
| | | | | | | | PiperOrigin-RevId: 285574334
| * Reconcile struct and class for NestedPatternMatchers - NFCNicolas Vasilache2019-12-131-8/+11
| | | | | | | | | | | | This removes a warning and fixes a potential ABI issue on Windows. PiperOrigin-RevId: 285502010
| * Apply a level of sugaring to the linalg.generic EDSC - NFCNicolas Vasilache2019-12-133-43/+143
| | | | | | | | | | | | Make the declarative C++ builder API simpler to use so we can start chaining these ops together. PiperOrigin-RevId: 285496266
| * Refactor various canonicalization patterns as in-place folds.River Riddle2019-12-138-243/+187
| | | | | | | | | | | | This is more efficient, and allows for these to fire in more situations: e.g. createOrFold, DialectConversion, etc. PiperOrigin-RevId: 285476837
| * Skip generating C++ for "DeclareOpInterfaceMethods" in op interface gen.Jing Pu2019-12-132-6/+50
| | | | | | | | | | | | This is needed for calling the generator on a .td file that contains both OpInterface definitions and op definitions with DeclareOpInterfaceMethods<...> Traits. PiperOrigin-RevId: 285465784
| * Add a layer of EDSC for linalg.GenericOpNicolas Vasilache2019-12-1315-37/+204
| | | | | | | | | | | | | | | | This will be evolved into a simple programming model for custom ops and custom layers in followup CLs. This CL also deletes the obsolete tablegen's reference-impl.td that was using EDSCs. PiperOrigin-RevId: 285459545
| * Try to fold operations in DialectConversion when trying to legalize.River Riddle2019-12-1313-68/+193
| | | | | | | | | | | | This change allows for DialectConversion to attempt folding as a mechanism to legalize illegal operations. This also expands folding support in OpBuilder::createOrFold to generate new constants when folding, and also enables it to work in the context of a PatternRewriter. PiperOrigin-RevId: 285448440
| * Add a type range for the XLA HLO dialect.Prakalp Srivastava2019-12-131-0/+1
| | | | | | | | PiperOrigin-RevId: 285437835
| * Fix maskAndClamp in gpu.all_reduce.Christian Sigg2019-12-131-2/+5
| | | | | | | | | | | | The clamp value determines the returned predicate. Previously, the clamp value was fixed to 31 and the predicate was therefore always true. This is incorrect for partial warp reductions, but went unnoticed because the returned values happened to be zero (but it could be anything). PiperOrigin-RevId: 285343160
| * NFC: Cleanup the various Op::print methods.River Riddle2019-12-1211-281/+175
| | | | | | | | | | | | This cleans up the implementation of the various operation print methods. This is done via a combination of code cleanup, adding new streaming methods to the printer(e.g. operand ranges), etc. PiperOrigin-RevId: 285285181
| * Fix logic on when to emit collective type but separate arg builderJacques Pienaar2019-12-123-16/+8
| | | | | | | | | | | | Got the comment right but the code wrong :/ PiperOrigin-RevId: 285270561
| * [VectorOps] Add lowering of vector.shuffle to LLVM IRAart Bik2019-12-122-220/+329
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For example, a shuffle %1 = vector.shuffle %arg0, %arg1 [0 : i32, 1 : i32] : vector<2xf32>, vector<2xf32> becomes a direct LLVM shuffle 0 = llvm.shufflevector %arg0, %arg1 [0 : i32, 1 : i32] : !llvm<"<2 x float>">, !llvm<"<2 x float>"> but %1 = vector.shuffle %a, %b[1 : i32, 0 : i32, 2: i32] : vector<1x4xf32>, vector<2x4xf32> becomes the more elaborate (note the index permutation that drives argument selection for the extract operations) %0 = llvm.mlir.undef : !llvm<"[3 x <4 x float>]"> %1 = llvm.extractvalue %arg1[0] : !llvm<"[2 x <4 x float>]"> %2 = llvm.insertvalue %1, %0[0] : !llvm<"[3 x <4 x float>]"> %3 = llvm.extractvalue %arg0[0] : !llvm<"[1 x <4 x float>]"> %4 = llvm.insertvalue %3, %2[1] : !llvm<"[3 x <4 x float>]"> %5 = llvm.extractvalue %arg1[1] : !llvm<"[2 x <4 x float>]"> %6 = llvm.insertvalue %5, %4[2] : !llvm<"[3 x <4 x float>]"> PiperOrigin-RevId: 285268164
| * Add type inference variant for separate params builder generatedJacques Pienaar2019-12-123-98/+108
| | | | | | | | | | | | Add variant that does invoke infer type op interface where defined. Also add entry function that invokes that different separate argument builders for wrapped, unwrapped and inference variant. PiperOrigin-RevId: 285220709
| * Retire !linalg.buffer type - NFCNicolas Vasilache2019-12-125-141/+7
| | | | | | | | | | | | This type is not used anymore now that Linalg view and subview have graduated to std and that alignment is supported on alloc. PiperOrigin-RevId: 285213424
| * [Linalg] Add test for fusion of GenericOp with IndexedGenericOp.Alexander Belyaev2019-12-121-1/+56
| | | | | | | | PiperOrigin-RevId: 285211797
| * Added lowering of `std.tanh` to llvm function call to `tanh` and `tanhf`.Ehsan Toosi2019-12-122-1/+74
| | | | | | | | | | | | | | Closes tensorflow/mlir#312 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/312 from dfki-ehna:tanh 9e89b072ff91ff390ad739501745114feb3ac856 PiperOrigin-RevId: 285205674
| * Move cpu runner utils templates to .hNicolas Vasilache2019-12-123-159/+175
| | | | | | | | | | | | | | | | This allows reusing the implementation in various places by just including and permits more easily writing test functions without explicit template instantiations. This also modifies UnrankedMemRefType to take a template type parameter since it cannot be type agnostic atm. PiperOrigin-RevId: 285187711
| * Automated rollback of commit f68ac464d818629e0fe10c23b44ac782d64a12d2Christian Sigg2019-12-128-34/+34
| | | | | | | | PiperOrigin-RevId: 285162061
| * Switch from shfl.bfly to shfl.down.Christian Sigg2019-12-128-34/+34
| | | | | | | | | | | | | | Both work for the current use case, but the latter allows implementing prefix sums and is a little easier to understand for partial warps. PiperOrigin-RevId: 285145287
| * Make OpBuilder::insert virtual instead of OpBuilder::createOperation.River Riddle2019-12-116-57/+33
| | | | | | | | | | | | It is sometimes useful to create operations separately from the builder before insertion as it may be easier to erase them in isolation if necessary. One example use case for this is folding, as we will only want to insert newly generated constant operations on success. This has the added benefit of fixing some silent PatternRewriter failures related to cloning, as the OpBuilder 'clone' methods don't call createOperation. PiperOrigin-RevId: 285086242
| * Add std.log* and llvm.intr.log* that correspond to the LLVMIR intrinsicsNicolas Vasilache2019-12-114-0/+91
| | | | | | | | PiperOrigin-RevId: 285073483
| * Add missing CMake dependency for MLIRTestIR.Mahesh Ravishankar2019-12-111-0/+3
| | | | | | | | PiperOrigin-RevId: 285039153
| * Fix OSS buildNicolas Vasilache2019-12-111-4/+4
| | | | | | | | PiperOrigin-RevId: 285036782
| * Expose a convenience function to add interface attributes to a function.Mahesh Ravishankar2019-12-113-13/+26
| | | | | | | | PiperOrigin-RevId: 285036647
| * [spirv] Add lowering for std.fdiv, std.frem, std.fsubDenis Khalikov2019-12-112-0/+31
| | | | | | | | | | | | | | Closes tensorflow/mlir#313 COPYBARA_INTEGRATE_REVIEW=https://github.com/tensorflow/mlir/pull/313 from denis0x0D:sandbox/lowering_std_farith 41715070a74d13bfa9401957478978c1bb8006c0 PiperOrigin-RevId: 285023586
| * Continue refactoring StructuredOps utilitiesNicolas Vasilache2019-12-1117-251/+369
| | | | | | | | | | | | | | This CL adds more common information to StructuredOpsUtils.h The n_view attribute is retired in favor of args_in + args_out but the CL is otherwise NFC. PiperOrigin-RevId: 285000621
| * NFC: Fix naming inconsistency: FuncOpLowering -> GPUFuncOpLowering.Christian Sigg2019-12-111-7/+3
| | | | | | | | | | | | Remove nested anonymous namespace. PiperOrigin-RevId: 284987357
OpenPOWER on IntegriCloud