[llvm] r191600 - SelectionDAG: Clean up LegalizeSetCCCondCode() function
Charles Davis
cdavis5x at gmail.com
Sat Sep 28 14:12:54 PDT 2013
On Sep 27, 2013, at 8:50 PM, Tom Stellard wrote:
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp?rev=191600&r1=191599&r2=191600&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Fri Sep 27 21:50:32 2013
> @@ -95,7 +95,7 @@ private:
> SDValue N1, SDValue N2,
> ArrayRef<int> Mask) const;
>
> - void LegalizeSetCCCondCode(EVT VT, SDValue &LHS, SDValue &RHS, SDValue &CC,
> + bool LegalizeSetCCCondCode(EVT VT, SDValue &LHS, SDValue &RHS, SDValue &CC,
> SDLoc dl);
>
> SDValue ExpandLibCall(RTLIB::Libcall LC, SDNode *Node, bool isSigned);
> @@ -1596,9 +1596,14 @@ void SelectionDAGLegalize::ExpandDYNAMIC
> }
>
> /// LegalizeSetCCCondCode - Legalize a SETCC with given LHS and RHS and
> -/// condition code CC on the current target. This routine expands SETCC with
> -/// illegal condition code into AND / OR of multiple SETCC values.
> -void SelectionDAGLegalize::LegalizeSetCCCondCode(EVT VT,
> +/// condition code CC on the current target.
> +/// If the SETCC has been legalized using AND / OR, then the legalized node
> +/// will be stored in LHS and RHS and CC will be set to SDValue().
This isn't quite true (according to the behavior of the function, anyway): In this case, only LHS gets set to the legalized node; both RHS and CC get set to empty (SDValue()).
> +/// If the SETCC has been legalized by using getSetCCSwappedOperands(),
> +/// then the values of LHS and RHS will be swapped and CC will be set to the
> +/// new condition.
> +/// \returns true if the SetCC has been legalized, false if it hasn't.
> +bool SelectionDAGLegalize::LegalizeSetCCCondCode(EVT VT,
> SDValue &LHS, SDValue &RHS,
> SDValue &CC,
> SDLoc dl) {
> @@ -1659,10 +1664,9 @@ void SelectionDAGLegalize::LegalizeSetCC
> // different manner of supporting expanding these cases.
> llvm_unreachable("Don't know how to expand this condition!");
> }
> - LHS = DAG.getSetCC(dl, VT, RHS, LHS, InvCC);
> - RHS = SDValue();
> - CC = SDValue();
> - return;
> + std::swap(LHS, RHS);
> + CC = DAG.getCondCode(InvCC);
> + return true;
> }
>
> SDValue SetCC1, SetCC2;
> @@ -1679,9 +1683,10 @@ void SelectionDAGLegalize::LegalizeSetCC
> LHS = DAG.getNode(Opc, dl, VT, SetCC1, SetCC2);
> RHS = SDValue();
> CC = SDValue();
> - break;
> + return true;
> }
> }
> + return false;
> }
>
> /// EmitStackConvert - Emit a store/load combination to the stack. This stores
> @@ -3620,10 +3625,16 @@ void SelectionDAGLegalize::ExpandNode(SD
> Tmp1 = Node->getOperand(0);
> Tmp2 = Node->getOperand(1);
> Tmp3 = Node->getOperand(2);
> - LegalizeSetCCCondCode(Node->getValueType(0), Tmp1, Tmp2, Tmp3, dl);
> + bool Legalized = LegalizeSetCCCondCode(Node->getValueType(0), Tmp1, Tmp2,
> + Tmp3, dl);
> +
> + if (Legalized) {
> + // If we exapanded the SETCC by swapping LHS and RHS, create a new SETCC
> + // node..
Too many periods here.
Chip
More information about the llvm-commits
mailing list