From 5d7e8fcd5297169b461f2465470f620b2dd9f9c9 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Wed, 18 Mar 2015 17:20:51 +0000 Subject: [PATCH] [Hexagon] Use pseudo-instructions for true/false predicate values llvm-svn: 232650 --- llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp | 29 +++++-------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp index 6e8d431..22a7b27 100644 --- a/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp +++ b/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp @@ -997,30 +997,13 @@ SDNode *HexagonDAGToDAGISel::SelectConstantFP(SDNode *N) { SDNode *HexagonDAGToDAGISel::SelectConstant(SDNode *N) { SDLoc dl(N); if (N->getValueType(0) == MVT::i1) { - SDNode* Result; + SDNode* Result = 0; int32_t Val = cast(N)->getSExtValue(); - if (Val == -1) { - // Create the IntReg = 1 node. - SDNode* IntRegTFR = - CurDAG->getMachineNode(Hexagon::A2_tfrsi, dl, MVT::i32, - CurDAG->getTargetConstant(0, MVT::i32)); - - // Pd = IntReg - SDNode* Pd = CurDAG->getMachineNode(Hexagon::C2_tfrrp, dl, MVT::i1, - SDValue(IntRegTFR, 0)); - - // not(Pd) - SDNode* NotPd = CurDAG->getMachineNode(Hexagon::C2_not, dl, MVT::i1, - SDValue(Pd, 0)); - - // xor(not(Pd)) - Result = CurDAG->getMachineNode(Hexagon::C2_xor, dl, MVT::i1, - SDValue(Pd, 0), SDValue(NotPd, 0)); - - // We have just built: - // Rs = Pd - // Pd = xor(not(Pd), Pd) - + if (Val == -1) + Result = CurDAG->getMachineNode(Hexagon::TFR_PdTrue, dl, MVT::i1); + else if (Val == 0) + Result = CurDAG->getMachineNode(Hexagon::TFR_PdFalse, dl, MVT::i1); + if (Result) { ReplaceUses(N, Result); return Result; } -- 2.7.4