diff options
author | Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> | 2018-10-15 08:36:03 +0000 |
---|---|---|
committer | Bjorn Pettersson <bjorn.a.pettersson@ericsson.com> | 2018-10-15 08:36:03 +0000 |
commit | 064944352e6433e24cd2fd55148583d43a99904b (patch) | |
tree | 7dcae47f960c5718031c7954019cb0c43a282565 /llvm/unittests/tools | |
parent | b44b22c6fe19db5ef8515f84028c75f1187b7708 (diff) | |
download | bcm5719-llvm-064944352e6433e24cd2fd55148583d43a99904b.tar.gz bcm5719-llvm-064944352e6433e24cd2fd55148583d43a99904b.zip |
[TwoAddressInstructionPass] Replace subregister uses when processing tied operands
Summary:
TwoAddressInstruction pass typically rewrites
%1:short = foo %0.sub_lo:long
as
%1:short = COPY %0.sub_lo:long
%1:short = foo %1:short
when having tied operands.
If there are extra un-tied operands that uses the same reg and
subreg, such as the second and third inputs to fie here:
%1:short = fie %0.sub_lo:long, %0.sub_hi:long, %0.sub_lo:long
then there was a bug which replaced the register %0 also for
the un-tied operand, but without changing the subregister indices.
So we used to get:
%1:short = COPY %0.sub_lo:long
%1:short = fie %1, %1.sub_hi:short, %1.sub_lo:short
With this fix we instead get:
%1:short = COPY %0.sub_lo:long
%1:short = fie %1, %0.sub_hi:long, %1
Reviewers: arsenm, JesperAntonsson, kparzysz, MatzeB
Reviewed By: MatzeB
Subscribers: bjope, kparzysz, wdng, llvm-commits
Differential Revision: https://reviews.llvm.org/D36224
llvm-svn: 344492
Diffstat (limited to 'llvm/unittests/tools')
0 files changed, 0 insertions, 0 deletions