1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00
llvm-mirror/lib
Justin Bogner e1037058df GlobalISel: Make MachineCSE runnable in the middle of the GlobalISel
Right now, it is not possible to run MachineCSE in the middle of the
GlobalISel pipeline. Being able to run generic optimizations between the
core passes of GlobalISel was one of the goals of the new ISel framework.
This is the first attempt to do it.

The problem is that MachineCSE pass assumes all register operands have a
register class, which, in GlobalISel context, won't be true until after the
InstructionSelect pass. The reason for this behaviour is that before
replacing one virtual register with another, MachineCSE pass (and most of
the other optimization machine passes) must check if the virtual registers'
constraints have a (sufficiently large) intersection, and constrain the
resulting register appropriately if such intersection exists.

GlobalISel extends the representation of such constraints from just a
register class to a triple (low-level type, register bank, register
class).

This commit adds MachineRegisterInfo::constrainRegAttrs method that extends
MachineRegisterInfo::constrainRegClass to such a triple.

The idea is that going forward we should use:

- RegisterBankInfo::constrainGenericRegister within GlobalISel's
  InstructionSelect pass
- MachineRegisterInfo::constrainRegClass within SelectionDAG ISel
- MachineRegisterInfo::constrainRegAttrs everywhere else regardless
  the target and instruction selector it uses.

Patch by Roman Tereshin. Thanks!

llvm-svn: 322805
2018-01-18 02:06:56 +00:00
..
Analysis Add a ProfileCount class to represent entry counts. 2018-01-17 22:24:23 +00:00
AsmParser Allow dso_local on ifunc. 2018-01-12 17:03:43 +00:00
BinaryFormat Simplify. 2017-10-19 01:32:18 +00:00
Bitcode [NFC] fix trivial typos in comments 2018-01-17 12:29:38 +00:00
CodeGen GlobalISel: Make MachineCSE runnable in the middle of the GlobalISel 2018-01-18 02:06:56 +00:00
DebugInfo Fix pretty printing the unspecified param of a variadic function 2018-01-17 01:22:03 +00:00
Demangle Silence a bunch of implicit fallthrough warnings 2017-12-19 22:05:25 +00:00
ExecutionEngine [ExecutionEngine] Rename JITSymbol::isStrongDefinition to isStrong. 2018-01-16 20:39:51 +00:00
Fuzzer [libFuzzer] Delete llvm/lib/Fuzzer 2017-10-16 20:48:19 +00:00
FuzzMutate [FuzzMutate] Don't crash when mutator is unable to find operation 2017-12-19 08:52:51 +00:00
IR Add a ProfileCount class to represent entry counts. 2018-01-17 22:24:23 +00:00
IRReader Remove redundant includes from various places. 2017-12-13 21:31:03 +00:00
LineEditor
Linker Fix crash when linking metadata with ODR type uniquing 2018-01-09 18:32:53 +00:00
LTO [ThinLTO] - Remove code duplication. NFC. 2018-01-17 10:33:05 +00:00
MC [WebAssembly] Remove debug names from symbol table 2018-01-17 19:28:43 +00:00
Object [WebAssembly] Remove debug names from symbol table 2018-01-17 19:28:43 +00:00
ObjectYAML [WebAssembly] Add COMDAT support 2018-01-09 23:43:14 +00:00
Option [Option] For typo '-foo', suggest '--foo' 2018-01-09 19:38:04 +00:00
Passes Add a pass to generate synthetic function entry counts. 2018-01-09 19:39:35 +00:00
ProfileData Remove superfluous copies in sample profiling. 2017-12-28 18:10:41 +00:00
Support [Support] Return an enum instead of an unsigned; NFC. 2018-01-17 03:12:06 +00:00
TableGen Avoid int to string conversion in Twine or raw_ostream contexts. 2017-12-28 16:58:54 +00:00
Target [WebAssembly] Remove duplicated RTLIB names 2018-01-18 01:15:45 +00:00
Testing Force #define GTEST_LANG_CXX11. 2017-10-27 21:12:28 +00:00
ToolDrivers Remove redundant includes from various places. 2017-12-13 21:31:03 +00:00
Transforms [hwasan] LLVM-level flags for linux kernel-compatible hwasan instrumentation. 2018-01-17 23:24:38 +00:00
WindowsManifest Fix bug 34608 by moving private header out of public header. 2017-09-14 23:01:13 +00:00
XRay [XRay] Use optimistic logging model for FDR mode 2017-11-21 07:16:57 +00:00
CMakeLists.txt
LLVMBuild.txt