forked from OSchip/llvm-project
R600/SI: Don't verify constant bus usage of flag ops
This was checking if pseudo-operands like the source modifiers were using the constant bus, which happens to work because the values these all can be happen to be valid inline immediates. This fixes a later commit which starts checking the register class of the operands. llvm-svn: 224078
This commit is contained in:
parent
eca1e031d1
commit
e368cb378f
|
@ -1107,10 +1107,18 @@ bool SIInstrInfo::verifyInstruction(const MachineInstr *MI,
|
|||
|
||||
// Verify VOP*
|
||||
if (isVOP1(Opcode) || isVOP2(Opcode) || isVOP3(Opcode) || isVOPC(Opcode)) {
|
||||
// Only look at the true operands. Only a real operand can use the constant
|
||||
// bus, and we don't want to check pseudo-operands like the source modifier
|
||||
// flags.
|
||||
const int OpIndices[] = { Src0Idx, Src1Idx, Src2Idx };
|
||||
|
||||
unsigned ConstantBusCount = 0;
|
||||
unsigned SGPRUsed = AMDGPU::NoRegister;
|
||||
for (int i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||
const MachineOperand &MO = MI->getOperand(i);
|
||||
for (int OpIdx : OpIndices) {
|
||||
if (OpIdx == -1)
|
||||
break;
|
||||
|
||||
const MachineOperand &MO = MI->getOperand(OpIdx);
|
||||
if (usesConstantBus(MRI, MO)) {
|
||||
if (MO.isReg()) {
|
||||
if (MO.getReg() != SGPRUsed)
|
||||
|
|
Loading…
Reference in New Issue