Changes in directory llvm/lib/Target/Sparc:
SparcISelDAGToDAG.cpp updated: 1.86 -> 1.87 SparcInstrInfo.td updated: 1.121 -> 1.122 --- Log message: kill ADD_PARTS & SUB_PARTS and replace them with fancy new ADDC, ADDE, SUBC and SUBE nodes that actually expose what's going on and allow for significant simplifications in the targets. --- Diffs of the changes: (+18 -41) SparcISelDAGToDAG.cpp | 35 ----------------------------------- SparcInstrInfo.td | 24 ++++++++++++++++++------ 2 files changed, 18 insertions(+), 41 deletions(-) Index: llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp diff -u llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp:1.86 llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp:1.87 --- llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp:1.86 Thu Feb 16 15:11:51 2006 +++ llvm/lib/Target/Sparc/SparcISelDAGToDAG.cpp Thu Feb 16 23:43:56 2006 @@ -1075,41 +1075,6 @@ switch (N->getOpcode()) { default: break; - case ISD::ADD_PARTS: { - SDOperand LHSL, LHSH, RHSL, RHSH; - Select(LHSL, N->getOperand(0)); - Select(LHSH, N->getOperand(1)); - Select(RHSL, N->getOperand(2)); - Select(RHSH, N->getOperand(3)); - // FIXME, handle immediate RHS. - SDOperand Low = - SDOperand(CurDAG->getTargetNode(SP::ADDCCrr, MVT::i32, MVT::Flag, - LHSL, RHSL), 0); - SDOperand Hi = - SDOperand(CurDAG->getTargetNode(SP::ADDXrr, MVT::i32, LHSH, RHSH, - Low.getValue(1)), 0); - CodeGenMap[SDOperand(N, 0)] = Low; - CodeGenMap[SDOperand(N, 1)] = Hi; - Result = Op.ResNo ? Hi : Low; - return; - } - case ISD::SUB_PARTS: { - SDOperand LHSL, LHSH, RHSL, RHSH; - Select(LHSL, N->getOperand(0)); - Select(LHSH, N->getOperand(1)); - Select(RHSL, N->getOperand(2)); - Select(RHSH, N->getOperand(3)); - SDOperand Low = - SDOperand(CurDAG->getTargetNode(SP::SUBCCrr, MVT::i32, MVT::Flag, - LHSL, RHSL), 0); - SDOperand Hi = - SDOperand(CurDAG->getTargetNode(SP::SUBXrr, MVT::i32, LHSH, RHSH, - Low.getValue(1)), 0); - CodeGenMap[SDOperand(N, 0)] = Low; - CodeGenMap[SDOperand(N, 1)] = Hi; - Result = Op.ResNo ? Hi : Low; - return; - } case ISD::SDIV: case ISD::UDIV: { // FIXME: should use a custom expander to expose the SRA to the dag. Index: llvm/lib/Target/Sparc/SparcInstrInfo.td diff -u llvm/lib/Target/Sparc/SparcInstrInfo.td:1.121 llvm/lib/Target/Sparc/SparcInstrInfo.td:1.122 --- llvm/lib/Target/Sparc/SparcInstrInfo.td:1.121 Fri Feb 10 01:35:42 2006 +++ llvm/lib/Target/Sparc/SparcInstrInfo.td Thu Feb 16 23:43:56 2006 @@ -453,16 +453,20 @@ def ADDCCrr : F3_1<2, 0b010000, (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c), - "addcc $b, $c, $dst", []>; + "addcc $b, $c, $dst", + [(set IntRegs:$dst, (addc IntRegs:$b, IntRegs:$c))]>; def ADDCCri : F3_2<2, 0b010000, (ops IntRegs:$dst, IntRegs:$b, i32imm:$c), - "addcc $b, $c, $dst", []>; + "addcc $b, $c, $dst", + [(set IntRegs:$dst, (addc IntRegs:$b, simm13:$c))]>; def ADDXrr : F3_1<2, 0b001000, (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c), - "addx $b, $c, $dst", []>; + "addx $b, $c, $dst", + [(set IntRegs:$dst, (adde IntRegs:$b, IntRegs:$c))]>; def ADDXri : F3_2<2, 0b001000, (ops IntRegs:$dst, IntRegs:$b, i32imm:$c), - "addx $b, $c, $dst", []>; + "addx $b, $c, $dst", + [(set IntRegs:$dst, (adde IntRegs:$b, simm13:$c))]>; // Section B.15 - Subtract Instructions, p. 110 def SUBrr : F3_1<2, 0b000100, @@ -475,10 +479,12 @@ [(set IntRegs:$dst, (sub IntRegs:$b, simm13:$c))]>; def SUBXrr : F3_1<2, 0b001100, (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c), - "subx $b, $c, $dst", []>; + "subx $b, $c, $dst", + [(set IntRegs:$dst, (sube IntRegs:$b, IntRegs:$c))]>; def SUBXri : F3_2<2, 0b001100, (ops IntRegs:$dst, IntRegs:$b, i32imm:$c), - "subx $b, $c, $dst", []>; + "subx $b, $c, $dst", + [(set IntRegs:$dst, (sube IntRegs:$b, simm13:$c))]>; def SUBCCrr : F3_1<2, 0b010100, (ops IntRegs:$dst, IntRegs:$b, IntRegs:$c), "subcc $b, $c, $dst", @@ -866,6 +872,12 @@ def : Pat<(i32 imm:$val), (ORri (SETHIi (HI22 imm:$val)), (LO10 imm:$val))>; +// subc +def : Pat<(subc IntRegs:$b, IntRegs:$c), + (SUBCCrr IntRegs:$b, IntRegs:$c)>; +def : Pat<(subc IntRegs:$b, simm13:$val), + (SUBCCri IntRegs:$b, imm:$val)>; + // Global addresses, constant pool entries def : Pat<(SPhi tglobaladdr:$in), (SETHIi tglobaladdr:$in)>; def : Pat<(SPlo tglobaladdr:$in), (ORri G0, tglobaladdr:$in)>; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits