ARM: intrinsic support for rbit.
authorJim Grosbach <grosbach@apple.com>
Mon, 16 Jun 2014 21:55:30 +0000 (21:55 +0000)
committerJim Grosbach <grosbach@apple.com>
Mon, 16 Jun 2014 21:55:30 +0000 (21:55 +0000)
We already have an ARMISD node. Create an intrinsic to map to it so we can
add support for the frontend __rbit() intrinsic.

rdar://9283021

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211057 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/IR/IntrinsicsARM.td
lib/Target/ARM/ARMISelLowering.cpp

index d19d7b82fafe69f9f2318ed35f7ea9a0057b5fb4..145eeedc22b425332019535644153b5d9dfd23b7 100644 (file)
@@ -125,6 +125,11 @@ def int_arm_crc32cw : Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty],
 
 def int_arm_hint : Intrinsic<[], [llvm_i32_ty]>;
 
+//===----------------------------------------------------------------------===//
+// RBIT
+
+def int_arm_rbit : Intrinsic<[llvm_i32_ty], [llvm_i32_ty], [IntrNoMem]>;
+
 //===----------------------------------------------------------------------===//
 // UND (reserved undefined sequence)
 
index f9fc641b12d61c0620e22e1bc3dec98b89cc4132..4a762ce6d3bdb95f4049f438b8b39da4dcb9dd3b 100644 (file)
@@ -2542,6 +2542,11 @@ ARMTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, SelectionDAG &DAG,
   SDLoc dl(Op);
   switch (IntNo) {
   default: return SDValue();    // Don't custom lower most intrinsics.
+  case Intrinsic::arm_rbit: {
+    assert(Op.getOperand(0).getValueType() == MVT::i32 &&
+           "RBIT intrinsic must have i32 type!");
+    return DAG.getNode(ARMISD::RBIT, dl, MVT::i32, Op.getOperand(0));
+  }
   case Intrinsic::arm_thread_pointer: {
     EVT PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
     return DAG.getNode(ARMISD::THREAD_POINTER, dl, PtrVT);