Commit
0f3230390b8becb59362963b8be630b3e32541b1
by flo[SLP] Better estimate cost of no-op extracts on target vectors.
The motivation for this patch is to better estimate the cost of extracelement instructions in cases were they are going to be free, because the source vector can be used directly.
A simple example is
%v1.lane.0 = extractelement <2 x double> %v.1, i32 0 %v1.lane.1 = extractelement <2 x double> %v.1, i32 1
%a.lane.0 = fmul double %v1.lane.0, %x %a.lane.1 = fmul double %v1.lane.1, %y
Currently we only consider the extracts free, if there are no other users.
In this particular case, on AArch64 which can fit <2 x double> in a vector register, the extracts should be free, independently of other users, because the source vector of the extracts will be in a vector register directly, so it should be free to use the vector directly.
The SLP vectorized version of noop_extracts_9_lanes is 30%-50% faster on certain AArch64 CPUs.
It looks like this does not impact any code in SPEC2000/SPEC2006/MultiSource both on X86 and AArch64 with -O3 -flto.
This originally regressed after D80773, so if there's a better alternative to explore, I'd be more than happy to do that.
Reviewed By: ABataev
Differential Revision: https://reviews.llvm.org/D99719
|
 | llvm/test/Transforms/SLPVectorizer/X86/alternate-fp-inseltpoison.ll |
 | llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp |
 | llvm/test/Transforms/SLPVectorizer/X86/alternate-fp.ll |
 | llvm/test/Transforms/SLPVectorizer/AArch64/vectorize-free-extracts-inserts.ll |
Commit
0f7bbbc481e20a152c74bc315f8995b62d54c8c0
by sander.desmalenAlways emit error for wrong interfaces to scalable vectors, unless cmdline flag is passed.
In order to bring up scalable vector support in LLVM incrementally, we introduced behaviour to emit a warning, instead of an error, when asking the wrong question of a scalable vector, like asking for the fixed number of elements.
This patch puts that behaviour under a flag. The default behaviour is that the compiler will always error, which means that all LLVM unit tests and regression tests will now fail when a code-path is taken that still uses the wrong interface.
The behaviour to demote an error to a warning can be individually enabled for tools that want to support experimental use of scalable vectors. This patch enables that behaviour when driving compilation from Clang. This means that for users who want to try out scalable-vector support, fixed-width codegen support, or build user-code with scalable vector intrinsics, Clang will not crash and burn when the compiler encounters such a case.
This allows us to do away with the following pattern in many of the SVE tests: RUN: .... 2>%t RUN: cat %t | FileCheck --check-prefix=WARN WARN-NOT: warning: ...
The behaviour to emit warnings is only temporary and we expect this flag to be removed in the future when scalable vector support is more stable.
This patch also has fixes the following tests: unittests: ScalableVectorMVTsTest.SizeQueries SelectionDAGAddressAnalysisTest.unknownSizeFrameObjects AArch64SelectionDAGTest.computeKnownBitsSVE_ZERO_EXTEND_VECTOR_INREG
regression tests: Transforms/InstCombine/vscale_gep.ll
Reviewed By: paulwalker-arm, ctetreau
Differential Revision: https://reviews.llvm.org/D98856
|
 | llvm/lib/Analysis/InstructionSimplify.cpp |
 | llvm/unittests/CodeGen/ScalableVectorMVTsTest.cpp |
 | llvm/include/llvm/Support/TypeSize.h |
 | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp |
 | llvm/lib/Support/TypeSize.cpp |
 | clang/lib/Driver/ToolChains/Clang.cpp |
 | llvm/lib/Support/CMakeLists.txt |
 | llvm/include/llvm/CodeGen/ValueTypes.h |
Commit
b0c32199a6dd85f5e50083aaf51242a803576a01
by llvmgnsyncbot[gn build] Port 0f7bbbc481e2
|
 | llvm/utils/gn/secondary/llvm/lib/Support/BUILD.gn |
Commit
500969f1d0b1d92d7c4ccfb6bf8807de96b7e4a0
by llvm-dev[X86][SSE] isHorizontalBinOp - use getTargetShuffleInputs helper
Use the getTargetShuffleInputs helper for all shuffle decoding
|
 | llvm/lib/Target/X86/X86ISelLowering.cpp |
Commit
455973162cb98d440753fcff923793d24de00c83
by omair.javaid[LLDB] Skip TestLoadUsingLazyBind.py on arm/linux
|
 | lldb/test/API/functionalities/load_lazy/TestLoadUsingLazyBind.py |
Commit
411673e769acfc63a75b9e643775b6c7f27f256f
by fraser[RISCV] Test llvm.experimental.vector.insert intrinsics on RV32
RV32 is able to use the llvm.experimental.vector.insert intrinsics too. This patch ensures they're tested.
Reviewed By: khchen, asb
Differential Revision: https://reviews.llvm.org/D99655
|
 | llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert-subvector.ll |
 | llvm/test/CodeGen/RISCV/rvv/insert-subvector.ll |
Commit
b82b305cf94a57a7e0e72f576b85aaa136a505c3
by jeroen.dobbelaere[InstCombine] Fix out-of-bounds ashr(shl) optimization
This fixes a crash found by the oss fuzzer and reported by @fhahn. The suggestion of @RKSimon seems to be the correct fix here. (See D91343).
The oss fuzz report can be found here: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=32759
Reviewed By: lebedev.ri
Differential Revision: https://reviews.llvm.org/D99792
|
 | llvm/test/Transforms/InstCombine/oss_fuzz_32759.ll |
 | llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp |
Commit
6dd07fa513cd3b806e7f852bb98e5c34bab11b36
by antiagainst[mlir][spirv] Add utilities for push constant value
This commit add utility functions for creating push constant storage variable and loading values from it.
Along the way, performs some clean up:
* Deleted `setABIAttrs`, which is just a 4-liner function with one user. * Moved `SPIRVConverstionTarget` into `mlir` namespace, to be consistent with `SPIRVTypeConverter` and `LLVMConversionTarget`.
Reviewed By: mravishankar
Differential Revision: https://reviews.llvm.org/D99725
|
 | mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRV.cpp |
 | mlir/lib/Conversion/StandardToSPIRV/StandardToSPIRVPass.cpp |
 | mlir/lib/Dialect/SPIRV/Transforms/SPIRVConversion.cpp |
 | mlir/lib/Conversion/LinalgToSPIRV/LinalgToSPIRVPass.cpp |
 | mlir/test/lib/Dialect/SPIRV/TestAvailability.cpp |
 | mlir/lib/Conversion/SCFToSPIRV/SCFToSPIRVPass.cpp |
 | mlir/lib/Conversion/GPUToSPIRV/GPUToSPIRVPass.cpp |
 | mlir/lib/Conversion/VectorToSPIRV/VectorToSPIRVPass.cpp |
 | mlir/docs/Dialects/SPIR-V.md |
 | mlir/include/mlir/Dialect/SPIRV/Transforms/SPIRVConversion.h |
Commit
ab3c5fb28259a3b768d9774baddaab58c7e51438
by JunMa[NFC][SVE] Use SVE_4_Op_Imm_Pat for sve_intx_dot_by_indexed_elem
|
 | llvm/lib/Target/AArch64/SVEInstrFormats.td |
Commit
274ac9d40e79f25ac8c928732875708b5bac8f09
by JunMa[AArch64][SVE] Lowering sve.dot to DOT node
Differential Revision: https://reviews.llvm.org/D99699
|
 | llvm/lib/Target/AArch64/AArch64ISelLowering.cpp |
 | llvm/test/CodeGen/AArch64/sve-intrinsics-int-arith.ll |
 | llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td |
 | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp |
Commit
2dfa2c0ea02d0777fb971c2519b0b9014e72b547
by JunMa[NFC][SVE] update sve-intrinsics-int-arith.ll under update_llc_test_checks.py
|
 | llvm/test/CodeGen/AArch64/sve-intrinsics-int-arith.ll |