diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-12-18 15:45:51 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-12-18 15:45:51 +0000 |
| commit | abb11cc83e8192cd9974548a0182500d4206ca07 (patch) | |
| tree | dec347a3a4750a3ce8bdc043c302832449c85bb6 /llvm/utils/TableGen | |
| parent | ebcfa0c210205b8a413818b8de282caf6cf21aa2 (diff) | |
| download | bcm5719-llvm-abb11cc83e8192cd9974548a0182500d4206ca07.tar.gz bcm5719-llvm-abb11cc83e8192cd9974548a0182500d4206ca07.zip | |
More fixes for Selection of copyto/fromreg with a flag
llvm-svn: 24829
Diffstat (limited to 'llvm/utils/TableGen')
| -rw-r--r-- | llvm/utils/TableGen/DAGISelEmitter.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/llvm/utils/TableGen/DAGISelEmitter.cpp b/llvm/utils/TableGen/DAGISelEmitter.cpp index b8077b361a5..9b4c4a65cf0 100644 --- a/llvm/utils/TableGen/DAGISelEmitter.cpp +++ b/llvm/utils/TableGen/DAGISelEmitter.cpp @@ -2353,7 +2353,7 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { << " SDOperand Chain = Select(N.getOperand(0));\n" << " unsigned Reg = cast<RegisterSDNode>(N.getOperand(1))->getReg();\n" << " MVT::ValueType VT = N.Val->getValueType(0);\n" - << " if (N.getNumOperands() == 2) {\n" + << " if (N.Val->getNumValues() == 2) {\n" << " if (Chain == N.getOperand(0)) return N; // No change\n" << " SDOperand New = CurDAG->getCopyFromReg(Chain, Reg, VT);\n" << " CodeGenMap[N.getValue(0)] = New;\n" @@ -2361,8 +2361,9 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { << " return New.getValue(N.ResNo);\n" << " } else {\n" << " SDOperand Flag;\n" - << " if (N.getOperand(2).Val) Flag = Select(N.getOperand(2));\n" - << " if (Chain == N.getOperand(0) && Flag == N.getOperand(2))\n" + << " if (N.getNumOperands() == 3) Flag = Select(N.getOperand(2));\n" + << " if (Chain == N.getOperand(0) &&\n" + << " (N.getNumOperands() == 2 || Flag == N.getOperand(2)))\n" << " return N; // No change\n" << " SDOperand New = CurDAG->getCopyFromReg(Chain, Reg, VT, Flag);\n" << " CodeGenMap[N.getValue(0)] = New;\n" @@ -2373,21 +2374,19 @@ void DAGISelEmitter::EmitInstructionSelector(std::ostream &OS) { << " }\n" << " case ISD::CopyToReg: {\n" << " SDOperand Chain = Select(N.getOperand(0));\n" - << " SDOperand Reg = N.getOperand(1);\n" + << " unsigned Reg = cast<RegisterSDNode>(N.getOperand(1))->getReg();\n" << " SDOperand Val = Select(N.getOperand(2));\n" << " SDOperand Result = N;\n" - << " if (N.getNumOperands() == 3) {\n" + << " if (N.Val->getNumValues() == 1) {\n" << " if (Chain != N.getOperand(0) || Val != N.getOperand(2))\n" - << " Result = CurDAG->getNode(ISD::CopyToReg, MVT::Other,\n" - << " Chain, Reg, Val);\n" + << " Result = CurDAG->getCopyToReg(Chain, Reg, Val);\n" << " return CodeGenMap[N] = Result;\n" << " } else {\n" << " SDOperand Flag;\n" - << " if (N.getOperand(3).Val) Flag = Select(N.getOperand(3));\n" + << " if (N.getNumOperands() == 4) Flag = Select(N.getOperand(3));\n" << " if (Chain != N.getOperand(0) || Val != N.getOperand(2) ||\n" - << " Flag != N.getOperand(3))\n" - << " Result = CurDAG->getNode(ISD::CopyToReg, MVT::Other,\n" - << " Chain, Reg, Val, Flag);\n" + << " (N.getNumOperands() == 4 && Flag != N.getOperand(3)))\n" + << " Result = CurDAG->getCopyToReg(Chain, Reg, Val, Flag);\n" << " CodeGenMap[N.getValue(0)] = Result;\n" << " CodeGenMap[N.getValue(1)] = Result.getValue(1);\n" << " return Result.getValue(N.ResNo);\n" |

