mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 07:59:57 +00:00
[GlobalISel] Replace all combined G_EXTRACT uses.
Iterating on the use-list we're modifying doesn't work: after the first iteration, the use-list iterator will point to a MachineOperand referencing the new register. This caused us to skip the other uses to replace. Instead, use MRI.replaceRegWith(), which accounts for this behavior. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296551 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
12246fec03
commit
7fdaba3e0f
@ -94,10 +94,7 @@ bool Legalizer::combineExtracts(MachineInstr &MI, MachineRegisterInfo &MRI,
|
||||
"unexpected physical register in G_SEQUENCE");
|
||||
|
||||
// Finally we can replace the uses.
|
||||
for (auto &Use : MRI.use_operands(ExtractReg)) {
|
||||
Changed = true;
|
||||
Use.setReg(OrigReg);
|
||||
}
|
||||
MRI.replaceRegWith(ExtractReg, OrigReg);
|
||||
}
|
||||
|
||||
if (AllDefsReplaced) {
|
||||
|
@ -8,6 +8,7 @@
|
||||
define void @test_combines_3() { ret void }
|
||||
define void @test_combines_4() { ret void }
|
||||
define void @test_combines_5() { ret void }
|
||||
define void @test_combines_6() { ret void }
|
||||
...
|
||||
|
||||
---
|
||||
@ -107,3 +108,24 @@ body: |
|
||||
%4:_(s32) = G_EXTRACT %2, 32
|
||||
%5:_(s32) = G_ADD %3, %4
|
||||
...
|
||||
|
||||
---
|
||||
name: test_combines_6
|
||||
body: |
|
||||
bb.0:
|
||||
liveins: %w0
|
||||
|
||||
; CHECK-LABEL: name: test_combines_6
|
||||
; CHECK: %0(s32) = COPY %w0
|
||||
%0:_(s32) = COPY %w0
|
||||
|
||||
; Check that we replace all the uses of a G_EXTRACT.
|
||||
; CHECK-NOT: G_SEQUENCE
|
||||
; CHECK-NOT: G_EXTRACT
|
||||
; CHECK: %3(s32) = G_MUL %0, %0
|
||||
; CHECK: %4(s32) = G_ADD %0, %3
|
||||
%1:_(s32) = G_SEQUENCE %0, 0
|
||||
%2:_(s32) = G_EXTRACT %1, 0
|
||||
%3:_(s32) = G_MUL %2, %2
|
||||
%4:_(s32) = G_ADD %2, %3
|
||||
...
|
||||
|
Loading…
Reference in New Issue
Block a user