mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Let MachineVerifier be aware of mem-to-mem instructions.
A mem-to-mem instruction (that both loads and stores), which store to an FI, cannot pass the verifier since it thinks it is loading from the FI. For the mem-to-mem instruction, do a looser check in visitMachineOperand() and only check liveness at the reg-slot while analyzing a frame index operand. Needed to make CodeGen/SystemZ/xor-01.ll pass with -verify-machineinstrs, which now runs with this flag. Reviewed by Evan Cheng and Quentin Colombet. llvm-svn: 250885
This commit is contained in:
parent
a26e394644
commit
e7a99295db
@ -994,11 +994,17 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
|
||||
LiveInts && !LiveInts->isNotInMIMap(MI)) {
|
||||
LiveInterval &LI = LiveStks->getInterval(MO->getIndex());
|
||||
SlotIndex Idx = LiveInts->getInstructionIndex(MI);
|
||||
if (MI->mayLoad() && !LI.liveAt(Idx.getRegSlot(true))) {
|
||||
|
||||
// For a memory-to-memory move, we don't know if MI is using
|
||||
// this frame index for loading or storing, so check for
|
||||
// liveness at reg-slot only in the simple load case.
|
||||
bool stores = MI->mayStore();
|
||||
bool simpleLoad = (MI->mayLoad() && !stores);
|
||||
if (simpleLoad && !LI.liveAt(Idx.getRegSlot(true))) {
|
||||
report("Instruction loads from dead spill slot", MO, MONum);
|
||||
errs() << "Live stack: " << LI << '\n';
|
||||
}
|
||||
if (MI->mayStore() && !LI.liveAt(Idx.getRegSlot())) {
|
||||
if (stores && !LI.liveAt(Idx.getRegSlot())) {
|
||||
report("Instruction stores to dead spill slot", MO, MONum);
|
||||
errs() << "Live stack: " << LI << '\n';
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
; Test 32-bit XORs in which the second operand is variable.
|
||||
;
|
||||
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s
|
||||
|
||||
declare i32 @foo()
|
||||
|
Loading…
x
Reference in New Issue
Block a user