Go to file
Quentin Colombet a6f57ad2c9 [RegUsageInfoCollector] Don't mark as saved registers that don't have subregister lanes
To determine the list of clobbered registers, the RegUsageInfoCollector pass
uses the list of callee saved registers provided by the target and then augments
it with the list of registers which have all their subregisters saved. It then
basically does the difference between all the registers and the saved registers
to come up with what is clobbered (plus it checks that the register is defined
within that functions).

The patch fixes a bug where when register does not have any subregister lane,
hence when checking if any of its subregister are not saved, we would find none
and think the register is saved as well.

That's obviously wrong.

The code was actually kind of checking for something like that with the
CoveredBySubRegs bit. What this bit says is that a register is completely
covered by its subregisters.
We required that this bit was set, to check that a register was saved by its
subregister lanes, since without this bit, we potentially would miss to check
some part of the register.

However, this bit is used de facto on registers that don't have any
subregisters (e.g., on ARM) and the code was not prepared for that.

This patch fixes this by checking that a register has subregisters before
declaring it saved when none of its lanes are modified.

llvm-svn: 361901
2019-05-28 23:43:12 +00:00
clang [X86] Fix the Sema checks for getmant builtins to only allow 4 and 8 for rounding immediates. 2019-05-28 23:26:22 +00:00
clang-tools-extra [clangd] Add SourceManager accessor to ParsedAST. NFC 2019-05-28 21:52:34 +00:00
compiler-rt [compiler-rt] Fix cmake warnings 2019-05-28 19:09:17 +00:00
debuginfo-tests Add debuginfo-tests that use cdb on Windows 2019-05-28 23:03:33 +00:00
libclc travis: Add LLVM-8 build 2019-03-27 21:28:31 +00:00
libcxx Fix test that used raw string literals. Doesn't work in C++03 2019-05-28 23:13:55 +00:00
libcxxabi [runtimes] Move libunwind, libc++abi and libc++ to lib/$target/c++ and include/c++ 2019-05-22 21:08:33 +00:00
libunwind [runtimes] Move libunwind, libc++abi and libc++ to lib/$target/c++ and include/c++ 2019-05-22 21:08:33 +00:00
lld Revert r361842 as it breaks LLDB :: tools/lldb-mi/exec/exec-finish.test 2019-05-28 20:57:56 +00:00
lldb Fix IPv6 support on lldb-server platform 2019-05-28 23:26:32 +00:00
llgo IR: Support parsing numeric block ids, and emit them in textual output. 2019-03-22 18:27:13 +00:00
llvm [RegUsageInfoCollector] Don't mark as saved registers that don't have subregister lanes 2019-05-28 23:43:12 +00:00
openmp [openmp] [test] Skip kernel-breaking tests on NetBSD 2019-05-28 14:10:47 +00:00
parallel-libs Fix typos throughout the license files that somehow I and my reviewers 2019-01-21 09:52:34 +00:00
polly [DeLICM] Use polly::singleton to allow empty result. 2019-05-21 19:18:26 +00:00
pstl [pstl] Make the default backend be the serial backend and always provide parallel policies 2019-04-24 20:12:36 +00:00
.arcconfig Update monorepo .arcconfig with new project callsign. 2019-01-31 14:34:59 +00:00
.clang-format Add .clang-tidy and .clang-format files to the toplevel of the 2019-01-29 16:43:16 +00:00
.clang-tidy Disable tidy checks with too many hits 2019-02-01 11:20:13 +00:00
.gitignore Add a reduced copy of the llvm .gitignore 2019-04-09 00:52:49 +00:00
README.md

README.md

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.