Flag MOV32to32_ with EXTRACT_SUBREG. They should not be scheduled apart.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42894 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2007-10-12 07:55:53 +00:00
parent a8e8864094
commit 96aaa54529

View File

@ -1000,8 +1000,9 @@ SDNode *X86DAGToDAGISel::getTruncate(SDOperand N0, MVT::ValueType VT) {
VT = MVT::i32; VT = MVT::i32;
break; break;
} }
N0 = N0 = SDOperand(CurDAG->getTargetNode(Opc, VT, MVT::Flag, N0), 0);
SDOperand(CurDAG->getTargetNode(Opc, VT, N0), 0); return CurDAG->getTargetNode(X86::EXTRACT_SUBREG,
VT, N0, SRIdx, N0.getValue(1));
} }
break; break;
case MVT::i16: case MVT::i16:
@ -1010,11 +1011,9 @@ SDNode *X86DAGToDAGISel::getTruncate(SDOperand N0, MVT::ValueType VT) {
case MVT::i32: case MVT::i32:
SRIdx = CurDAG->getTargetConstant(3, MVT::i32); // SubRegSet 3 SRIdx = CurDAG->getTargetConstant(3, MVT::i32); // SubRegSet 3
break; break;
default: assert(0 && "Unknown truncate!"); default: assert(0 && "Unknown truncate!"); break;
} }
return CurDAG->getTargetNode(X86::EXTRACT_SUBREG, return CurDAG->getTargetNode(X86::EXTRACT_SUBREG, VT, N0, SRIdx);
VT,
N0, SRIdx);
} }
@ -1382,7 +1381,8 @@ SDNode *X86DAGToDAGISel::Select(SDOperand N) {
default: assert(0 && "Unknown any_extend!"); default: assert(0 && "Unknown any_extend!");
} }
if (SRIdx.Val) { if (SRIdx.Val) {
SDNode *ResNode = CurDAG->getTargetNode(X86::INSERT_SUBREG, NVT, N0, SRIdx); SDNode *ResNode = CurDAG->getTargetNode(X86::INSERT_SUBREG,
NVT, N0, SRIdx);
#ifndef NDEBUG #ifndef NDEBUG
DOUT << std::string(Indent-2, ' ') << "=> "; DOUT << std::string(Indent-2, ' ') << "=> ";