Fix r93758. Use isel patterns instead of c++ selection code to select rbit and make...
authorEvan Cheng <evan.cheng@apple.com>
Tue, 19 Jan 2010 00:44:15 +0000 (00:44 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 19 Jan 2010 00:44:15 +0000 (00:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93829 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelDAGToDAG.cpp
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMInstrThumb2.td

index 073cbffa4bdc3ba9713ea27f12efe900d5a32c7e..a260050cf363f501de829787c2e3b222b8a49032 100644 (file)
@@ -1680,12 +1680,6 @@ SDNode *ARMDAGToDAGISel::Select(SDNode *N) {
     return CurDAG->getMachineNode(ARM::VMOVRRD, dl, MVT::i32, MVT::i32,
                                   N->getOperand(0), getAL(CurDAG),
                                   CurDAG->getRegister(0, MVT::i32));
-  case ARMISD::RBIT: {
-    EVT VT = N->getValueType(0);
-    SDValue Ops[] = { N->getOperand(0),
-                      getAL(CurDAG), CurDAG->getRegister(0, MVT::i32) };
-    return CurDAG->getMachineNode(ARM::RBIT, dl, VT, Ops, 3);
-  }
   case ISD::UMUL_LOHI: {
     if (Subtarget->isThumb1Only())
       break;
index 6ea56753f31600b59e883fe07432461b6034f0f5..b1efab1e2fd4e92cb782f5f3c7611c6a7c693872 100644 (file)
@@ -107,6 +107,8 @@ def ARMMemBarrierV6  : SDNode<"ARMISD::MEMBARRIER", SDT_ARMMEMBARRIERV6,
 def ARMSyncBarrierV6 : SDNode<"ARMISD::SYNCBARRIER", SDT_ARMMEMBARRIERV6,
                               [SDNPHasChain]>;
 
+def ARMrbit          : SDNode<"ARMISD::RBIT", SDTIntUnaryOp>;
+
 //===----------------------------------------------------------------------===//
 // ARM Instruction Predicate Definitions.
 //
@@ -1456,7 +1458,9 @@ def CLZ  : AMiscA1I<0b000010110, (outs GPR:$dst), (ins GPR:$src), IIC_iUNAr,
 }
 
 def RBIT : AMiscA1I<0b01101111, (outs GPR:$dst), (ins GPR:$src), IIC_iUNAr,
-              "rbit", "\t$dst, $src", []>, Requires<[IsARM, HasV6T2]> {
+              "rbit", "\t$dst, $src",
+              [(set GPR:$dst, (ARMrbit GPR:$src))]>,
+           Requires<[IsARM, HasV6T2]> {
   let Inst{7-4}   = 0b0011;
   let Inst{11-8}  = 0b1111;
   let Inst{19-16} = 0b1111;
index 3670d0fefd769687a6026831f5a32ed0c67acd30..34a793cbbd2f1ce62c30d2f3392d60c508e8631b 100644 (file)
@@ -1541,7 +1541,8 @@ def t2CLZ : T2I_misc<0b11, 0b00, (outs GPR:$dst), (ins GPR:$src), IIC_iUNAr,
                     "clz", "\t$dst, $src", [(set GPR:$dst, (ctlz GPR:$src))]>;
 
 def t2RBIT : T2I_misc<0b01, 0b10, (outs GPR:$dst), (ins GPR:$src), IIC_iUNAr,
-                      "rbit", "\t$dst, $src", []>;
+                      "rbit", "\t$dst, $src",
+                      [(set GPR:$dst, (ARMrbit GPR:$src))]>;
 
 def t2REV : T2I_misc<0b01, 0b00, (outs GPR:$dst), (ins GPR:$src), IIC_iUNAr,
                    "rev", ".w\t$dst, $src", [(set GPR:$dst, (bswap GPR:$src))]>;