llvm-project/llvm
David Green a9e9dd9a3a [AArch64] Add bf16 select handling
A bfloat select operation will currently crash, but is allowed from C.
This adds handling for the operation, turning it into a FCSELHrrr if
fullfp16 is present, or converting it to a FCSELSrrr if not. The
FCSELSrrr is created via using INSERT_SUBREG/EXTRACT_SUBREG to convert
the bf16 to a f32 and using the f32 pattern for FCSELSrrr. (I originally
attempted to do this via a tablegen pattern, but it appears that the
nzcv glue is places onto the wrong node, causing it to be forgotten and
incorrect scheduling to be emitted).

The FCSELSrrr can also be used for fp16 selects when +fullfp16 is not
present, which helps avoid an unnecessary promotion to f32.

Differential Revision: https://reviews.llvm.org/D131253
2022-08-11 14:20:36 +01:00
..
benchmarks
bindings [IR] Remove support for float binop constant expressions 2022-07-12 09:40:49 +02:00
cmake [cmake] Fix ms-compat version in WinMsvc.cmake 2022-08-09 11:13:49 +02:00
docs [COFF] Emit embedded -exclude-symbols: directives for hidden visibility for MinGW 2022-08-11 12:00:08 +03:00
examples [llvm] LLVM_FALLTHROUGH => [[fallthrough]]. NFC 2022-08-08 11:24:15 -07:00
include [MemorySanitizer] Support memcpy.inline and memset.inline 2022-08-11 10:43:49 +02:00
lib [AArch64] Add bf16 select handling 2022-08-11 14:20:36 +01:00
projects
resources
runtimes [CMake] Fix runtimes cross-compilation when using LLVM_USE_LINKER 2022-08-03 11:24:09 -07:00
test [AArch64] Add bf16 select handling 2022-08-11 14:20:36 +01:00
tools [llvm-profdata] Support JSON as as an output-only format 2022-08-09 16:24:53 -07:00
unittests [LoongArch] Define the new-style reloc types 2022-08-11 10:37:30 +08:00
utils [gn build] Port 9ae5896d96 2022-08-11 08:37:36 +00:00
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt [CMake] Check CMAKE_CXX_STANDARD and error if it's to old 2022-08-08 15:07:23 +02:00
CODE_OWNERS.TXT
CREDITS.TXT
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.