summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-05-01 00:28:44 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-05-01 00:28:44 +0000
commit66561537f539a9b114f8fde39ef555704bdd4365 (patch)
treeace9d13383cff362e2823382fb62d61942620558 /llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
parent5d059718c99cbaf92b9039e9cf0b6bd73cf19ac4 (diff)
downloadbcm5719-llvm-66561537f539a9b114f8fde39ef555704bdd4365.tar.gz
bcm5719-llvm-66561537f539a9b114f8fde39ef555704bdd4365.zip
Add a pseudo instruction REG_SEQUENCE that takes a list of registers and
sub-register indices and outputs a single super register which is formed from a consecutive sequence of registers. This is used as register allocation / coalescing aid and it is useful to represent instructions that output register pairs / quads. For example, v1024, v1025 = vload <address> where v1024 and v1025 forms a register pair. This really should be modelled as v1024<3>, v1025<4> = vload <address> but it would violate SSA property before register allocation is done. Currently we use insert_subreg to form the super register: v1026 = implicit_def v1027 - insert_subreg v1026, v1024, 3 v1028 = insert_subreg v1027, v1025, 4 ... = use v1024 = use v1028 But this adds pseudo live interval overlap between v1024 and v1025. We can now modeled it as v1024, v1025 = vload <address> v1026 = REG_SEQUENCE v1024, 3, v1025, 4 ... = use v1024 = use v1026 After coalescing, it will be v1026<3>, v1025<4> = vload <address> ... = use v1026<3> = use v1026 llvm-svn: 102815
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud