diff options
| author | Dan Gohman <gohman@apple.com> | 2007-10-17 14:48:28 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2007-10-17 14:48:28 +0000 |
| commit | 8f518b987545c02d471fed5b0c6392176e473e55 (patch) | |
| tree | 2b8e81e335e29f2fdbeb7b19a1494438f9ab0ed1 /llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | |
| parent | d42c812f4a48c16b41cb9db6784fefa37a9d9877 (diff) | |
| download | bcm5719-llvm-8f518b987545c02d471fed5b0c6392176e473e55.tar.gz bcm5719-llvm-8f518b987545c02d471fed5b0c6392176e473e55.zip | |
Add support for ISD::SELECT in SplitVectorOp.
llvm-svn: 43072
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index dfb7f306f5d..da2c1dccb59 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -6225,6 +6225,26 @@ void SelectionDAGLegalize::SplitVectorOp(SDOperand Op, SDOperand &Lo, } break; } + case ISD::SELECT: { + SDOperand Cond = Node->getOperand(0); + + SDOperand LL, LH, RL, RH; + SplitVectorOp(Node->getOperand(1), LL, LH); + SplitVectorOp(Node->getOperand(2), RL, RH); + + if (MVT::isVector(Cond.getValueType())) { + // Handle a vector merge. + SDOperand CL, CH; + SplitVectorOp(Cond, CL, CH); + Lo = DAG.getNode(Node->getOpcode(), NewVT, CL, LL, RL); + Hi = DAG.getNode(Node->getOpcode(), NewVT, CH, LH, RH); + } else { + // Handle a simple select with vector operands. + Lo = DAG.getNode(Node->getOpcode(), NewVT, Cond, LL, RL); + Hi = DAG.getNode(Node->getOpcode(), NewVT, Cond, LH, RH); + } + break; + } case ISD::ADD: case ISD::SUB: case ISD::MUL: |

