mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-05 13:09:10 +00:00
Avoid including explicit uses when counting SDNode imp-uses.
It is legal to have a register node as an explicit operand, it shouldn't be counted as an implicit use. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162591 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
16865d0612
commit
baa74e4b35
@ -55,7 +55,8 @@ unsigned InstrEmitter::CountResults(SDNode *Node) {
|
||||
///
|
||||
/// Also count physreg RegisterSDNode and RegisterMaskSDNode operands preceding
|
||||
/// the chain and glue. These operands may be implicit on the machine instr.
|
||||
static unsigned countOperands(SDNode *Node, unsigned &NumImpUses) {
|
||||
static unsigned countOperands(SDNode *Node, unsigned NumExpUses,
|
||||
unsigned &NumImpUses) {
|
||||
unsigned N = Node->getNumOperands();
|
||||
while (N && Node->getOperand(N - 1).getValueType() == MVT::Glue)
|
||||
--N;
|
||||
@ -63,7 +64,8 @@ static unsigned countOperands(SDNode *Node, unsigned &NumImpUses) {
|
||||
--N; // Ignore chain if it exists.
|
||||
|
||||
// Count RegisterSDNode and RegisterMaskSDNode operands for NumImpUses.
|
||||
for (unsigned I = N; I; --I) {
|
||||
NumImpUses = N - NumExpUses;
|
||||
for (unsigned I = N; I > NumExpUses; --I) {
|
||||
if (isa<RegisterMaskSDNode>(Node->getOperand(I - 1)))
|
||||
continue;
|
||||
if (RegisterSDNode *RN = dyn_cast<RegisterSDNode>(Node->getOperand(I - 1)))
|
||||
@ -720,7 +722,8 @@ EmitMachineNode(SDNode *Node, bool IsClone, bool IsCloned,
|
||||
const MCInstrDesc &II = TII->get(Opc);
|
||||
unsigned NumResults = CountResults(Node);
|
||||
unsigned NumImpUses = 0;
|
||||
unsigned NodeOperands = countOperands(Node, NumImpUses);
|
||||
unsigned NodeOperands =
|
||||
countOperands(Node, II.getNumOperands() - II.getNumDefs(), NumImpUses);
|
||||
bool HasPhysRegOuts = NumResults > II.getNumDefs() && II.getImplicitDefs()!=0;
|
||||
#ifndef NDEBUG
|
||||
unsigned NumMIOperands = NodeOperands + NumResults;
|
||||
|
Loading…
Reference in New Issue
Block a user