Commit
ec1f4e7c3b17656658c9cf49c33bc06c4bc747c2
by zinenko[mlir] switch the modeling of LLVM types to use the new mechanism
A new first-party modeling for LLVM IR types in the LLVM dialect has been developed in parallel to the existing modeling based on wrapping LLVM `Type *` instances. It resolves the long-standing problem of modeling identified structure types, including recursive structures, and enables future removal of LLVMContext and related locking mechanisms from LLVMDialect.
This commit only switches the modeling by (a) renaming LLVMTypeNew to LLVMType, (b) removing the old implementaiton of LLVMType, and (c) updating the tests. It is intentionally minimal. Separate commits will remove the infrastructure built for the transition and update API uses where appropriate.
Depends On D85020
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D85021
|
 | mlir/lib/Target/LLVMIR/TypeTranslation.cpp |
 | mlir/test/Conversion/SPIRVToLLVM/constant-op-to-llvm.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/glsl-ops-to-llvm.mlir |
 | mlir/test/lib/Dialect/LLVMIR/LLVMTypeTestDialect.cpp |
 | mlir/lib/Target/LLVMIR/ModuleTranslation.cpp |
 | mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir |
 | mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.h |
 | mlir/lib/Conversion/VectorToLLVM/CMakeLists.txt |
 | mlir/test/Dialect/GPU/outlining.mlir |
 | mlir/test/Conversion/VectorToLLVM/vector-reduction-to-llvm.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/func-to-llvm.mlir |
 | mlir/test/Target/rocdl.mlir |
 | mlir/test/Dialect/LLVMIR/func.mlir |
 | mlir/test/Target/llvmir-invalid.mlir |
 | mlir/test/Dialect/LLVMIR/nvvm.mlir |
 | mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp |
 | mlir/test/Conversion/StandardToLLVM/invalid.mlir |
 | mlir/test/Conversion/GPUToROCm/lower-rocdl-kernel-to-hsaco.mlir |
 | mlir/test/Dialect/LLVMIR/types.mlir |
 | mlir/test/Conversion/StandardToLLVM/standard-to-llvm.mlir |
 | mlir/test/Dialect/Linalg/llvm.mlir |
 | mlir/test/Target/avx512.mlir |
 | mlir/test/mlir-cpu-runner/simple.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/logical-ops-to-llvm.mlir |
 | mlir/test/Conversion/GPUCommon/memory-attrbution.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/memory-ops-to-llvm.mlir |
 | mlir/test/Dialect/LLVMIR/invalid.mlir |
 | mlir/test/lib/Target/TestLLVMTypeTranslation.cpp |
 | mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir |
 | mlir/test/Conversion/StandardToLLVM/convert-static-memref-ops.mlir |
 | mlir/test/Dialect/LLVMIR/roundtrip.mlir |
 | mlir/test/Conversion/StandardToLLVM/convert-to-llvmir.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/comparison-ops-to-llvm.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/shifts-to-llvm.mlir |
 | mlir/test/Conversion/GPUToCUDA/lower-nvvm-kernel-to-cubin.mlir |
 | mlir/lib/Dialect/LLVMIR/IR/TypeDetail.h |
 | mlir/test/Conversion/StandardToLLVM/convert-dynamic-memref-ops.mlir |
 | mlir/lib/Dialect/LLVMIR/IR/LLVMTypeSyntax.cpp |
 | mlir/lib/Dialect/LLVMIR/IR/LLVMTypes.cpp |
 | mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.h |
 | mlir/test/Conversion/SPIRVToLLVM/arithmetic-ops-to-llvm.mlir |
 | mlir/test/mlir-cpu-runner/bare_ptr_call_conv.mlir |
 | mlir/test/Dialect/LLVMIR/global.mlir |
 | mlir/test/Conversion/GPUCommon/lower-launch-func-to-gpu-runtime-calls.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/bitwise-ops-to-llvm.mlir |
 | mlir/test/Target/nvvmir.mlir |
 | mlir/include/mlir/Target/LLVMIR/TypeTranslation.h |
 | mlir/test/Dialect/LLVMIR/rocdl.mlir |
 | mlir/test/Conversion/VectorToROCDL/vector-to-rocdl.mlir |
 | mlir/test/Conversion/StandardToLLVM/calling-convention.mlir |
 | mlir/test/Target/llvmir.mlir |
 | mlir/test/Conversion/StandardToLLVM/convert-funcs.mlir |
 | mlir/test/Dialect/GPU/invalid.mlir |
 | mlir/test/Target/import.ll |
 | mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td |
 | mlir/test/Conversion/SPIRVToLLVM/cast-ops-to-llvm.mlir |
 | mlir/integration_test/Dialect/LLVMIR/CPU/test-vector-reductions-int.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/misc-ops-to-llvm.mlir |
 | mlir/test/Conversion/GPUToVulkan/invoke-vulkan.mlir |
 | mlir/test/Dialect/GPU/multiple-all-reduce.mlir |
 | mlir/integration_test/Dialect/LLVMIR/CPU/test-vector-reductions-fp.mlir |
 | mlir/test/Conversion/SPIRVToLLVM/spirv-types-to-llvm.mlir |
 | mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp |
 | mlir/test/Target/llvmir-intrinsics.mlir |
Commit
cb9f9df5f8239e291a62934b0f64eb795b26d84a
by zinenko[mlir] Fix GCC5 compilation problem in MLIR->LLVM type translation
GCC5 seems to dislike generic lambdas calling a method of the class containing the lambda without explicit `this`.
|
 | mlir/lib/Target/LLVMIR/TypeTranslation.cpp |
Commit
04e45ae1c6d2fdbf3fd4242df69d1511df757d48
by spatel[InstSimplify] fold nested min/max intrinsics with constant operands
This is based on the existing code for the non-intrinsic idioms in InstCombine.
The vector constant constraint is non-obvious: undefs should be ok in the outer call, but they can't propagate safely from the inner call in all cases. Example:
https://alive2.llvm.org/ce/z/-2bVbM define <2 x i8> @src(<2 x i8> %x) { %0: %m = umin <2 x i8> %x, { 7, undef } %m2 = umin <2 x i8> { 9, 9 }, %m ret <2 x i8> %m2 } => define <2 x i8> @tgt(<2 x i8> %x) { %0: %m = umin <2 x i8> %x, { 7, undef } ret <2 x i8> %m } Transformation doesn't verify! ERROR: Value mismatch
Example: <2 x i8> %x = < undef, undef >
Source: <2 x i8> %m = < #x00 (0) [based on undef value], #x00 (0) > <2 x i8> %m2 = < #x00 (0), #x00 (0) >
Target: <2 x i8> %m = < #x07 (7), #x10 (16) > Source value: < #x00 (0), #x00 (0) > Target value: < #x07 (7), #x10 (16) >
|
 | llvm/test/Transforms/InstSimplify/maxmin_intrinsics.ll |
 | llvm/lib/Analysis/InstructionSimplify.cpp |
Commit
1a4263d394c1a93757613bde4b1c2cf8d6a7bbb9
by ntv[mlir][Vector] Add linalg.copy-based pattern for splitting vector.transfer_read into full and partial copies.
This revision adds a transformation and a pattern that rewrites a "maybe masked" `vector.transfer_read %view[...], %pad `into a pattern resembling:
``` %1:3 = scf.if (%inBounds) { scf.yield %view : memref<A...>, index, index } else { %2 = linalg.fill(%extra_alloc, %pad) %3 = subview %view [...][...][...] linalg.copy(%3, %alloc) memref_cast %extra_alloc: memref<B...> to memref<A...> scf.yield %4 : memref<A...>, index, index } %res= vector.transfer_read %1#0[%1#1, %1#2] {masked = [false ... false]} ``` where `extra_alloc` is a top of the function alloca'ed buffer of one vector.
This rewrite makes it possible to realize the "always full tile" abstraction where vector.transfer_read operations are guaranteed to read from a padded full buffer. The extra work only occurs on the boundary tiles.
|
 | mlir/lib/Dialect/Vector/CMakeLists.txt |
 | mlir/test/Dialect/Vector/vector-transfer-full-partial-split.mlir |
 | mlir/lib/Dialect/Vector/VectorTransforms.cpp |
 | mlir/test/lib/Transforms/TestVectorTransforms.cpp |
 | mlir/include/mlir/Dialect/Vector/VectorTransforms.h |
 | mlir/include/mlir/Dialect/Vector/VectorOps.h |
Commit
98827feddb90b8d8bfeb3c85f7801ee411bab2cd
by russell.gallop[lit] Add --time-trace-output to lit
This produces a chrome://tracing compatible trace file in the same way as -ftime-trace.
This can be useful in optimising test time where one long test is causing long overall test time on a wide machine.
This also helped in finding tests which have side effects on others (e.g. https://reviews.llvm.org/D84885).
Differential Revision: https://reviews.llvm.org/D84931
|
 | llvm/utils/lit/lit/Test.py |
 | llvm/utils/lit/lit/cl_arguments.py |
 | llvm/utils/lit/lit/reports.py |
 | llvm/utils/lit/lit/worker.py |
Commit
36750ba5bd0e9e72120dbfaab4166baafd89e98a
by llvm-dev[X86][AVX] isHorizontalBinOp - relax lane-crossing limits for AVX1-only targets.
Permit lane-crossing post shuffles on AVX1 targets as long as every element comes from the same source lane, which for v8f32/v4f64 cases can be efficiently lowered with the LowerShuffleAsLanePermuteAnd* style methods.
|
 | llvm/test/CodeGen/X86/haddsub-4.ll |
 | llvm/lib/Target/X86/X86ISelLowering.cpp |