diff options
author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2018-04-30 17:52:32 +0000 |
---|---|---|
committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2018-04-30 17:52:32 +0000 |
commit | b32f3656d2bc376d223b5cf38c5067e3942d1471 (patch) | |
tree | d05a04aa65dc0d6c00d96074e9d7f11a517b40db /llvm/test/CodeGen/Hexagon/struct-const.ll | |
parent | 2de9d4ad5dade13f9f21337fc20af21fd84715f3 (diff) | |
download | bcm5719-llvm-b32f3656d2bc376d223b5cf38c5067e3942d1471.tar.gz bcm5719-llvm-b32f3656d2bc376d223b5cf38c5067e3942d1471.zip |
[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
Diffstat (limited to 'llvm/test/CodeGen/Hexagon/struct-const.ll')
0 files changed, 0 insertions, 0 deletions