diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2006-03-03 07:01:07 +0000 | 
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2006-03-03 07:01:07 +0000 | 
| commit | 3bf916ddd984bf7613d4502aca86b1040594a8ed (patch) | |
| tree | d6d8acbf930adb49679d6aed9e09d83e1ab9ca23 /llvm/lib/CodeGen/SelectionDAG | |
| parent | a7fb285c60fd4a34d56ab2bdd163886180568edd (diff) | |
| download | bcm5719-llvm-3bf916ddd984bf7613d4502aca86b1040594a8ed.tar.gz bcm5719-llvm-3bf916ddd984bf7613d4502aca86b1040594a8ed.zip | |
Add more vector NodeTypes: VSDIV, VUDIV, VAND, VOR, and VXOR.
llvm-svn: 26504
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 18 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 10 | 
2 files changed, 20 insertions, 8 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 2da993559f5..dd8a4f3851e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -152,9 +152,14 @@ private:  static unsigned getScalarizedOpcode(unsigned VecOp, MVT::ValueType VT) {    switch (VecOp) {    default: assert(0 && "Don't know how to scalarize this opcode!"); -  case ISD::VADD: return MVT::isInteger(VT) ? ISD::ADD : ISD::FADD; -  case ISD::VSUB: return MVT::isInteger(VT) ? ISD::SUB : ISD::FSUB; -  case ISD::VMUL: return MVT::isInteger(VT) ? ISD::MUL : ISD::FMUL; +  case ISD::VADD:  return MVT::isInteger(VT) ? ISD::ADD : ISD::FADD; +  case ISD::VSUB:  return MVT::isInteger(VT) ? ISD::SUB : ISD::FSUB; +  case ISD::VMUL:  return MVT::isInteger(VT) ? ISD::MUL : ISD::FMUL; +  case ISD::VSDIV: return MVT::isInteger(VT) ? ISD::SDIV: ISD::FDIV; +  case ISD::VUDIV: return MVT::isInteger(VT) ? ISD::UDIV: ISD::FDIV; +  case ISD::VAND:  return MVT::isInteger(VT) ? ISD::AND : 0; +  case ISD::VOR:   return MVT::isInteger(VT) ? ISD::OR  : 0; +  case ISD::VXOR:  return MVT::isInteger(VT) ? ISD::XOR : 0;    }  } @@ -3646,7 +3651,12 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){    }    case ISD::VADD:    case ISD::VSUB: -  case ISD::VMUL: { +  case ISD::VMUL: +  case ISD::VSDIV: +  case ISD::VUDIV: +  case ISD::VAND: +  case ISD::VOR: +  case ISD::VXOR: {      unsigned NumElements =cast<ConstantSDNode>(Node->getOperand(0))->getValue();      MVT::ValueType EVT = cast<VTSDNode>(Node->getOperand(1))->getVT();      MVT::ValueType TVT = (NumElements/2 > 1) diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index fea9b6e6dcf..3069465800c 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -496,15 +496,17 @@ public:    }    void visitDiv(User &I) {      const Type *Ty = I.getType(); -    visitBinary(I, Ty->isSigned() ? ISD::SDIV : ISD::UDIV, ISD::FDIV, 0); +    visitBinary(I, +                Ty->isSigned() ? ISD::SDIV : ISD::UDIV, ISD::FDIV, +                Ty->isSigned() ? ISD::VSDIV : ISD::VUDIV);    }    void visitRem(User &I) {      const Type *Ty = I.getType();      visitBinary(I, Ty->isSigned() ? ISD::SREM : ISD::UREM, ISD::FREM, 0);    } -  void visitAnd(User &I) { visitBinary(I, ISD::AND, 0, 0); } -  void visitOr (User &I) { visitBinary(I, ISD::OR,  0, 0); } -  void visitXor(User &I) { visitBinary(I, ISD::XOR, 0, 0); } +  void visitAnd(User &I) { visitBinary(I, ISD::AND, 0, ISD::VAND); } +  void visitOr (User &I) { visitBinary(I, ISD::OR,  0, ISD::VOR); } +  void visitXor(User &I) { visitBinary(I, ISD::XOR, 0, ISD::VXOR); }    void visitShl(User &I) { visitShift(I, ISD::SHL); }    void visitShr(User &I) {       visitShift(I, I.getType()->isUnsigned() ? ISD::SRL : ISD::SRA); | 

