diff options
| author | Nate Begeman <natebegeman@mac.com> | 2008-07-29 15:49:41 +0000 |
|---|---|---|
| committer | Nate Begeman <natebegeman@mac.com> | 2008-07-29 15:49:41 +0000 |
| commit | fecbc8cff16c31f7481220672657eb2f67e81521 (patch) | |
| tree | 736ff40892fb60546592d0f7e38bcea88657f2db /llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | |
| parent | 98b5c16e3bf2f26264925e74f89b8a1d77ea2a1a (diff) | |
| download | bcm5719-llvm-fecbc8cff16c31f7481220672657eb2f67e81521.tar.gz bcm5719-llvm-fecbc8cff16c31f7481220672657eb2f67e81521.zip | |
Add vector shifts to the IR, patch by Eli Friedman.
CodeGen & Clang work coming next.
llvm-svn: 54161
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 12b7b4aff52..d8d45d04eb7 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -2958,7 +2958,17 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) { Tmp2 = PromoteOp(Node->getOperand(1)); // Promote the RHS. break; } - + + if ((Node->getOpcode() == ISD::SHL || + Node->getOpcode() == ISD::SRL || + Node->getOpcode() == ISD::SRA) && + !Node->getValueType(0).isVector()) { + if (TLI.getShiftAmountTy().bitsLT(Tmp2.getValueType())) + Tmp2 = DAG.getNode(ISD::TRUNCATE, TLI.getShiftAmountTy(), Tmp2); + else if (TLI.getShiftAmountTy().bitsGT(Tmp2.getValueType())) + Tmp2 = DAG.getNode(ISD::ANY_EXTEND, TLI.getShiftAmountTy(), Tmp2); + } + Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2); switch (TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0))) { @@ -2966,8 +2976,11 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) { case TargetLowering::Legal: break; case TargetLowering::Custom: Tmp1 = TLI.LowerOperation(Result, DAG); - if (Tmp1.Val) Result = Tmp1; - break; + if (Tmp1.Val) { + Result = Tmp1; + break; + } + // Fall through if the custom lower can't deal with the operation case TargetLowering::Expand: { MVT VT = Op.getValueType(); |

