summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2014-02-26 20:20:30 +0000
committerHal Finkel <hfinkel@anl.gov>2014-02-26 20:20:30 +0000
commit4a7156d4215e5e3df6d6643b49d478f7e521d57e (patch)
tree37a00fe7374bd674d486f181578153ed4d88f499 /tools
parent726bae9a6616a8395a79f4346c17aaab6886eb1a (diff)
downloadllvm-4a7156d4215e5e3df6d6643b49d478f7e521d57e.tar.gz
llvm-4a7156d4215e5e3df6d6643b49d478f7e521d57e.tar.bz2
llvm-4a7156d4215e5e3df6d6643b49d478f7e521d57e.tar.xz
Fix the aggressive anti-dep breaker's subregister definition handling
The aggressive anti-dependency breaker scans instructions, bottom-up, within the scheduling region in order to find opportunities where register renaming can be used to break anti-dependencies. Unfortunately, the aggressive anti-dep breaker was treating a register definition as defining all of that register's aliases (including super registers). This behavior is incorrect when the super register is live and there are other definitions of subregisters of the super register. For example, given the following sequence: %CR2EQ<def> = CROR %CR3UN, %CR3UN<kill> %CR2GT<def> = IMPLICIT_DEF %X4<def> = MFOCRF8 %CR2 the analysis of the first subregister definition would work as expected: Anti: %CR2GT<def> = IMPLICIT_DEF Def Groups: CR2GT=g194->g0(via CR2) Antidep reg: CR2GT (zero group) Use Groups: but the analysis of the second one would not: Anti: %CR2EQ<def> = CROR %CR3UN, %CR3UN<kill> Def Groups: CR2EQ=g195 Antidep reg: CR2EQ Rename Candidates for Group g195: ... because, when processing the %CR2GT<def>, we'd mark all super registers of %CR2GT (%CR2 in this case) as defined. As a result, when processing %CR2EQ<def>, %CR2 no longer appears to be live, and %CR2EQ<def>'s group is not %unioned with the %CR2 group. I don't have an in-tree test case for this yet (and even if I did, I don't have a small one). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202294 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions