mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 19:42:54 +02:00
AMDGPU: Fix verifier error in SIFoldOperands
There may be other use operands that also need their kill flags cleared. This happens in a few tests when SIFoldOperands is moved after PeepholeOptimizer. PeepholeOptimizer rewrites cases that look like: %vreg0 = ... %vreg1 = COPY %vreg0 use %vreg1<kill> %vreg2 = COPY %vreg0 use %vreg2<kill> to use the earlier source to %vreg0 = ... use %vreg0 use %vreg0 Currently SIFoldOperands sees the copied registers, so there is only one use. So far I haven't managed to come up with a test that currently has multiple uses of a foldable VGPR -> VGPR copy. llvm-svn: 250960
This commit is contained in:
parent
7b241d838d
commit
34e6b29b92
@ -366,7 +366,10 @@ bool SIFoldOperands::runOnMachineFunction(MachineFunction &MF) {
|
||||
// Clear kill flags.
|
||||
if (!Fold.isImm()) {
|
||||
assert(Fold.OpToFold && Fold.OpToFold->isReg());
|
||||
Fold.OpToFold->setIsKill(false);
|
||||
// FIXME: Probably shouldn't bother trying to fold if not an
|
||||
// SGPR. PeepholeOptimizer can eliminate redundant VGPR->VGPR
|
||||
// copies.
|
||||
MRI.clearKillFlags(Fold.OpToFold->getReg());
|
||||
}
|
||||
DEBUG(dbgs() << "Folded source from " << MI << " into OpNo " <<
|
||||
Fold.UseOpNo << " of " << *Fold.UseMI << '\n');
|
||||
|
@ -3,7 +3,7 @@
|
||||
; register operands in the correct order when modifying the opcode of an
|
||||
; instruction to V_ADD_I32_e32.
|
||||
|
||||
; CHECK: %19 = V_ADD_I32_e32 killed %13, killed %12, implicit-def %vcc, implicit %exec
|
||||
; CHECK: %19 = V_ADD_I32_e32 %13, %12, implicit-def %vcc, implicit %exec
|
||||
|
||||
define void @test(i32 addrspace(1)* %out, i32 addrspace(1)* %in) {
|
||||
entry:
|
||||
|
Loading…
Reference in New Issue
Block a user