Go to file
Ulrich Weigand b32f3656d2 [SystemZ] Do not use glue to represent condition code dependencies
Currently, an instruction setting the condition code is linked to
the instruction using the condition code via a "glue" link in the
SelectionDAG.  This has a number of drawbacks; in particular, it
means the same CC cannot be used by multiple users.  It also makes
it more difficult to efficiently implement SADDO et. al.

This patch changes the back-end to represent CC dependencies as
normal values during SelectionDAG matching, along the lines of
how this is handled in the X86 back-end already.

In addition to the core mechanics of updating all relevant patterns,
this requires a number of additional changes:

- We now need to be able to spill/restore a CC value into a GPR
  if necessary.  This means providing a copyPhysReg implementation
  for moves involving CC, and defining getCrossCopyRegClass.

- Since we still prefer to avoid such spills, we provide an override
  for IsProfitableToFold to avoid creating a merged LOAD / ICMP if
  this would result in multiple users of the CC.

- combineCCMask no longer requires a single CC user, and no longer
  need to be careful about preventing invalid glue/chain cycles.

- emitSelect needs to be more careful in marking CC live-in to
  the basic block it generates.  Also, we can now optimize the
  case of multiple subsequent selects with the same condition
  just like X86 does.

llvm-svn: 331202
2018-04-30 17:52:32 +00:00
clang [OPENMP] Do not crash on incorrect input data. 2018-04-30 16:26:57 +00:00
clang-tools-extra [clangd] Using index for GoToDefinition. 2018-04-30 15:24:17 +00:00
compiler-rt tsan: disable trace switching after multithreaded fork 2018-04-30 07:28:45 +00:00
debuginfo-tests [Darwin] Specify DWARF 2/4 when running apple accelerator tests. 2018-02-26 20:56:45 +00:00
libclc relational/select: Condition types for half are short/ushort, not char/uchar 2018-04-25 17:36:36 +00:00
libcxx [libcxx] [test] Remove non-portable assertions from filebuf tests 2018-04-26 22:18:33 +00:00
libcxxabi Move _LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS macro to build system 2018-04-29 23:05:11 +00:00
libunwind [cmake] Remove duplicate command line options from build 2018-04-05 20:27:50 +00:00
lld Fix warning: result of 32-bit shift implicitly converted to 64 bits - NFC 2018-04-30 14:37:28 +00:00
lldb Reflow paragraphs in comments. 2018-04-30 16:49:04 +00:00
llgo irgen: Create functions instead of global variables for builtin hash and equal algorithms. 2017-06-04 22:11:28 +00:00
llvm [SystemZ] Do not use glue to represent condition code dependencies 2018-04-30 17:52:32 +00:00
openmp [OpenMP] Remove compilation warning when using clang to compile bc files. 2018-04-26 14:06:53 +00:00
parallel-libs [Axccel] Remove -Wno-missing-braces in build 2016-12-19 21:34:07 +00:00
polly Remove keep/take/give from isl C++ bindings 2018-04-29 00:57:43 +00:00
README.md Add an svn project to contain the files that appear at the root of the 2017-10-19 21:09:49 +00:00

README.md

Low Level Virtual Machine (LLVM)

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