From 7f91fee62bb73a029f681a368ebca947925f7464 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Sun, 16 Aug 2009 17:40:59 +0000 Subject: Be more clever about regclasses in ScheduleDAGSDNodes::EmitCopyFromReg. If two uses of a CopyFromReg want different regclasses, first try a common sub-class, then fall back on the copy emitted in AddRegisterOperand. There is no need for an assert here. The cross-class joiner usually cleans up nicely. llvm-svn: 79193 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'llvm/lib/CodeGen') diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp index 12b5d143f8f..17684f528af 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodesEmit.cpp @@ -81,11 +81,11 @@ EmitCopyFromReg(SDNode *Node, unsigned ResNo, bool IsClone, bool IsCloned, if (!UseRC) UseRC = RC; else if (RC) { - if (UseRC->hasSuperClass(RC)) - UseRC = RC; - else - assert((UseRC == RC || RC->hasSuperClass(UseRC)) && - "Multiple uses expecting different register classes!"); + const TargetRegisterClass *ComRC = getCommonSubClass(UseRC, RC); + // If multiple uses expect disjoint register classes, we emit + // copies in AddRegisterOperand. + if (ComRC) + UseRC = ComRC; } } } -- cgit v1.2.3