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");
|
"unexpected physical register in G_SEQUENCE");
|
||||||
|
|
||||||
// Finally we can replace the uses.
|
// Finally we can replace the uses.
|
||||||
for (auto &Use : MRI.use_operands(ExtractReg)) {
|
MRI.replaceRegWith(ExtractReg, OrigReg);
|
||||||
Changed = true;
|
|
||||||
Use.setReg(OrigReg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AllDefsReplaced) {
|
if (AllDefsReplaced) {
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
define void @test_combines_3() { ret void }
|
define void @test_combines_3() { ret void }
|
||||||
define void @test_combines_4() { ret void }
|
define void @test_combines_4() { ret void }
|
||||||
define void @test_combines_5() { 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
|
%4:_(s32) = G_EXTRACT %2, 32
|
||||||
%5:_(s32) = G_ADD %3, %4
|
%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