llvm-project/llvm
Sanjay Patel 2ed15984b4 [SDAG] try to reduce compare of funnel shift equal 0
fshl (or X, Y), X, C ==/!= 0 --> or (shl Y, C), X ==/!= 0
fshl X, (or X, Y), C ==/!= 0 --> or (srl Y, BW-C), X ==/!= 0

This is similar to an existing setcc-of-rotate fold, but the
matching requires more checks for the more general funnel op:
https://alive2.llvm.org/ce/z/Ab2jDd

We are effectively decomposing the funnel shift into logical
shifts, reassociating, and removing a shift.

This should get us the final improvements for x86-64 that were
originally shown in D111530
( https://github.com/llvm/llvm-project/issues/49541 );
x86-32 still shows some SHLD/SHRD, so the pattern is not
matching there yet.

Differential Revision: https://reviews.llvm.org/D122919
2022-04-11 07:44:58 -04:00
..
benchmarks
bindings
cmake Bump minimum toolchain version 2022-04-08 09:05:33 +02:00
docs [Clang] Enable opaque pointers by default 2022-04-11 11:13:45 +02:00
examples Reland "[ELF] Enable new passmanager plugin support for LTO" 2022-03-24 16:29:18 +01:00
include [ThinLTOCodeGenerator] Remove support for legacy PM 2022-04-11 11:30:50 +02:00
lib [SDAG] try to reduce compare of funnel shift equal 0 2022-04-11 07:44:58 -04:00
projects
resources
runtimes Revert "[runtimes] Create Tests.cmake if it does not exist" 2022-04-01 09:29:54 -07:00
test [SDAG] try to reduce compare of funnel shift equal 0 2022-04-11 07:44:58 -04:00
tools [llvm-lto] Remove support for legacy pass manager 2022-04-11 09:40:17 +02:00
unittests [RGT] Use GTEST_SKIP() in more places where we skip a test 2022-04-08 15:20:53 -07:00
utils [AVR] Merge AVRRelaxMemOperations into AVRExpandPseudoInsts 2022-04-11 02:42:13 +00:00
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt [cmake] Remove LLVM_ENABLE_NEW_PASS_MANAGER cmake option 2022-04-06 09:52:21 +02:00
CODE_OWNERS.TXT [CODE_OWNERS/CREDITS] Update my email address 2022-03-16 21:07:15 +00:00
CREDITS.TXT [CODE_OWNERS/CREDITS] Update my email address 2022-03-16 21:07:15 +00:00
LICENSE.TXT
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in

README.txt

The LLVM Compiler Infrastructure
================================

This directory and its subdirectories contain source code for LLVM,
a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.