diff options
author | Chris Lattner <sabre@nondot.org> | 2008-03-11 00:59:28 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-03-11 00:59:28 +0000 |
commit | c3d37ab086626e06154b2466a28dcc3bb27189b2 (patch) | |
tree | d73e96c29f31326024f786735e84cfe6dee89a0d /lib | |
parent | 145d0a29b8b1dc404823eff76892565ad3f9dd56 (diff) | |
download | external_llvm-c3d37ab086626e06154b2466a28dcc3bb27189b2.zip external_llvm-c3d37ab086626e06154b2466a28dcc3bb27189b2.tar.gz external_llvm-c3d37ab086626e06154b2466a28dcc3bb27189b2.tar.bz2 |
If a register operand comes from the variadic part of a node, don't
verify the register constraint matches what the instruction expects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48205 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SelectionDAG/ScheduleDAG.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp index 5b3b281..462b94b 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp @@ -531,14 +531,16 @@ void ScheduleDAG::AddOperand(MachineInstr *MI, SDOperand Op, // Verify that it is right. assert(TargetRegisterInfo::isVirtualRegister(VReg) && "Not a vreg?"); +#ifndef NDEBUG if (II) { + // There may be no register class for this operand if it is a variadic + // argument (RC will be NULL in this case). In this case, we just assume + // the regclass is ok. const TargetRegisterClass *RC = getInstrOperandRegClass(TRI, TII, *II, IIOpNum); - assert(RC && "Don't have operand info for this instruction!"); const TargetRegisterClass *VRC = RegInfo.getRegClass(VReg); - if (VRC != RC) { + if (RC && VRC != RC) { cerr << "Register class of operand and regclass of use don't agree!\n"; -#ifndef NDEBUG cerr << "Operand = " << IIOpNum << "\n"; cerr << "Op->Val = "; Op.Val->dump(&DAG); cerr << "\n"; cerr << "MI = "; MI->print(cerr); @@ -547,11 +549,11 @@ void ScheduleDAG::AddOperand(MachineInstr *MI, SDOperand Op, << ", align = " << VRC->getAlignment() << "\n"; cerr << "Expected RegClass size = " << RC->getSize() << ", align = " << RC->getAlignment() << "\n"; -#endif cerr << "Fatal error, aborting.\n"; abort(); } } +#endif } else if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) { MI->addOperand(MachineOperand::CreateImm(C->getValue())); } else if (ConstantFPSDNode *F = dyn_cast<ConstantFPSDNode>(Op)) { |