//===- TableGen'erated file -------------------------------------*- C++ -*-===//
//
// DAG Instruction Selector for the ARM target
//
// Automatically generated file, do not edit!
//
//===----------------------------------------------------------------------===//

// *** NOTE: This file is #included into the middle of the target
// *** instruction selector class.  These functions are really methods.

// Include standard, target-independent definitions and methods used
// by the instruction selector.
#include "llvm/CodeGen/DAGISelHeader.h"


// Node transformations.
inline SDValue Transform_DSubReg_f64_other_reg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(5 + (1 - N->getZExtValue()), MVT::i32);

}
inline SDValue Transform_DSubReg_f64_reg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(5 + N->getZExtValue(), MVT::i32);

}
inline SDValue Transform_DSubReg_i16_reg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(5 + N->getZExtValue() / 4, MVT::i32);

}
inline SDValue Transform_DSubReg_i32_reg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(5 + N->getZExtValue() / 2, MVT::i32);

}
inline SDValue Transform_DSubReg_i8_reg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(5 + N->getZExtValue() / 8, MVT::i32);

}
inline SDValue Transform_SSubReg_f32_reg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(1 + N->getZExtValue(), MVT::i32);

}
inline SDValue Transform_SubReg_i16_lane(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(N->getZExtValue() & 3, MVT::i32);

}
inline SDValue Transform_SubReg_i32_lane(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(N->getZExtValue() & 1, MVT::i32);

}
inline SDValue Transform_SubReg_i8_lane(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(N->getZExtValue() & 7, MVT::i32);

}
inline SDValue Transform_VMOV_get_imm16(SDNode *N) {

  return ARM::getVMOVImm(N, 2, *CurDAG);

}
inline SDValue Transform_VMOV_get_imm32(SDNode *N) {

  return ARM::getVMOVImm(N, 4, *CurDAG);

}
inline SDValue Transform_VMOV_get_imm64(SDNode *N) {

  return ARM::getVMOVImm(N, 8, *CurDAG);

}
inline SDValue Transform_VMOV_get_imm8(SDNode *N) {

  return ARM::getVMOVImm(N, 1, *CurDAG);

}
inline SDValue Transform_hi16(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant((uint32_t)N->getZExtValue() >> 16, MVT::i32);

}
inline SDValue Transform_imm_comp_XFORM(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(~((uint32_t)N->getZExtValue()), MVT::i32);

}
inline SDValue Transform_imm_neg_XFORM(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(-(int)N->getZExtValue(), MVT::i32);

}
inline SDValue Transform_lo16(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant((uint32_t)N->getZExtValue() & 0xffff,
                                   MVT::i32);

}
inline SDValue Transform_so_imm2part_1(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getSOImmTwoPartFirst((unsigned)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_so_imm2part_2(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getSOImmTwoPartSecond((unsigned)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_so_imm_neg_XFORM(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(-(int)N->getZExtValue(), MVT::i32);

}
inline SDValue Transform_so_imm_not_XFORM(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(~(int)N->getZExtValue(), MVT::i32);

}
inline SDValue Transform_so_neg_imm2part_1(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getSOImmTwoPartFirst(-(int)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_so_neg_imm2part_2(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getSOImmTwoPartSecond(-(int)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_t2_so_imm2part_1(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getT2SOImmTwoPartFirst((unsigned)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_t2_so_imm2part_2(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getT2SOImmTwoPartSecond((unsigned)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_t2_so_imm_neg_XFORM(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(-((int)N->getZExtValue()), MVT::i32);

}
inline SDValue Transform_t2_so_imm_not_XFORM(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return CurDAG->getTargetConstant(~((uint32_t)N->getZExtValue()), MVT::i32);

}
inline SDValue Transform_t2_so_neg_imm2part_1(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getT2SOImmTwoPartFirst(-(int)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_t2_so_neg_imm2part_2(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getT2SOImmTwoPartSecond(-(int)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_thumb_immshifted_shamt(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getThumbImmValShift((unsigned)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}
inline SDValue Transform_thumb_immshifted_val(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned V = ARM_AM::getThumbImmNonShiftedVal((unsigned)N->getZExtValue());
  return CurDAG->getTargetConstant(V, MVT::i32);

}

// Predicate functions.
inline bool Predicate_atomic_cmp_swap_16(SDNode *N) {

  return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_atomic_cmp_swap_32(SDNode *N) {

  return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_atomic_cmp_swap_64(SDNode *N) {

  return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;

}
inline bool Predicate_atomic_cmp_swap_8(SDNode *N) {

  return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;

}
inline bool Predicate_atomic_load_add_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_add_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_add_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_add_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_and_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_and_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_and_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_and_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_max_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_max_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_max_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_max_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_min_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_min_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_min_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_min_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_nand_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_nand_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_nand_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_nand_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_or_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_or_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_or_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_or_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_sub_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_sub_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_sub_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_sub_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_umax_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_umax_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_umax_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_umax_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_umin_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_umin_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_umin_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_umin_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_load_xor_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_load_xor_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_load_xor_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_load_xor_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_atomic_swap_16(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i16;
  
}
inline bool Predicate_atomic_swap_32(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i32;
  
}
inline bool Predicate_atomic_swap_64(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i64;
  
}
inline bool Predicate_atomic_swap_8(SDNode *N) {

    return cast<AtomicSDNode>(N)->getMemoryVT() == MVT::i8;
  
}
inline bool Predicate_bf_inv_mask_imm(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);
 
  uint32_t v = (uint32_t)N->getZExtValue();
  if (v == 0xffffffff)
    return 0;
  // there can be 1's on either or both "outsides", all the "inside"
  // bits must be 0's
  unsigned int lsb = 0, msb = 31;
  while (v & (1 << msb)) --msb;
  while (v & (1 << lsb)) ++lsb;
  for (unsigned int i = lsb; i <= msb; ++i) {
    if (v & (1 << i))
      return 0;
  }
  return 1;

}
inline bool Predicate_cvtff(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_FF;
    
}
inline bool Predicate_cvtfs(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_FS;
    
}
inline bool Predicate_cvtfu(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_FU;
    
}
inline bool Predicate_cvtsf(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_SF;
    
}
inline bool Predicate_cvtss(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_SS;
    
}
inline bool Predicate_cvtsu(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_SU;
    
}
inline bool Predicate_cvtuf(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_UF;
    
}
inline bool Predicate_cvtus(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_US;
    
}
inline bool Predicate_cvtuu(SDNode *N) {

       return cast<CvtRndSatSDNode>(N)->getCvtCode() == ISD::CVT_UU;
    
}
inline bool Predicate_extload(SDNode *N) {

  return cast<LoadSDNode>(N)->getExtensionType() == ISD::EXTLOAD;

}
inline bool Predicate_extloadf32(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::f32;

}
inline bool Predicate_extloadf64(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::f64;

}
inline bool Predicate_extloadi1(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i1;

}
inline bool Predicate_extloadi16(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_extloadi32(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_extloadi8(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i8;

}
inline bool Predicate_imm0_255(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)N->getZExtValue() < 256;

}
inline bool Predicate_imm0_255_comp(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return ~((uint32_t)N->getZExtValue()) < 256;

}
inline bool Predicate_imm0_255_neg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)(-N->getZExtValue()) < 255;

}
inline bool Predicate_imm0_31(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (int32_t)N->getZExtValue() < 32;

}
inline bool Predicate_imm0_4095(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)N->getZExtValue() < 4096;

}
inline bool Predicate_imm0_4095_neg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);
 
 return (uint32_t)(-N->getZExtValue()) < 4096; 

}
inline bool Predicate_imm0_65535(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)N->getZExtValue() < 65536;

}
inline bool Predicate_imm0_7(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)N->getZExtValue() < 8;

}
inline bool Predicate_imm0_7_neg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)-N->getZExtValue() < 8;

}
inline bool Predicate_imm16_31(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (int32_t)N->getZExtValue() >= 16 && (int32_t)N->getZExtValue() < 32;

}
inline bool Predicate_imm1_15(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (int32_t)N->getZExtValue() >= 1 && (int32_t)N->getZExtValue() < 16;

}
inline bool Predicate_imm1_31(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (int32_t)N->getZExtValue() >= 1 && (int32_t)N->getZExtValue() < 32;

}
inline bool Predicate_imm8_255(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return (uint32_t)N->getZExtValue() >= 8 && (uint32_t)N->getZExtValue() < 256;

}
inline bool Predicate_imm8_255_neg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  unsigned Val = -N->getZExtValue();
  return Val >= 8 && Val < 256;

}
inline bool Predicate_immAllOnes(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);
 return N->isAllOnesValue(); 
}
inline bool Predicate_immAllOnesV(SDNode *N) {

  return ISD::isBuildVectorAllOnes(N);

}
inline bool Predicate_immAllOnesV_bc(SDNode *N) {

  return ISD::isBuildVectorAllOnes(N);

}
inline bool Predicate_immAllZerosV(SDNode *N) {

  return ISD::isBuildVectorAllZeros(N);

}
inline bool Predicate_immAllZerosV_bc(SDNode *N) {

  return ISD::isBuildVectorAllZeros(N);

}
inline bool Predicate_istore(SDNode *N) {

  return !cast<StoreSDNode>(N)->isTruncatingStore();

}
inline bool Predicate_itruncstore(SDNode *N) {

  return cast<StoreSDNode>(N)->isTruncatingStore();

}
inline bool Predicate_lo16AllZero(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  // Returns true if all low 16-bits are 0.
  return (((uint32_t)N->getZExtValue()) & 0xFFFFUL) == 0;

}
inline bool Predicate_load(SDNode *N) {

  return cast<LoadSDNode>(N)->getExtensionType() == ISD::NON_EXTLOAD;

}
inline bool Predicate_post_store(SDNode *N) {

  ISD::MemIndexedMode AM = cast<StoreSDNode>(N)->getAddressingMode();
  return AM == ISD::POST_INC || AM == ISD::POST_DEC;

}
inline bool Predicate_post_truncst(SDNode *N) {

  ISD::MemIndexedMode AM = cast<StoreSDNode>(N)->getAddressingMode();
  return AM == ISD::POST_INC || AM == ISD::POST_DEC;

}
inline bool Predicate_post_truncstf32(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::f32;

}
inline bool Predicate_post_truncsti1(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i1;

}
inline bool Predicate_post_truncsti16(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_post_truncsti32(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_post_truncsti8(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i8;

}
inline bool Predicate_pre_store(SDNode *N) {

  ISD::MemIndexedMode AM = cast<StoreSDNode>(N)->getAddressingMode();
  return AM == ISD::PRE_INC || AM == ISD::PRE_DEC;

}
inline bool Predicate_pre_truncst(SDNode *N) {

  ISD::MemIndexedMode AM = cast<StoreSDNode>(N)->getAddressingMode();
  return AM == ISD::PRE_INC || AM == ISD::PRE_DEC;

}
inline bool Predicate_pre_truncstf32(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::f32;

}
inline bool Predicate_pre_truncsti1(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i1;

}
inline bool Predicate_pre_truncsti16(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_pre_truncsti32(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_pre_truncsti8(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i8;

}
inline bool Predicate_rot_imm(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  int32_t v = (int32_t)N->getZExtValue();
  return v == 8 || v == 16 || v == 24;

}
inline bool Predicate_sext_16_node(SDNode *N) {

  return CurDAG->ComputeNumSignBits(SDValue(N,0)) >= 17;

}
inline bool Predicate_sextload(SDNode *N) {

  return cast<LoadSDNode>(N)->getExtensionType() == ISD::SEXTLOAD;

}
inline bool Predicate_sextloadi1(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i1;

}
inline bool Predicate_sextloadi16(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_sextloadi32(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_sextloadi8(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i8;

}
inline bool Predicate_so_imm(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

      return ARM_AM::getSOImmVal(N->getZExtValue()) != -1;
    
}
inline bool Predicate_so_imm2part(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

      return ARM_AM::isSOImmTwoPartVal((unsigned)N->getZExtValue());
    
}
inline bool Predicate_so_imm_neg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

    return ARM_AM::getSOImmVal(-(int)N->getZExtValue()) != -1;
  
}
inline bool Predicate_so_imm_not(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

    return ARM_AM::getSOImmVal(~(int)N->getZExtValue()) != -1;
  
}
inline bool Predicate_so_neg_imm2part(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

      return ARM_AM::isSOImmTwoPartVal(-(int)N->getZExtValue());
    
}
inline bool Predicate_store(SDNode *N) {

  return !cast<StoreSDNode>(N)->isTruncatingStore();

}
inline bool Predicate_t2_so_imm(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return ARM_AM::getT2SOImmVal((uint32_t)N->getZExtValue()) != -1; 

}
inline bool Predicate_t2_so_imm2part(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

      return ARM_AM::isT2SOImmTwoPartVal((unsigned)N->getZExtValue());
    
}
inline bool Predicate_t2_so_imm_neg(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return ARM_AM::getT2SOImmVal(-((int)N->getZExtValue())) != -1;

}
inline bool Predicate_t2_so_imm_not(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return ARM_AM::getT2SOImmVal(~((uint32_t)N->getZExtValue())) != -1;

}
inline bool Predicate_t2_so_neg_imm2part(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

      return ARM_AM::isT2SOImmTwoPartVal(-(int)N->getZExtValue());
    
}
inline bool Predicate_thumb_immshifted(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  return ARM_AM::isThumbImmShiftedVal((unsigned)N->getZExtValue());

}
inline bool Predicate_truncstore(SDNode *N) {

  return cast<StoreSDNode>(N)->isTruncatingStore();

}
inline bool Predicate_truncstoref32(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::f32;

}
inline bool Predicate_truncstoref64(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::f64;

}
inline bool Predicate_truncstorei16(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_truncstorei32(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_truncstorei8(SDNode *N) {

  return cast<StoreSDNode>(N)->getMemoryVT() == MVT::i8;

}
inline bool Predicate_unindexedload(SDNode *N) {

  return cast<LoadSDNode>(N)->getAddressingMode() == ISD::UNINDEXED;

}
inline bool Predicate_unindexedstore(SDNode *N) {

  return cast<StoreSDNode>(N)->getAddressingMode() == ISD::UNINDEXED;

}
inline bool Predicate_vfp_f32imm(SDNode *inN) {
  ConstantFPSDNode *N = cast<ConstantFPSDNode>(inN);

      return ARM::getVFPf32Imm(N->getValueAPF()) != -1;
    
}
inline bool Predicate_vfp_f64imm(SDNode *inN) {
  ConstantFPSDNode *N = cast<ConstantFPSDNode>(inN);

      return ARM::getVFPf64Imm(N->getValueAPF()) != -1;
    
}
inline bool Predicate_vmovImm16(SDNode *N) {

  return ARM::getVMOVImm(N, 2, *CurDAG).getNode() != 0;

}
inline bool Predicate_vmovImm32(SDNode *N) {

  return ARM::getVMOVImm(N, 4, *CurDAG).getNode() != 0;

}
inline bool Predicate_vmovImm64(SDNode *N) {

  return ARM::getVMOVImm(N, 8, *CurDAG).getNode() != 0;

}
inline bool Predicate_vmovImm8(SDNode *N) {

  return ARM::getVMOVImm(N, 1, *CurDAG).getNode() != 0;

}
inline bool Predicate_vtFP(SDNode *inN) {
  VTSDNode *N = cast<VTSDNode>(inN);
 return N->getVT().isFloatingPoint(); 
}
inline bool Predicate_vtInt(SDNode *inN) {
  VTSDNode *N = cast<VTSDNode>(inN);
 return N->getVT().isInteger(); 
}
inline bool Predicate_zextload(SDNode *N) {

  return cast<LoadSDNode>(N)->getExtensionType() == ISD::ZEXTLOAD;

}
inline bool Predicate_zextloadi1(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i1;

}
inline bool Predicate_zextloadi16(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i16;

}
inline bool Predicate_zextloadi32(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i32;

}
inline bool Predicate_zextloadi8(SDNode *N) {

  return cast<LoadSDNode>(N)->getMemoryVT() == MVT::i8;

}


DISABLE_INLINE SDNode *Emit_0(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue N4 = N->getOperand(4);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N4)->getZExtValue()), MVT::i32);
  SDValue Ops0[] = { N1, N2, N3, Tmp3, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 5);
}
SDNode *Select_ARMISD_BR2_JT(SDNode *N) {
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue N3 = N->getOperand(3);
    if (N3.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDValue N4 = N->getOperand(4);
      if (N4.getNode()->getOpcode() == ISD::Constant &&
          N1.getValueType() == MVT::i32) {
        SDNode *Result = Emit_0(N, ARM::t2BR_JT);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_1(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  SDValue Ops0[] = { N1, N2, Tmp2, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_2(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N1.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain1);
  Chain1 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, N2, Tmp2, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 6);
  Chain1 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  const SDValue Froms[] = {
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain1.getNode(), Chain1.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_3(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  SDValue Ops0[] = { N10, N11, N2, Tmp3, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 5);
}
SDNode *Select_ARMISD_BR_JT(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (ARMbrjt:isVoid (ld:i32 addrmode2:i32:$target)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (tjumptable:i32):$jt, (imm:i32):$id)
    // Emits: (BR_JTm:isVoid addrmode2:i32:$target, (tjumptable:i32):$jt, (imm:i32):$id)
    // Pattern complexity = 25  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N) &&
        (Chain.getNode() == N1.getNode() || IsChainCompatible(Chain.getNode(), N1.getNode()))) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        if (SelectAddrMode2(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2)) {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::TargetJumpTable) {
            SDValue N3 = N->getOperand(3);
            if (N3.getNode()->getOpcode() == ISD::Constant &&
                N1.getValueType() == MVT::i32 &&
                N11.getValueType() == MVT::i32) {
              SDNode *Result = Emit_2(N, ARM::BR_JTm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMbrjt:isVoid (add:i32 GPR:i32:$target, GPR:i32:$idx), (tjumptable:i32):$jt, (imm:i32):$id)
    // Emits: (BR_JTadd:isVoid GPR:i32:$target, GPR:i32:$idx, (tjumptable:i32):$jt, (imm:i32):$id)
    // Pattern complexity = 12  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::ADD) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      SDValue N2 = N->getOperand(2);
      if (N2.getNode()->getOpcode() == ISD::TargetJumpTable) {
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_3(N, ARM::BR_JTadd);
          return Result;
        }
      }
    }

    // Pattern: (ARMbrjt:isVoid GPR:i32:$target, (tjumptable:i32):$jt, (imm:i32):$id)
    // Emits: (BR_JTr:isVoid GPR:i32:$target, (tjumptable:i32):$jt, (imm:i32):$id)
    // Pattern complexity = 9  cost = 1  size = 0
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDValue N3 = N->getOperand(3);
      if (N3.getNode()->getOpcode() == ISD::Constant &&
          N1.getValueType() == MVT::i32) {
        SDNode *Result = Emit_1(N, ARM::BR_JTr);
        return Result;
      }
    }
  }

  // Pattern: (ARMbrjt:isVoid tGPR:i32:$target, (tjumptable:i32):$jt, (imm:i32):$id)
  // Emits: (tBR_JTr:isVoid tGPR:i32:$target, (tjumptable:i32):$jt, (imm:i32):$id)
  // Pattern complexity = 9  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDValue N3 = N->getOperand(3);
      if (N3.getNode()->getOpcode() == ISD::Constant &&
          N1.getValueType() == MVT::i32) {
        SDNode *Result = Emit_1(N, ARM::tBR_JTr);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_4(SDNode *N, unsigned Opc0, unsigned NumInputRootOps) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SmallVector<SDValue, 8> Ops0;
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  Ops0.push_back(N1);
  for (unsigned i = NumInputRootOps + 1, e = N->getNumOperands()-(HasInFlag?1:0); i != e; ++i) {
    Ops0.push_back(N->getOperand(i));
  }
  Ops0.push_back(Chain);
  if (HasInFlag)
    Ops0.push_back(InFlag);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, &Ops0[0], Ops0.size());
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ARMISD_CALL(SDNode *N) {

  // Pattern: (ARMcall:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (BL:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_4(N, ARM::BL, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (BLr9:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_4(N, ARM::BLr9, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (tBLXi:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_4(N, ARM::tBLXi, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (tBLXi_r9:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_4(N, ARM::tBLXi_r9, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (texternalsym:iPTR):$func)
  // Emits: (tBLXi:isVoid (texternalsym:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_4(N, ARM::tBLXi, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (texternalsym:iPTR):$func)
  // Emits: (tBLXi_r9:isVoid (texternalsym:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_4(N, ARM::tBLXi_r9, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (texternalsym:iPTR):$func)
  // Emits: (BL:isVoid (texternalsym:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_4(N, ARM::BL, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid (texternalsym:iPTR):$func)
  // Emits: (BLr9:isVoid (texternalsym:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_4(N, ARM::BLr9, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid GPR:i32:$func)
  // Emits: (BLX:isVoid GPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::BLX, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid GPR:i32:$func)
  // Emits: (BLXr9:isVoid GPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::BLXr9, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid GPR:i32:$dst)
  // Emits: (tBLXr:isVoid GPR:i32:$dst)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::tBLXr, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall:isVoid GPR:i32:$dst)
  // Emits: (tBLXr_r9:isVoid GPR:i32:$dst)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::tBLXr_r9, 1);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_CALL_NOLINK(SDNode *N) {

  // Pattern: (ARMcall_nolink:isVoid GPR:i32:$func)
  // Emits: (BX:isVoid GPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::BX, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall_nolink:isVoid GPR:i32:$func)
  // Emits: (BXr9:isVoid GPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::BXr9, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall_nolink:isVoid tGPR:i32:$func)
  // Emits: (tBX:isVoid tGPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::tBX, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall_nolink:isVoid tGPR:i32:$func)
  // Emits: (tBXr9:isVoid tGPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::tBXr9, 1);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_5(SDNode *N, unsigned Opc0, unsigned NumInputRootOps) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SmallVector<SDValue, 8> Ops0;
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  Ops0.push_back(N1);
  Ops0.push_back(Tmp1);
  Ops0.push_back(Tmp2);
  for (unsigned i = NumInputRootOps + 1, e = N->getNumOperands()-(HasInFlag?1:0); i != e; ++i) {
    Ops0.push_back(N->getOperand(i));
  }
  Ops0.push_back(Chain);
  if (HasInFlag)
    Ops0.push_back(InFlag);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, &Ops0[0], Ops0.size());
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ARMISD_CALL_PRED(SDNode *N) {

  // Pattern: (ARMcall_pred:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (BL_pred:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_5(N, ARM::BL_pred, 1);
      return Result;
    }
  }

  // Pattern: (ARMcall_pred:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (BLr9_pred:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_5(N, ARM::BLr9_pred, 1);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_6(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_7(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_8(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_9(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
SDNode *Select_ARMISD_CMP(SDNode *N) {

  // Pattern: (ARMcmp:isVoid GPR:i32:$a, so_reg:i32:$b)
  // Emits: (CMPrs:isVoid GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_8(N, ARM::CMPrs, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Emits: (t2CMPrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_9(N, ARM::t2CMPrs, CPTmpN1_0, CPTmpN1_1);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (CMPri:isVoid GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_6(N, ARM::CMPri);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_255>>:$rhs)
  // Emits: (tCMPi8:isVoid tGPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm0_255(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_6(N, ARM::tCMPi8);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
  // Emits: (t2CMPri:isVoid GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_6(N, ARM::t2CMPri);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid GPR:i32:$a, GPR:i32:$b)
  // Emits: (CMPrr:isVoid GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_7(N, ARM::CMPrr);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tCMPr:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_7(N, ARM::tCMPr);
      return Result;
    }
  }

  // Pattern: (ARMcmp:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2CMPrr:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_7(N, ARM::t2CMPrr);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_CMPFP(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (arm_cmpfp:isVoid DPR:f64:$a, DPR:f64:$b)
    // Emits: (VCMPED:isVoid DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_7(N, ARM::VCMPED);
      return Result;
    }

    // Pattern: (arm_cmpfp:isVoid SPR:f32:$a, SPR:f32:$b)
    // Emits: (VCMPES:isVoid SPR:f32:$a, SPR:f32:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_7(N, ARM::VCMPES);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_10(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, N0, Tmp1, Tmp2);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
SDNode *Select_ARMISD_CMPFPw0(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (arm_cmpfp0:isVoid DPR:f64:$a)
    // Emits: (VCMPEZD:isVoid DPR:f64:$a)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_10(N, ARM::VCMPEZD);
      return Result;
    }

    // Pattern: (arm_cmpfp0:isVoid SPR:f32:$a)
    // Emits: (VCMPEZS:isVoid SPR:f32:$a)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_10(N, ARM::VCMPEZS);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_11(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, Tmp3, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_12(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_13(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_14(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp3, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_15(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N11, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_16(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_17(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_18(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, CPTmpN01_0, CPTmpN01_1, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_19(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_t2_so_imm_neg_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_20(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_so_imm_neg_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_21(SDNode *N, unsigned Opc0, SDValue &CPTmpN00_0, SDValue &CPTmpN00_1, SDValue &CPTmpN00_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_22(SDNode *N, unsigned Opc0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1, SDValue &CPTmpN0_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_23(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp3, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_24(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N01, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_25(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_26(SDNode *N, unsigned Opc0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_27(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_28(SDNode *N, unsigned Opc0, SDValue &CPTmpN00_0, SDValue &CPTmpN00_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, CPTmpN00_0, CPTmpN00_1, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
SDNode *Select_ARMISD_CMPZ(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid (and:i32 GPR:i32:$a, so_reg:i32:$b), 0:i32)
    // Emits: (TSTrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 23  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      if (SelectShifterOperandReg(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2)) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_13(N, ARM::TSTrs, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 GPR:i32:$a, so_reg:i32:$b), 0:i32)
    // Emits: (TEQrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 23  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      if (SelectShifterOperandReg(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2)) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_13(N, ARM::TEQrs, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$a, (sub:i32 0:i32, so_reg:i32:$b))
    // Emits: (CMNzrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 23  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SUB) {
        SDValue N10 = N1.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            if (SelectShifterOperandReg(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2) &&
                N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_16(N, ARM::CMNzrs, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (and:i32 so_reg:i32:$b, GPR:i32:$a), 0:i32)
    // Emits: (TSTrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 23  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      SDValue CPTmpN00_2;
      if (SelectShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_21(N, ARM::TSTrs, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 so_reg:i32:$b, GPR:i32:$a), 0:i32)
    // Emits: (TEQrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 23  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      SDValue CPTmpN00_2;
      if (SelectShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_21(N, ARM::TEQrs, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, so_reg:i32:$b), GPR:i32:$a)
    // Emits: (CMNzrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 23  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          if (SelectShifterOperandReg(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2)) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_25(N, ARM::CMNzrs, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$lhs, (sub:i32 0:i32, t2_so_reg:i32:$rhs))
    // Emits: (t2CMNzrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 20  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SUB) {
        SDValue N10 = N1.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            if (SelectT2ShifterOperandReg(N, N11, CPTmpN11_0, CPTmpN11_1) &&
                N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_17(N, ARM::t2CMNzrs, CPTmpN11_0, CPTmpN11_1);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (and:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs), 0:i32)
    // Emits: (t2TSTrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 20  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      if (SelectT2ShifterOperandReg(N, N01, CPTmpN01_0, CPTmpN01_1)) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_18(N, ARM::t2TSTrs, CPTmpN01_0, CPTmpN01_1);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs), 0:i32)
    // Emits: (t2TEQrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 20  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      if (SelectT2ShifterOperandReg(N, N01, CPTmpN01_0, CPTmpN01_1)) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_18(N, ARM::t2TEQrs, CPTmpN01_0, CPTmpN01_1);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, t2_so_reg:i32:$rhs), GPR:i32:$lhs)
    // Emits: (t2CMNzrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 20  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          if (SelectT2ShifterOperandReg(N, N01, CPTmpN01_0, CPTmpN01_1)) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_27(N, ARM::t2CMNzrs, CPTmpN01_0, CPTmpN01_1);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (and:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs), 0:i32)
    // Emits: (t2TSTrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 20  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      if (SelectT2ShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_28(N, ARM::t2TSTrs, CPTmpN00_0, CPTmpN00_1);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs), 0:i32)
    // Emits: (t2TEQrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 20  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      if (SelectT2ShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_28(N, ARM::t2TEQrs, CPTmpN00_0, CPTmpN00_1);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid (and:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b), 0:i32)
    // Emits: (TSTri:isVoid GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm(N01.getNode())) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_11(N, ARM::TSTri);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b), 0:i32)
    // Emits: (TEQri:isVoid GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm(N01.getNode())) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_11(N, ARM::TEQri);
            return Result;
          }
        }
      }
    }
    SDValue N1 = N->getOperand(1);

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Emits: (CMPzrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
          N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_8(N, ARM::CMPzrs, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
        return Result;
      }
    }

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$a, (sub:i32 0:i32, (imm:i32)<<P:Predicate_so_imm>>:$b))
    // Emits: (CMNzri:isVoid GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::SUB) {
      SDValue N10 = N1.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_so_imm(N11.getNode()) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_14(N, ARM::CMNzri);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$lhs, (sub:i32 0:i32, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs))
    // Emits: (t2CMNzri:isVoid GPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SUB) {
        SDValue N10 = N1.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::Constant &&
                Predicate_t2_so_imm(N11.getNode()) &&
                N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_14(N, ARM::t2CMNzri);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (and:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs), 0:i32)
    // Emits: (t2TSTri:isVoid GPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_t2_so_imm(N01.getNode())) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_11(N, ARM::t2TSTri);
            return Result;
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs), 0:i32)
    // Emits: (t2TEQri:isVoid GPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_t2_so_imm(N01.getNode())) {
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_11(N, ARM::t2TEQri);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid so_reg:i32:$b, GPR:i32:$a)
    // Emits: (CMPzrs:isVoid GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue CPTmpN0_0;
      SDValue CPTmpN0_1;
      SDValue CPTmpN0_2;
      if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
        SDValue N1 = N->getOperand(1);
        if (N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_22(N, ARM::CMPzrs, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
          return Result;
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, (imm:i32)<<P:Predicate_so_imm>>:$b), GPR:i32:$a)
    // Emits: (CMNzri:isVoid GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_so_imm(N01.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_23(N, ARM::CMNzri);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs), GPR:i32:$lhs)
    // Emits: (t2CMNzri:isVoid GPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_t2_so_imm(N01.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_23(N, ARM::t2CMNzri);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2CMPzrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1) &&
          N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_9(N, ARM::t2CMPzrs, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (ARMcmpZ:isVoid t2_so_reg:i32:$rhs, GPR:i32:$lhs)
    // Emits: (t2CMPzrs:isVoid GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDValue N1 = N->getOperand(1);
      if (N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_26(N, ARM::t2CMPzrs, CPTmpN0_0, CPTmpN0_1);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid (and:i32 GPR:i32:$a, GPR:i32:$b), 0:i32)
    // Emits: (TSTrr:isVoid GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 11  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue N1 = N->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_12(N, ARM::TSTrr);
          return Result;
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 GPR:i32:$a, GPR:i32:$b), 0:i32)
    // Emits: (TEQrr:isVoid GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 11  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue N1 = N->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_12(N, ARM::TEQrr);
          return Result;
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$a, (sub:i32 0:i32, GPR:i32:$b))
    // Emits: (CMNzrr:isVoid GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 11  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::SUB) {
      SDValue N10 = N1.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_15(N, ARM::CMNzrr);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid tGPR:i32:$lhs, (sub:i32 0:i32, tGPR:i32:$rhs))
    // Emits: (tCMNz:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Pattern complexity = 11  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SUB) {
        SDValue N10 = N1.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_15(N, ARM::tCMNz);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (and:i32 tGPR:i32:$lhs, tGPR:i32:$rhs), 0:i32)
    // Emits: (tTST:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Pattern complexity = 11  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue N1 = N->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_12(N, ARM::tTST);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$lhs, (sub:i32 0:i32, GPR:i32:$rhs))
    // Emits: (t2CMNzrr:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
    // Pattern complexity = 11  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SUB) {
        SDValue N10 = N1.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(0)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_15(N, ARM::t2CMNzrr);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (and:i32 GPR:i32:$lhs, GPR:i32:$rhs), 0:i32)
    // Emits: (t2TSTrr:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
    // Pattern complexity = 11  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue N1 = N->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_12(N, ARM::t2TSTrr);
          return Result;
        }
      }
    }

    // Pattern: (ARMcmpZ:isVoid (xor:i32 GPR:i32:$lhs, GPR:i32:$rhs), 0:i32)
    // Emits: (t2TEQrr:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
    // Pattern complexity = 11  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue N1 = N->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_12(N, ARM::t2TEQrr);
          return Result;
        }
      }
    }
  }

  // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, GPR:i32:$b), GPR:i32:$a)
  // Emits: (CMNzrr:isVoid GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 11  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_24(N, ARM::CMNzrr);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, tGPR:i32:$rhs), tGPR:i32:$lhs)
  // Emits: (tCMNz:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 11  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_24(N, ARM::tCMNz);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (ARMcmpZ:isVoid (sub:i32 0:i32, GPR:i32:$rhs), GPR:i32:$lhs)
  // Emits: (t2CMNzrr:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 11  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SUB) {
      SDValue N00 = N0.getNode()->getOperand(0);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_24(N, ARM::t2CMNzrr);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (ARMcmpZ:isVoid GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (CMPzri:isVoid GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_6(N, ARM::CMPzri);
      return Result;
    }
  }

  // Pattern: (ARMcmpZ:isVoid tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_255>>:$rhs)
  // Emits: (tCMPzi8:isVoid tGPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm0_255(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_6(N, ARM::tCMPzi8);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (ARMcmpZ:isVoid GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
      // Emits: (t2CMPzri:isVoid GPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm(N1.getNode()) &&
          N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_6(N, ARM::t2CMPzri);
        return Result;
      }

      // Pattern: (ARMcmpZ:isVoid GPR:i32:$src, (imm:i32)<<P:Predicate_t2_so_imm_neg>><<X:t2_so_imm_neg_XFORM>>:$imm)
      // Emits: (t2CMNzri:isVoid GPR:i32:$src, (t2_so_imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_t2_so_imm_neg>>:$imm))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm_neg(N1.getNode()) &&
          N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_19(N, ARM::t2CMNzri);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$src, (imm:i32)<<P:Predicate_so_imm_neg>><<X:so_imm_neg_XFORM>>:$imm)
    // Emits: (CMNzri:isVoid GPR:i32:$src, (so_imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_so_imm_neg>>:$imm))
    // Pattern complexity = 7  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm_neg(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_20(N, ARM::CMNzri);
      return Result;
    }

    // Pattern: (ARMcmpZ:isVoid GPR:i32:$a, GPR:i32:$b)
    // Emits: (CMPzrr:isVoid GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_7(N, ARM::CMPzrr);
      return Result;
    }
  }

  // Pattern: (ARMcmpZ:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tCMPzr:isVoid tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_7(N, ARM::tCMPzr);
      return Result;
    }
  }

  // Pattern: (ARMcmpZ:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2CMPzrr:isVoid GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_7(N, ARM::t2CMPzrr);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_29(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, N1);
}
SDNode *Select_ARMISD_EH_SJLJ_SETJMP_i32(SDNode *N) {

  // Pattern: (ARMeh_sjlj_setjmp:i32 GPR:i32:$src, GPR:i32:$val)
  // Emits: (Int_eh_sjlj_setjmp:isVoid GPR:i32:$src, GPR:i32:$val)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32 &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_29(N, ARM::Int_eh_sjlj_setjmp);
      return Result;
    }
  }

  // Pattern: (ARMeh_sjlj_setjmp:i32 tGPR:i32:$src, tGPR:i32:$val)
  // Emits: (tInt_eh_sjlj_setjmp:isVoid tGPR:i32:$src, tGPR:i32:$val)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32 &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_29(N, ARM::tInt_eh_sjlj_setjmp);
      return Result;
    }
  }

  // Pattern: (ARMeh_sjlj_setjmp:i32 GPR:i32:$src, tGPR:i32:$val)
  // Emits: (t2Int_eh_sjlj_setjmp:isVoid GPR:i32:$src, tGPR:i32:$val)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::i32 &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_29(N, ARM::t2Int_eh_sjlj_setjmp);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_30(SDNode *N, unsigned Opc0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp1 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(0);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Flag, Tmp0, Tmp1, InFlag);
  InFlag = SDValue(ResNode, 0);
  ReplaceUses(SDValue(N, 0), InFlag);
  return ResNode;
}
SDNode *Select_ARMISD_FMSTAT(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_30(N, ARM::FMSTAT);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_31(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_32(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, unsigned Opc3, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2, MVT::SimpleValueType VT3) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp0, N0, Tmp2), 0);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp6(CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Tmp3, Tmp4, Tmp5), 0);
  SDValue Tmp7 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc3, VT3, Tmp6, Tmp7);
}
SDNode *Select_ARMISD_FTOSI_f32(SDNode *N) {

  // Pattern: (arm_ftosi:f32 DPR:f64:$a)
  // Emits: (VTOSIZD:f32 DPR:f64:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_31(N, ARM::VTOSIZD, MVT::f32);
      return Result;
    }
  }

  // Pattern: (arm_ftosi:f32 SPR:f32:$a)
  // Emits: (VTOSIZS:f32 SPR:f32:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_31(N, ARM::VTOSIZS, MVT::f32);
      return Result;
    }
  }

  // Pattern: (arm_ftosi:f32 SPR:f32:$a)
  // Emits: (EXTRACT_SUBREG:f32 (VCVTf2sd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 4  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_32(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VCVTf2sd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_FTOUI_f32(SDNode *N) {

  // Pattern: (arm_ftoui:f32 DPR:f64:$a)
  // Emits: (VTOUIZD:f32 DPR:f64:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_31(N, ARM::VTOUIZD, MVT::f32);
      return Result;
    }
  }

  // Pattern: (arm_ftoui:f32 SPR:f32:$a)
  // Emits: (VTOUIZS:f32 SPR:f32:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_31(N, ARM::VTOUIZS, MVT::f32);
      return Result;
    }
  }

  // Pattern: (arm_ftoui:f32 SPR:f32:$a)
  // Emits: (EXTRACT_SUBREG:f32 (VCVTf2ud_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 4  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_32(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VCVTf2ud_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_33(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Chain);
}
DISABLE_INLINE SDNode *Emit_34(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, N1, Chain);
}
SDNode *Select_ARMISD_MEMBARRIER(SDNode *N) {

  // Pattern: (ARMMemBarrierV7:isVoid)
  // Emits: (Int_MemBarrierV7:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV7Ops())) {
    SDNode *Result = Emit_33(N, ARM::Int_MemBarrierV7);
    return Result;
  }

  // Pattern: (ARMMemBarrierV6:isVoid GPR:i32:$zero)
  // Emits: (Int_MemBarrierV6:isVoid GPR:i32:$zero)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_34(N, ARM::Int_MemBarrierV6);
      return Result;
    }
  }

  // Pattern: (ARMMemBarrierV7:isVoid)
  // Emits: (t2Int_MemBarrierV7:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_33(N, ARM::t2Int_MemBarrierV7);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_35(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_36(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_37(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, N010, Tmp1, Chain0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ARMISD_PIC_ADD_i32(SDNode *N) {

  // Pattern: (ARMpic_add:i32 (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32):$cp)
  // Emits: (tLDRpci_pic:i32 (tconstpool:i32):$addr, (imm:i32):$cp)
  // Pattern complexity = 16  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::Wrapper) {
          SDValue N010 = N01.getNode()->getOperand(0);
          if (N010.getNode()->getOpcode() == ISD::TargetConstantPool) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::Constant) {
              SDNode *Result = Emit_37(N, ARM::tLDRpci_pic, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (ARMpic_add:i32 (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32):$cp)
  // Emits: (t2LDRpci_pic:i32 (tconstpool:i32):$addr, (imm:i32):$cp)
  // Pattern complexity = 16  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::Wrapper) {
          SDValue N010 = N01.getNode()->getOperand(0);
          if (N010.getNode()->getOpcode() == ISD::TargetConstantPool) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::Constant) {
              SDNode *Result = Emit_37(N, ARM::t2LDRpci_pic, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (ARMpic_add:i32 GPR:i32:$a, (imm:i32):$cp)
  // Emits: (PICADD:i32 GPR:i32:$a, (imm:i32):$cp)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::PICADD, MVT::i32);
      return Result;
    }
  }

  // Pattern: (ARMpic_add:i32 GPR:i32:$lhs, (imm:i32):$cp)
  // Emits: (tPICADD:i32 GPR:i32:$lhs, (imm:i32):$cp)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_36(N, ARM::tPICADD, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_RBIT_i32(SDNode *N) {

  // Pattern: (ARMrbit:i32 GPR:i32:$src)
  // Emits: (RBIT:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops())) {
    SDNode *Result = Emit_31(N, ARM::RBIT, MVT::i32);
    return Result;
  }

  // Pattern: (ARMrbit:i32 GPR:i32:$src)
  // Emits: (t2RBIT:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_31(N, ARM::t2RBIT, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_38(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SDValue Tmp0 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp1 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  SDValue Ops0[] = { Tmp0, Tmp1, Chain, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, HasInFlag ? 4 : 3);
}
DISABLE_INLINE SDNode *Emit_39(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  SDValue Ops0[] = { Chain, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, HasInFlag ? 2 : 1);
}
SDNode *Select_ARMISD_RET_FLAG(SDNode *N) {

  // Pattern: (ARMretflag:isVoid)
  // Emits: (BX_RET:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_38(N, ARM::BX_RET);
    return Result;
  }

  // Pattern: (ARMretflag:isVoid)
  // Emits: (tBX_RET:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb())) {
    SDNode *Result = Emit_39(N, ARM::tBX_RET);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_40(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(1);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ARMISD_RRX_i32(SDNode *N) {

  // Pattern: (ARMrrx:i32 GPR:i32:$src)
  // Emits: (MOVrx:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_40(N, ARM::MOVrx, MVT::i32);
    return Result;
  }

  // Pattern: (ARMrrx:i32 GPR:i32:$src)
  // Emits: (t2MOVrx:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_40(N, ARM::t2MOVrx, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_SITOF_f32(SDNode *N) {

  // Pattern: (arm_sitof:f32 SPR:f32:$a)
  // Emits: (VSITOS:f32 SPR:f32:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_31(N, ARM::VSITOS, MVT::f32);
    return Result;
  }

  // Pattern: (arm_sitof:f32 SPR:f32:$a)
  // Emits: (EXTRACT_SUBREG:f32 (VCVTs2fd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2i32), SPR:f32:$a, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 4  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_32(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VCVTs2fd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2i32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_SITOF_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_31(N, ARM::VSITOD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_41(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0, Tmp1, Tmp2);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_42(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
SDNode *Select_ARMISD_SRA_FLAG_i32(SDNode *N) {

  // Pattern: (ARMsra_flag:i32 GPR:i32:$src)
  // Emits: (MOVsra_flag:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_41(N, ARM::MOVsra_flag, MVT::i32);
    return Result;
  }

  // Pattern: (ARMsra_flag:i32 GPR:i32:$src)
  // Emits: (t2MOVsra_flag:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_42(N, ARM::t2MOVsra_flag, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_SRL_FLAG_i32(SDNode *N) {

  // Pattern: (ARMsrl_flag:i32 GPR:i32:$src)
  // Emits: (MOVsrl_flag:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_41(N, ARM::MOVsrl_flag, MVT::i32);
    return Result;
  }

  // Pattern: (ARMsrl_flag:i32 GPR:i32:$src)
  // Emits: (t2MOVsrl_flag:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_42(N, ARM::t2MOVsrl_flag, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_SYNCBARRIER(SDNode *N) {

  // Pattern: (ARMSyncBarrierV7:isVoid)
  // Emits: (Int_SyncBarrierV7:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV7Ops())) {
    SDNode *Result = Emit_33(N, ARM::Int_SyncBarrierV7);
    return Result;
  }

  // Pattern: (ARMSyncBarrierV6:isVoid GPR:i32:$zero)
  // Emits: (Int_SyncBarrierV6:isVoid GPR:i32:$zero)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_34(N, ARM::Int_SyncBarrierV6);
      return Result;
    }
  }

  // Pattern: (ARMSyncBarrierV7:isVoid)
  // Emits: (t2Int_SyncBarrierV7:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_33(N, ARM::t2Int_SyncBarrierV7);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_43(SDNode *N, unsigned Opc0) {
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32);
}
SDNode *Select_ARMISD_THREAD_POINTER_i32(SDNode *N) {

  // Pattern: (ARMthread_pointer:i32)
  // Emits: (TPsoft:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_43(N, ARM::TPsoft);
    return Result;
  }

  // Pattern: (ARMthread_pointer:i32)
  // Emits: (tTPsoft:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb())) {
    SDNode *Result = Emit_43(N, ARM::tTPsoft);
    return Result;
  }

  // Pattern: (ARMthread_pointer:i32)
  // Emits: (t2TPsoft:isVoid)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_43(N, ARM::t2TPsoft);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_UITOF_f32(SDNode *N) {

  // Pattern: (arm_uitof:f32 SPR:f32:$a)
  // Emits: (VUITOS:f32 SPR:f32:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_31(N, ARM::VUITOS, MVT::f32);
    return Result;
  }

  // Pattern: (arm_uitof:f32 SPR:f32:$a)
  // Emits: (EXTRACT_SUBREG:f32 (VCVTu2fd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2i32), SPR:f32:$a, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 4  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_32(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VCVTu2fd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2i32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_UITOF_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_31(N, ARM::VUITOD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_44(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ARMISD_VCEQ_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_44(N, ARM::VCEQv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCEQ_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_44(N, ARM::VCEQv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCEQ_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_44(N, ARM::VCEQv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCEQ_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_44(N, ARM::VCEQv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCEQ_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (NEONvceq:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VCEQv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_44(N, ARM::VCEQv2i32, MVT::v2i32);
      return Result;
    }

    // Pattern: (NEONvceq:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Emits: (VCEQfd:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_44(N, ARM::VCEQfd, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCEQ_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (NEONvceq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VCEQv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_44(N, ARM::VCEQv4i32, MVT::v4i32);
      return Result;
    }

    // Pattern: (NEONvceq:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Emits: (VCEQfq:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_44(N, ARM::VCEQfq, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGE_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_44(N, ARM::VCGEsv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGE_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_44(N, ARM::VCGEsv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGE_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_44(N, ARM::VCGEsv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGE_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_44(N, ARM::VCGEsv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGE_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (NEONvcge:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VCGEsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_44(N, ARM::VCGEsv2i32, MVT::v2i32);
      return Result;
    }

    // Pattern: (NEONvcge:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Emits: (VCGEfd:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_44(N, ARM::VCGEfd, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGE_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (NEONvcge:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VCGEsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_44(N, ARM::VCGEsv4i32, MVT::v4i32);
      return Result;
    }

    // Pattern: (NEONvcge:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Emits: (VCGEfq:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_44(N, ARM::VCGEfq, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGEU_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_44(N, ARM::VCGEuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGEU_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_44(N, ARM::VCGEuv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGEU_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_44(N, ARM::VCGEuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGEU_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_44(N, ARM::VCGEuv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGEU_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_44(N, ARM::VCGEuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGEU_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_44(N, ARM::VCGEuv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGT_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_44(N, ARM::VCGTsv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGT_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_44(N, ARM::VCGTsv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGT_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_44(N, ARM::VCGTsv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGT_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_44(N, ARM::VCGTsv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGT_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (NEONvcgt:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VCGTsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_44(N, ARM::VCGTsv2i32, MVT::v2i32);
      return Result;
    }

    // Pattern: (NEONvcgt:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Emits: (VCGTfd:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_44(N, ARM::VCGTfd, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGT_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (NEONvcgt:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VCGTsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_44(N, ARM::VCGTsv4i32, MVT::v4i32);
      return Result;
    }

    // Pattern: (NEONvcgt:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Emits: (VCGTfq:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_44(N, ARM::VCGTfq, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGTU_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_44(N, ARM::VCGTuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGTU_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_44(N, ARM::VCGTuv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGTU_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_44(N, ARM::VCGTuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGTU_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_44(N, ARM::VCGTuv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGTU_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_44(N, ARM::VCGTuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VCGTU_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_44(N, ARM::VCGTuv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VDUP8d, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VDUP8q, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VDUP16d, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VDUP16q, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VDUP32d, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VDUP32q, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_45(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, Tmp1, Tmp2);
}
SDNode *Select_ARMISD_VDUP_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (NEONvdup:v2f32 (bitconvert:f32 GPR:i32:$src))
    // Emits: (VDUPfd:v2f32 GPR:i32:$src)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N0.getValueType() == MVT::f32 &&
          N00.getValueType() == MVT::i32) {
        SDNode *Result = Emit_45(N, ARM::VDUPfd, MVT::v2f32);
        return Result;
      }
    }

    // Pattern: (NEONvdup:v2f32 SPR:f32:$src)
    // Emits: (VDUPfdf:v2f32 SPR:f32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_31(N, ARM::VDUPfdf, MVT::v2f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUP_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (NEONvdup:v4f32 (bitconvert:f32 GPR:i32:$src))
    // Emits: (VDUPfq:v4f32 GPR:i32:$src)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N0.getValueType() == MVT::f32 &&
          N00.getValueType() == MVT::i32) {
        SDNode *Result = Emit_45(N, ARM::VDUPfq, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (NEONvdup:v4f32 SPR:f32:$src)
    // Emits: (VDUPfqf:v4f32 SPR:f32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_31(N, ARM::VDUPfqf, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUPLANE_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_35(N, ARM::VDUPLN8d, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_46(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_DSubReg_i8_reg(Tmp1.getNode());
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  SDValue Tmp4 = Transform_SubReg_i8_lane(Tmp1.getNode());
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp3, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 4);
}
SDNode *Select_ARMISD_VDUPLANE_v16i8(SDNode *N) {

  // Pattern: (NEONvduplane:v16i8 DPR:v8i8:$src, (imm:i32):$lane)
  // Emits: (VDUPLN8q:v16i8 DPR:v8i8:$src, (imm:i32):$lane)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_35(N, ARM::VDUPLN8q, MVT::v16i8);
      return Result;
    }
  }

  // Pattern: (NEONvduplane:v16i8 QPR:v16i8:$src, (imm:i32):$lane)
  // Emits: (VDUPLN8q:v16i8 (EXTRACT_SUBREG:v8i8 QPR:v16i8:$src, (DSubReg_i8_reg:i32 (imm:i32):$lane)), (SubReg_i8_lane:i32 (imm:i32):$lane))
  // Pattern complexity = 6  cost = 2  size = 0
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v16i8) {
    SDNode *Result = Emit_46(N, TargetOpcode::EXTRACT_SUBREG, ARM::VDUPLN8q, MVT::v8i8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUPLANE_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_35(N, ARM::VDUPLN16d, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_47(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_DSubReg_i16_reg(Tmp1.getNode());
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  SDValue Tmp4 = Transform_SubReg_i16_lane(Tmp1.getNode());
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp3, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 4);
}
SDNode *Select_ARMISD_VDUPLANE_v8i16(SDNode *N) {

  // Pattern: (NEONvduplane:v8i16 DPR:v4i16:$src, (imm:i32):$lane)
  // Emits: (VDUPLN16q:v8i16 DPR:v4i16:$src, (imm:i32):$lane)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_35(N, ARM::VDUPLN16q, MVT::v8i16);
      return Result;
    }
  }

  // Pattern: (NEONvduplane:v8i16 QPR:v8i16:$src, (imm:i32):$lane)
  // Emits: (VDUPLN16q:v8i16 (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
  // Pattern complexity = 6  cost = 2  size = 0
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v8i16) {
    SDNode *Result = Emit_47(N, TargetOpcode::EXTRACT_SUBREG, ARM::VDUPLN16q, MVT::v4i16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUPLANE_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_35(N, ARM::VDUPLN32d, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_48(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_DSubReg_i32_reg(Tmp1.getNode());
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  SDValue Tmp4 = Transform_SubReg_i32_lane(Tmp1.getNode());
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp3, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 4);
}
SDNode *Select_ARMISD_VDUPLANE_v4i32(SDNode *N) {

  // Pattern: (NEONvduplane:v4i32 DPR:v2i32:$src, (imm:i32):$lane)
  // Emits: (VDUPLN32q:v4i32 DPR:v2i32:$src, (imm:i32):$lane)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_35(N, ARM::VDUPLN32q, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (NEONvduplane:v4i32 QPR:v4i32:$src, (imm:i32):$lane)
  // Emits: (VDUPLN32q:v4i32 (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
  // Pattern complexity = 6  cost = 2  size = 0
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_48(N, TargetOpcode::EXTRACT_SUBREG, ARM::VDUPLN32q, MVT::v2i32, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_49(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_f64_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp3), 0);
  SDValue Tmp5 = Transform_DSubReg_f64_other_reg(Tmp2.getNode());
  return CurDAG->SelectNodeTo(N, Opc1, VT1, N0, Tmp4, Tmp5);
}
SDNode *Select_ARMISD_VDUPLANE_v2i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v2i64) {
    SDNode *Result = Emit_49(N, TargetOpcode::EXTRACT_SUBREG, TargetOpcode::INSERT_SUBREG, MVT::i64, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUPLANE_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_35(N, ARM::VDUPLNfd, MVT::v2f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUPLANE_v4f32(SDNode *N) {

  // Pattern: (NEONvduplane:v4f32 DPR:v2f32:$src, (imm:i32):$lane)
  // Emits: (VDUPLNfq:v4f32 DPR:v2f32:$src, (imm:i32):$lane)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_35(N, ARM::VDUPLNfq, MVT::v4f32);
      return Result;
    }
  }

  // Pattern: (NEONvduplane:v4f32 QPR:v4f32:$src, (imm:i32):$lane)
  // Emits: (VDUPLNfq:v4f32 (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
  // Pattern complexity = 6  cost = 2  size = 0
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_48(N, TargetOpcode::EXTRACT_SUBREG, ARM::VDUPLNfq, MVT::v2f32, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VDUPLANE_v2f64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_49(N, TargetOpcode::EXTRACT_SUBREG, TargetOpcode::INSERT_SUBREG, MVT::f64, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_50(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ARMISD_VEXT_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTd8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTq8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTd16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTq16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTd32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTq32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTdf, MVT::v2f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VEXT_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VEXTqf, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VGETLANEs_i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (NEONvgetlanes:i32 DPR:v8i8:$src, (imm:i32):$lane)
      // Emits: (VGETLNs8:i32 DPR:v8i8:$src, (imm:i32):$lane)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getValueType() == MVT::v8i8) {
        SDNode *Result = Emit_35(N, ARM::VGETLNs8, MVT::i32);
        return Result;
      }

      // Pattern: (NEONvgetlanes:i32 DPR:v4i16:$src, (imm:i32):$lane)
      // Emits: (VGETLNs16:i32 DPR:v4i16:$src, (imm:i32):$lane)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getValueType() == MVT::v4i16) {
        SDNode *Result = Emit_35(N, ARM::VGETLNs16, MVT::i32);
        return Result;
      }
    }
  }
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant) {

    // Pattern: (NEONvgetlanes:i32 QPR:v16i8:$src, (imm:i32):$lane)
    // Emits: (VGETLNs8:i32 (EXTRACT_SUBREG:v8i8 QPR:v16i8:$src, (DSubReg_i8_reg:i32 (imm:i32):$lane)), (SubReg_i8_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 6  cost = 2  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_46(N, TargetOpcode::EXTRACT_SUBREG, ARM::VGETLNs8, MVT::v8i8, MVT::i32);
      return Result;
    }

    // Pattern: (NEONvgetlanes:i32 QPR:v8i16:$src, (imm:i32):$lane)
    // Emits: (VGETLNs16:i32 (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 6  cost = 2  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_47(N, TargetOpcode::EXTRACT_SUBREG, ARM::VGETLNs16, MVT::v4i16, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VGETLANEu_i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (NEONvgetlaneu:i32 DPR:v8i8:$src, (imm:i32):$lane)
      // Emits: (VGETLNu8:i32 DPR:v8i8:$src, (imm:i32):$lane)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getValueType() == MVT::v8i8) {
        SDNode *Result = Emit_35(N, ARM::VGETLNu8, MVT::i32);
        return Result;
      }

      // Pattern: (NEONvgetlaneu:i32 DPR:v4i16:$src, (imm:i32):$lane)
      // Emits: (VGETLNu16:i32 DPR:v4i16:$src, (imm:i32):$lane)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getValueType() == MVT::v4i16) {
        SDNode *Result = Emit_35(N, ARM::VGETLNu16, MVT::i32);
        return Result;
      }
    }
  }
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant) {

    // Pattern: (NEONvgetlaneu:i32 QPR:v16i8:$src, (imm:i32):$lane)
    // Emits: (VGETLNu8:i32 (EXTRACT_SUBREG:v8i8 QPR:v16i8:$src, (DSubReg_i8_reg:i32 (imm:i32):$lane)), (SubReg_i8_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 6  cost = 2  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_46(N, TargetOpcode::EXTRACT_SUBREG, ARM::VGETLNu8, MVT::v8i8, MVT::i32);
      return Result;
    }

    // Pattern: (NEONvgetlaneu:i32 QPR:v8i16:$src, (imm:i32):$lane)
    // Emits: (VGETLNu16:i32 (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 6  cost = 2  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_47(N, TargetOpcode::EXTRACT_SUBREG, ARM::VGETLNu16, MVT::v4i16, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VMOVDRR_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_44(N, ARM::VMOVDRR, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNs_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRNsv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNs_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRNsv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNs_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRNsv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNsu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRUNv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNsu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRUNv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNsu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRUNv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRNuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRNuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQRSHRNu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VQRSHRNuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLs_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsiv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLsu_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLsuv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHLu_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VQSHLuiv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNs_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VQSHRNsv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNs_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VQSHRNsv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNs_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VQSHRNsv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNsu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VQSHRUNv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNsu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VQSHRUNv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNsu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VQSHRUNv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VQSHRNuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VQSHRNuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VQSHRNu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VQSHRNuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV16_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV16d8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV16_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV16q8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV32_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV32d8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV32_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV32q8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV32_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV32d16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV32_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV32q16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64d8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64q8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64d16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64q16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64d32, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64q32, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64df, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VREV64_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VREV64qf, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRN_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VRSHRNv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRN_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VRSHRNv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRN_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VRSHRNv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRs_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRsv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VRSHRu_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VRSHRuv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHL_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHLiv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLi_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_35(N, ARM::VSHLLi8, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLi_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_35(N, ARM::VSHLLi16, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLi_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_35(N, ARM::VSHLLi32, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLs_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_35(N, ARM::VSHLLsv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLs_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_35(N, ARM::VSHLLsv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLs_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_35(N, ARM::VSHLLsv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLu_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_35(N, ARM::VSHLLuv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLu_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_35(N, ARM::VSHLLuv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHLLu_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_35(N, ARM::VSHLLuv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRN_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_35(N, ARM::VSHRNv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRN_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_35(N, ARM::VSHRNv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRN_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_35(N, ARM::VSHRNv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRs_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRsv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSHRu_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_35(N, ARM::VSHRuv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSLI_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSLIv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv1i64, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VSRI_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSRIv2i64, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VTST_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i8) {
      SDNode *Result = Emit_44(N, ARM::VTSTv8i8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VTST_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_44(N, ARM::VTSTv16i8, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VTST_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i16) {
      SDNode *Result = Emit_44(N, ARM::VTSTv4i16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VTST_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_44(N, ARM::VTSTv8i16, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VTST_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_44(N, ARM::VTSTv2i32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_VTST_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_44(N, ARM::VTSTv4i32, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_Wrapper_i32(SDNode *N) {

  // Pattern: (ARMWrapper:i32 (tglobaladdr:i32):$dst)
  // Emits: (t2LEApcrel:i32 (tglobaladdr:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!Subtarget->useMovt())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_31(N, ARM::t2LEApcrel, MVT::i32);
      return Result;
    }
  }

  // Pattern: (ARMWrapper:i32 (tconstpool:i32):$dst)
  // Emits: (t2LEApcrel:i32 (tconstpool:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
      SDNode *Result = Emit_31(N, ARM::t2LEApcrel, MVT::i32);
      return Result;
    }
  }

  // Pattern: (ARMWrapper:i32 (tglobaladdr:i32):$dst)
  // Emits: (t2MOVi32imm:i32 (tglobaladdr:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (Subtarget->useMovt())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_31(N, ARM::t2MOVi32imm, MVT::i32);
      return Result;
    }
  }

  // Pattern: (ARMWrapper:i32 (tglobaladdr:i32):$dst)
  // Emits: (LEApcrel:i32 (tglobaladdr:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!Subtarget->useMovt())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_31(N, ARM::LEApcrel, MVT::i32);
      return Result;
    }
  }

  // Pattern: (ARMWrapper:i32 (tconstpool:i32):$dst)
  // Emits: (LEApcrel:i32 (tconstpool:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
      SDNode *Result = Emit_31(N, ARM::LEApcrel, MVT::i32);
      return Result;
    }
  }

  // Pattern: (ARMWrapper:i32 (tglobaladdr:i32):$dst)
  // Emits: (MOVi32imm:i32 (tglobaladdr:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->useMovt())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_31(N, ARM::MOVi32imm, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (ARMWrapper:i32 (tglobaladdr:i32):$dst)
    // Emits: (tLEApcrel:i32 (tglobaladdr:i32):$dst)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_31(N, ARM::tLEApcrel, MVT::i32);
      return Result;
    }

    // Pattern: (ARMWrapper:i32 (tconstpool:i32):$dst)
    // Emits: (tLEApcrel:i32 (tconstpool:i32):$dst)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
      SDNode *Result = Emit_31(N, ARM::tLEApcrel, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_WrapperJT_i32(SDNode *N) {

  // Pattern: (ARMWrapperJT:i32 (tjumptable:i32):$dst, (imm:i32):$id)
  // Emits: (t2LEApcrelJT:i32 (tjumptable:i32):$dst, (imm:i32):$id)
  // Pattern complexity = 9  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {
        SDNode *Result = Emit_35(N, ARM::t2LEApcrelJT, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (ARMWrapperJT:i32 (tjumptable:i32):$dst, (imm:i32):$id)
  // Emits: (LEApcrelJT:i32 (tjumptable:i32):$dst, (imm:i32):$id)
  // Pattern complexity = 9  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {
        SDNode *Result = Emit_35(N, ARM::LEApcrelJT, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (ARMWrapperJT:i32 (tjumptable:i32):$dst, (imm:i32):$id)
  // Emits: (tLEApcrelJT:i32 (tjumptable:i32):$dst, (imm:i32):$id)
  // Pattern complexity = 9  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {
        SDNode *Result = Emit_35(N, ARM::tLEApcrelJT, MVT::i32);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ARMISD_tCALL(SDNode *N) {

  // Pattern: (ARMtcall:isVoid (tglobaladdr:iPTR):$func)
  // Emits: (tBL:isVoid (tglobaladdr:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_4(N, ARM::tBL, 1);
      return Result;
    }
  }
  if ((Subtarget->isThumb()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (ARMtcall:isVoid (tglobaladdr:iPTR):$func)
    // Emits: (tBLr9:isVoid (tglobaladdr:i32):$func)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_4(N, ARM::tBLr9, 1);
      return Result;
    }

    // Pattern: (ARMtcall:isVoid (texternalsym:iPTR):$func)
    // Emits: (tBLr9:isVoid (texternalsym:i32):$func)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_4(N, ARM::tBLr9, 1);
      return Result;
    }
  }

  // Pattern: (ARMtcall:isVoid (texternalsym:iPTR):$func)
  // Emits: (tBL:isVoid (texternalsym:i32):$func)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_4(N, ARM::tBL, 1);
      return Result;
    }
  }

  // Pattern: (ARMtcall:isVoid GPR:i32:$func)
  // Emits: (tBLXr:isVoid GPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (!Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::tBLXr, 1);
      return Result;
    }
  }

  // Pattern: (ARMtcall:isVoid GPR:i32:$func)
  // Emits: (tBLXr_r9:isVoid GPR:i32:$func)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb()) && (Subtarget->hasV5TOps()) && (Subtarget->isTargetDarwin())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_4(N, ARM::tBLXr_r9, 1);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_51(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_52(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N100, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_53(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_54(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N100, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_55(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_56(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_57(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 7);
}
DISABLE_INLINE SDNode *Emit_58(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, N1, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_59(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, N1, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_60(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N110, N0, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_61(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N110, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_62(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N110, N0, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_63(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1010 = N101.getNode()->getOperand(0);
  SDValue N1011 = N101.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N1010, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_64(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1010 = N101.getNode()->getOperand(0);
  SDValue N1011 = N101.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N1010, N0, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_65(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_66(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, N1, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_67(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_imm_neg_XFORM(Tmp2.getNode());
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_68(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_69(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_imm_neg_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_70(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_t2_so_imm_neg_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_71(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_t2_so_imm2part_1(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, Ops0, 5), 0);
  SDValue Tmp7 = Transform_t2_so_imm2part_2(Tmp1.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp6, Tmp7, Tmp8, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_72(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_t2_so_neg_imm2part_1(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, Ops0, 5), 0);
  SDValue Tmp7 = Transform_t2_so_neg_imm2part_2(Tmp1.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp6, Tmp7, Tmp8, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_73(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_so_imm_neg_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_74(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_so_imm2part_1(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, Ops0, 5), 0);
  SDValue Tmp7 = Transform_so_imm2part_2(Tmp1.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp6, Tmp7, Tmp8, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_75(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_so_neg_imm2part_1(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, Ops0, 5), 0);
  SDValue Tmp7 = Transform_so_neg_imm2part_2(Tmp1.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp6, Tmp7, Tmp8, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_76(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N1100 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp11 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp12 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1000, N1100, N0, Tmp11, Tmp12 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_77(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N11, N0, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_78(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1000, N110, N0, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_79(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N110, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_80(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N1100 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N1100, N0, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_81(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N11, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_82(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1010 = N101.getNode()->getOperand(0);
  SDValue N10100 = N1010.getNode()->getOperand(0);
  SDValue N10101 = N1010.getNode()->getOperand(1);
  SDValue N1011 = N101.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N10100, N0, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_83(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N101, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_84(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_85(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N001)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N000, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_86(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_87(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N001)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N000, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_88(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1, SDValue &CPTmpN0_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 7);
}
DISABLE_INLINE SDNode *Emit_89(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N11, N0, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_90(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N010, N1, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_91(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N110, N100, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_92(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N010, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_93(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N010, N000, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_94(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N110, N100, N0, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_95(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N010, N1, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_96(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N010, N000, N1, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_97(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N101, N1000, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_98(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N0010 = N001.getNode()->getOperand(0);
  SDValue N0011 = N001.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N0010, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_99(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N001, N0000, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_100(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N101, N1000, N0, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_101(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N0010 = N001.getNode()->getOperand(0);
  SDValue N0011 = N001.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N0010, N1, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_102(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N001, N0000, N1, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_103(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_104(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N1100 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp11 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp12 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1100, N1000, N0, Tmp11, Tmp12 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_105(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp11 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp12 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0000, N0100, N1, Tmp11, Tmp12 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_106(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp11 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp12 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0100, N0000, N1, Tmp11, Tmp12 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_107(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N1100 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1100, N100, N0, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_108(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0000, N010, N1, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_109(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0100, N000, N1, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_110(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N11, N100, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_111(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N010, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_112(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N000, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_113(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N110, N1000, N0, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_114(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N0100, N1, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_115(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N010, N0000, N1, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_116(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N110, N10, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_117(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N01, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_118(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N010, N00, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_119(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N10000 = N1000.getNode()->getOperand(0);
  SDValue N10001 = N1000.getNode()->getOperand(1);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N101, N10000, N0, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_120(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N0010 = N001.getNode()->getOperand(0);
  SDValue N00100 = N0010.getNode()->getOperand(0);
  SDValue N00101 = N0010.getNode()->getOperand(1);
  SDValue N0011 = N001.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N00100, N1, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_121(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N00000 = N0000.getNode()->getOperand(0);
  SDValue N00001 = N0000.getNode()->getOperand(1);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp9 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp10 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N001, N00000, N1, Tmp9, Tmp10 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_122(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N101, N100, N0, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_123(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N001, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_124(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N001, N000, N1, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_ADD_i32(SDNode *N) {
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SHL) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1001.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRA) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      if (N110.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N1100 = N110.getNode()->getOperand(0);
                        SDValue N1101 = N110.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(16)) {
                            SDValue N111 = N11.getNode()->getOperand(1);
                            ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N111.getNode());
                            if (Tmp6) {
                              int64_t CN7 = Tmp6->getSExtValue();
                              if (CN7 == INT64_C(16) &&
                                  N1001.getValueType() == MVT::i32 &&
                                  N101.getValueType() == MVT::i32 &&
                                  N1101.getValueType() == MVT::i32 &&
                                  N111.getValueType() == MVT::i32) {

                                // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32), (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)))
                                // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                                // Pattern complexity = 38  cost = 1  size = 0
                                {
                                  SDNode *Result = Emit_76(N, ARM::SMLABB, MVT::i32);
                                  return Result;
                                }

                                // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32)))
                                // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                                // Pattern complexity = 38  cost = 1  size = 0
                                SDNode *Result = Emit_104(N, ARM::SMLABB, MVT::i32);
                                return Result;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::SHL) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N001 = N00.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N001.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N01 = N0.getNode()->getOperand(1);
                  if (N01.getNode()->getOpcode() == ISD::SRA) {
                    SDValue N010 = N01.getNode()->getOperand(0);
                    if (N010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N0100 = N010.getNode()->getOperand(0);
                      SDValue N0101 = N010.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N0101.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16)) {
                          SDValue N011 = N01.getNode()->getOperand(1);
                          ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                          if (Tmp6) {
                            int64_t CN7 = Tmp6->getSExtValue();
                            if (CN7 == INT64_C(16)) {
                              SDValue N1 = N->getOperand(1);
                              if (N0001.getValueType() == MVT::i32 &&
                                  N001.getValueType() == MVT::i32 &&
                                  N0101.getValueType() == MVT::i32 &&
                                  N011.getValueType() == MVT::i32) {

                                // Pattern: (add:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32), (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)), GPR:i32:$acc)
                                // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                                // Pattern complexity = 38  cost = 1  size = 0
                                {
                                  SDNode *Result = Emit_105(N, ARM::SMLABB, MVT::i32);
                                  return Result;
                                }

                                // Pattern: (add:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32)), GPR:i32:$acc)
                                // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                                // Pattern complexity = 38  cost = 1  size = 0
                                SDNode *Result = Emit_106(N, ARM::SMLABB, MVT::i32);
                                return Result;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::AND) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 255:i32))
        // Emits: (UXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(255)) &&
            N10.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N101.getNode()) &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_54(N, ARM::UXTABrr_rot, MVT::i32);
            return Result;
          }
        }

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 65535:i32))
        // Emits: (UXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(65535)) &&
            N10.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N101.getNode()) &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_54(N, ARM::UXTAHrr_rot, MVT::i32);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::AND) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 255:i32))
        // Emits: (t2UXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(255)) &&
            N10.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N101.getNode()) &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_54(N, ARM::t2UXTABrr_rot, MVT::i32);
            return Result;
          }
        }

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 65535:i32))
        // Emits: (t2UXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(65535)) &&
            N10.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N101.getNode()) &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_54(N, ARM::t2UXTAHrr_rot, MVT::i32);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 255:i32), GPR:i32:$LHS)
        // Emits: (UXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(255)) &&
            N00.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_87(N, ARM::UXTABrr_rot, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (add:i32 (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 65535:i32), GPR:i32:$LHS)
        // Emits: (UXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535)) &&
            N00.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_87(N, ARM::UXTAHrr_rot, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 255:i32), GPR:i32:$LHS)
        // Emits: (t2UXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(255)) &&
            N00.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_87(N, ARM::t2UXTABrr_rot, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (add:i32 (and:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 65535:i32), GPR:i32:$LHS)
        // Emits: (t2UXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
        // Pattern complexity = 34  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535)) &&
            N00.getNode()->getOpcode() == ISD::ROTR) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_rot_imm(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_87(N, ARM::t2UXTAHrr_rot, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);

          // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32), (sra:i32 GPR:i32:$b, 16:i32)))
          // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
          // Pattern complexity = 30  cost = 1  size = 0
          if (N100.getNode()->getOpcode() == ISD::SHL) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1001.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRA) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N111.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16) &&
                            N1001.getValueType() == MVT::i32 &&
                            N101.getValueType() == MVT::i32 &&
                            N111.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_78(N, ARM::SMLABT, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)))
          // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
          // Pattern complexity = 30  cost = 1  size = 0
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SRA) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N1100 = N110.getNode()->getOperand(0);
                  SDValue N1101 = N110.getNode()->getOperand(1);
                  ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1101.getNode());
                  if (Tmp2) {
                    int64_t CN3 = Tmp2->getSExtValue();
                    if (CN3 == INT64_C(16)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N111.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16) &&
                            N101.getValueType() == MVT::i32 &&
                            N1101.getValueType() == MVT::i32 &&
                            N111.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_80(N, ARM::SMLATB, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)), 16:i32))
      // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 30  cost = 1  size = 0
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::SRA) {
            SDValue N1010 = N101.getNode()->getOperand(0);
            if (N1010.getNode()->getOpcode() == ISD::SHL) {
              SDValue N10100 = N1010.getNode()->getOperand(0);
              SDValue N10101 = N1010.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10101.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1011 = N101.getNode()->getOperand(1);
                  ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1011.getNode());
                  if (Tmp2) {
                    int64_t CN3 = Tmp2->getSExtValue();
                    if (CN3 == INT64_C(16)) {
                      SDValue N11 = N1.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N11.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16) &&
                            N10101.getValueType() == MVT::i32 &&
                            N1011.getValueType() == MVT::i32 &&
                            N11.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_82(N, ARM::SMLAWB, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32)))
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 30  cost = 1  size = 0
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SRA) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N1100 = N110.getNode()->getOperand(0);
                  SDValue N1101 = N110.getNode()->getOperand(1);
                  ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1101.getNode());
                  if (Tmp2) {
                    int64_t CN3 = Tmp2->getSExtValue();
                    if (CN3 == INT64_C(16)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N111.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16) &&
                            N101.getValueType() == MVT::i32 &&
                            N1101.getValueType() == MVT::i32 &&
                            N111.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_107(N, ARM::SMLABT, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32), (sra:i32 GPR:i32:$b, 16:i32)), GPR:i32:$acc)
        // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 30  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SHL) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N001 = N00.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N001.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N01 = N0.getNode()->getOperand(1);
                  if (N01.getNode()->getOpcode() == ISD::SRA) {
                    SDValue N010 = N01.getNode()->getOperand(0);
                    SDValue N011 = N01.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N011.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16)) {
                        SDValue N1 = N->getOperand(1);
                        if (N0001.getValueType() == MVT::i32 &&
                            N001.getValueType() == MVT::i32 &&
                            N011.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_108(N, ARM::SMLABT, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32)), GPR:i32:$acc)
        // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 30  cost = 1  size = 0
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SRA) {
              SDValue N010 = N01.getNode()->getOperand(0);
              if (N010.getNode()->getOpcode() == ISD::SHL) {
                SDValue N0100 = N010.getNode()->getOperand(0);
                SDValue N0101 = N010.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0101.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N011 = N01.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N011.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16)) {
                        SDValue N1 = N->getOperand(1);
                        if (N001.getValueType() == MVT::i32 &&
                            N0101.getValueType() == MVT::i32 &&
                            N011.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_109(N, ARM::SMLABT, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), (sra:i32 GPR:i32:$a, 16:i32)))
    // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 30  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SHL) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1001.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRA) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N111.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16) &&
                            N1001.getValueType() == MVT::i32 &&
                            N101.getValueType() == MVT::i32 &&
                            N111.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_113(N, ARM::SMLATB, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)), GPR:i32:$acc)
        // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 30  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N01 = N0.getNode()->getOperand(1);
              if (N01.getNode()->getOpcode() == ISD::SRA) {
                SDValue N010 = N01.getNode()->getOperand(0);
                if (N010.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N0100 = N010.getNode()->getOperand(0);
                  SDValue N0101 = N010.getNode()->getOperand(1);
                  ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0101.getNode());
                  if (Tmp2) {
                    int64_t CN3 = Tmp2->getSExtValue();
                    if (CN3 == INT64_C(16)) {
                      SDValue N011 = N01.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N011.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16)) {
                          SDValue N1 = N->getOperand(1);
                          if (N001.getValueType() == MVT::i32 &&
                              N0101.getValueType() == MVT::i32 &&
                              N011.getValueType() == MVT::i32) {
                            SDNode *Result = Emit_114(N, ARM::SMLATB, MVT::i32);
                            return Result;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), (sra:i32 GPR:i32:$a, 16:i32)), GPR:i32:$acc)
        // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 30  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SHL) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N001 = N00.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N001.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N01 = N0.getNode()->getOperand(1);
                  if (N01.getNode()->getOpcode() == ISD::SRA) {
                    SDValue N010 = N01.getNode()->getOperand(0);
                    SDValue N011 = N01.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N011.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16)) {
                        SDValue N1 = N->getOperand(1);
                        if (N0001.getValueType() == MVT::i32 &&
                            N001.getValueType() == MVT::i32 &&
                            N011.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_115(N, ARM::SMLATB, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), GPR:i32:$a), 16:i32))
    // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 30  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SRA) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            if (N1000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N10000 = N1000.getNode()->getOperand(0);
              SDValue N10001 = N1000.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10001.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1001.getNode());
                  if (Tmp2) {
                    int64_t CN3 = Tmp2->getSExtValue();
                    if (CN3 == INT64_C(16)) {
                      SDValue N101 = N10.getNode()->getOperand(1);
                      SDValue N11 = N1.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N11.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16) &&
                            N10001.getValueType() == MVT::i32 &&
                            N1001.getValueType() == MVT::i32 &&
                            N11.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_119(N, ARM::SMLAWB, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::MUL) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 30  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::SRA) {
            SDValue N0010 = N001.getNode()->getOperand(0);
            if (N0010.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00100 = N0010.getNode()->getOperand(0);
              SDValue N00101 = N0010.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00101.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N0011 = N001.getNode()->getOperand(1);
                  ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0011.getNode());
                  if (Tmp2) {
                    int64_t CN3 = Tmp2->getSExtValue();
                    if (CN3 == INT64_C(16)) {
                      SDValue N01 = N0.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(16)) {
                          SDValue N1 = N->getOperand(1);
                          if (N00101.getValueType() == MVT::i32 &&
                              N0011.getValueType() == MVT::i32 &&
                              N01.getValueType() == MVT::i32) {
                            SDNode *Result = Emit_120(N, ARM::SMLAWB, MVT::i32);
                            return Result;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (sra:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), GPR:i32:$a), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 30  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SRA) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          if (N0000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N00000 = N0000.getNode()->getOperand(0);
            SDValue N00001 = N0000.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00001.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N0001 = N000.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0001.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N001 = N00.getNode()->getOperand(1);
                    SDValue N01 = N0.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16)) {
                        SDValue N1 = N->getOperand(1);
                        if (N00001.getValueType() == MVT::i32 &&
                            N0001.getValueType() == MVT::i32 &&
                            N01.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_121(N, ARM::SMLAWB, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::AND) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 GPR:i32:$RHS, 255:i32))
        // Emits: (UXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(255))) {
          SDNode *Result = Emit_53(N, ARM::UXTABrr, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 GPR:i32:$RHS, 65535:i32))
        // Emits: (UXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(65535))) {
          SDNode *Result = Emit_53(N, ARM::UXTAHrr, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::AND) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 GPR:i32:$RHS, 255:i32))
        // Emits: (t2UXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(255))) {
          SDNode *Result = Emit_53(N, ARM::t2UXTABrr, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GPR:i32:$LHS, (and:i32 GPR:i32:$RHS, 65535:i32))
        // Emits: (t2UXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N10, Tmp0, INT64_C(65535))) {
          SDNode *Result = Emit_53(N, ARM::t2UXTAHrr, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 (and:i32 GPR:i32:$RHS, 255:i32), GPR:i32:$LHS)
        // Emits: (UXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(255))) {
          SDNode *Result = Emit_86(N, ARM::UXTABrr, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 (and:i32 GPR:i32:$RHS, 65535:i32), GPR:i32:$LHS)
        // Emits: (UXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535))) {
          SDNode *Result = Emit_86(N, ARM::UXTAHrr, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (add:i32 (and:i32 GPR:i32:$RHS, 255:i32), GPR:i32:$LHS)
        // Emits: (t2UXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(255))) {
          SDNode *Result = Emit_86(N, ARM::t2UXTABrr, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 (and:i32 GPR:i32:$RHS, 65535:i32), GPR:i32:$LHS)
        // Emits: (t2UXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 27  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535))) {
          SDNode *Result = Emit_86(N, ARM::t2UXTAHrr, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 GPR:i32:$b, 16:i32)))
    // Emits: (SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::SRA) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::SRA) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N111.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16) &&
                    N101.getValueType() == MVT::i32 &&
                    N111.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_62(N, ARM::SMLATT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 GPR:i32:$b, 16:i32)), 16:i32))
    // Emits: (SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::SRA) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::MUL) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::SRA) {
          SDValue N1010 = N101.getNode()->getOperand(0);
          SDValue N1011 = N101.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1011.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16) &&
                    N1011.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_64(N, ARM::SMLAWT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 GPR:i32:$b, 16:i32)))
    // Emits: (t2SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::SRA) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::SRA) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N111.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16) &&
                    N101.getValueType() == MVT::i32 &&
                    N111.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_62(N, ARM::t2SMLATT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 GPR:i32:$b, 16:i32)), 16:i32))
    // Emits: (t2SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::SRA) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::MUL) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::SRA) {
          SDValue N1010 = N101.getNode()->getOperand(0);
          SDValue N1011 = N101.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1011.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16) &&
                    N1011.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_64(N, ARM::t2SMLAWT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 GPR:i32:$a, 16:i32)))
    // Emits: (SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SRA) {
                SDValue N110 = N11.getNode()->getOperand(0);
                SDValue N111 = N11.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N111.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16) &&
                      N101.getValueType() == MVT::i32 &&
                      N111.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_94(N, ARM::SMLATT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SRA) {
              SDValue N010 = N01.getNode()->getOperand(0);
              SDValue N011 = N01.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N011.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N1 = N->getOperand(1);
                  if (N001.getValueType() == MVT::i32 &&
                      N011.getValueType() == MVT::i32) {

                    // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 GPR:i32:$b, 16:i32)), GPR:i32:$acc)
                    // Emits: (SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                    // Pattern complexity = 22  cost = 1  size = 0
                    {
                      SDNode *Result = Emit_95(N, ARM::SMLATT, MVT::i32);
                      return Result;
                    }

                    // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 GPR:i32:$a, 16:i32)), GPR:i32:$acc)
                    // Emits: (SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                    // Pattern complexity = 22  cost = 1  size = 0
                    SDNode *Result = Emit_96(N, ARM::SMLATT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32:$a), 16:i32))
    // Emits: (SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SRA) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1001.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N101 = N10.getNode()->getOperand(1);
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16) &&
                      N1001.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_100(N, ARM::SMLAWT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::MUL) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 GPR:i32:$b, 16:i32)), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 22  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::SRA) {
            SDValue N0010 = N001.getNode()->getOperand(0);
            SDValue N0011 = N001.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0011.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N01.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N1 = N->getOperand(1);
                    if (N0011.getValueType() == MVT::i32 &&
                        N01.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_101(N, ARM::SMLAWT, MVT::i32);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (sra:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32:$a), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 22  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SRA) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N001 = N00.getNode()->getOperand(1);
              SDValue N01 = N0.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N01.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N1 = N->getOperand(1);
                  if (N0001.getValueType() == MVT::i32 &&
                      N01.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_102(N, ARM::SMLAWT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 GPR:i32:$a, 16:i32)))
    // Emits: (t2SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SRA) {
                SDValue N110 = N11.getNode()->getOperand(0);
                SDValue N111 = N11.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N111.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16) &&
                      N101.getValueType() == MVT::i32 &&
                      N111.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_94(N, ARM::t2SMLATT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SRA) {
              SDValue N010 = N01.getNode()->getOperand(0);
              SDValue N011 = N01.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N011.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N1 = N->getOperand(1);
                  if (N001.getValueType() == MVT::i32 &&
                      N011.getValueType() == MVT::i32) {

                    // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 GPR:i32:$b, 16:i32)), GPR:i32:$acc)
                    // Emits: (t2SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                    // Pattern complexity = 22  cost = 1  size = 0
                    {
                      SDNode *Result = Emit_95(N, ARM::t2SMLATT, MVT::i32);
                      return Result;
                    }

                    // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 GPR:i32:$a, 16:i32)), GPR:i32:$acc)
                    // Emits: (t2SMLATT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
                    // Pattern complexity = 22  cost = 1  size = 0
                    SDNode *Result = Emit_96(N, ARM::t2SMLATT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32:$a), 16:i32))
    // Emits: (t2SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 22  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SRA) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1001.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N101 = N10.getNode()->getOperand(1);
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16) &&
                      N1001.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_100(N, ARM::t2SMLAWT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::MUL) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 GPR:i32:$b, 16:i32)), 16:i32), GPR:i32:$acc)
        // Emits: (t2SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 22  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::SRA) {
            SDValue N0010 = N001.getNode()->getOperand(0);
            SDValue N0011 = N001.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0011.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N01.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N1 = N->getOperand(1);
                    if (N0011.getValueType() == MVT::i32 &&
                        N01.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_101(N, ARM::t2SMLAWT, MVT::i32);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (sra:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32:$a), 16:i32), GPR:i32:$acc)
        // Emits: (t2SMLAWT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 22  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SRA) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N001 = N00.getNode()->getOperand(1);
              SDValue N01 = N0.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N01.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N1 = N->getOperand(1);
                  if (N0001.getValueType() == MVT::i32 &&
                      N01.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_102(N, ARM::t2SMLAWT, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sra:i32 GPR:i32:$b, 16:i32)))
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (cast<VTSDNode>(N101.getNode())->getVT() == MVT::i16) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SRA) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16) &&
                  N111.getValueType() == MVT::i32) {
                SDNode *Result = Emit_61(N, ARM::SMLABT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sext_inreg:i32 GPR:i32:$b, i16:Other)))
      // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ISD::SRA) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              if (cast<VTSDNode>(N111.getNode())->getVT() == MVT::i16 &&
                  N101.getValueType() == MVT::i32) {
                SDNode *Result = Emit_61(N, ARM::SMLATB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32:$a, (sext_inreg:i32 GPR:i32:$b, i16:Other)), 16:i32))
    // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::SRA) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::MUL) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N1010 = N101.getNode()->getOperand(0);
          SDValue N1011 = N101.getNode()->getOperand(1);
          if (cast<VTSDNode>(N1011.getNode())->getVT() == MVT::i16) {
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16) &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_63(N, ARM::SMLAWB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sra:i32 GPR:i32:$b, 16:i32)))
      // Emits: (t2SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (cast<VTSDNode>(N101.getNode())->getVT() == MVT::i16) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SRA) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16) &&
                  N111.getValueType() == MVT::i32) {
                SDNode *Result = Emit_61(N, ARM::t2SMLABT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sext_inreg:i32 GPR:i32:$b, i16:Other)))
      // Emits: (t2SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ISD::SRA) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              if (cast<VTSDNode>(N111.getNode())->getVT() == MVT::i16 &&
                  N101.getValueType() == MVT::i32) {
                SDNode *Result = Emit_61(N, ARM::t2SMLATB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32:$a, (sext_inreg:i32 GPR:i32:$b, i16:Other)), 16:i32))
    // Emits: (t2SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::SRA) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::MUL) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N1010 = N101.getNode()->getOperand(0);
          SDValue N1011 = N101.getNode()->getOperand(1);
          if (cast<VTSDNode>(N1011.getNode())->getVT() == MVT::i16) {
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16) &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_63(N, ARM::t2SMLAWB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sext_inreg:i32 GPR:i32:$a, i16:Other)))
    // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
                SDValue N110 = N11.getNode()->getOperand(0);
                SDValue N111 = N11.getNode()->getOperand(1);
                if (cast<VTSDNode>(N111.getNode())->getVT() == MVT::i16 &&
                    N101.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_91(N, ARM::SMLABT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sra:i32 GPR:i32:$b, 16:i32)), GPR:i32:$acc)
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::SRA) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N011.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_92(N, ARM::SMLABT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sext_inreg:i32 GPR:i32:$a, i16:Other)), GPR:i32:$acc)
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
              SDValue N010 = N01.getNode()->getOperand(0);
              SDValue N011 = N01.getNode()->getOperand(1);
              if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
                SDValue N1 = N->getOperand(1);
                if (N001.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_93(N, ARM::SMLABT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), (sra:i32 GPR:i32:$a, 16:i32)))
    // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (cast<VTSDNode>(N101.getNode())->getVT() == MVT::i16) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::SRA) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16) &&
                    N111.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_91(N, ARM::SMLATB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sext_inreg:i32 GPR:i32:$b, i16:Other)), GPR:i32:$acc)
      // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
              SDValue N010 = N01.getNode()->getOperand(0);
              SDValue N011 = N01.getNode()->getOperand(1);
              if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
                SDValue N1 = N->getOperand(1);
                if (N001.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_92(N, ARM::SMLATB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (add:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), (sra:i32 GPR:i32:$a, 16:i32)), GPR:i32:$acc)
      // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::SRA) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N011.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_93(N, ARM::SMLATB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), GPR:i32:$a), 16:i32))
    // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            if (cast<VTSDNode>(N1001.getNode())->getVT() == MVT::i16) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16) &&
                    N11.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_97(N, ARM::SMLAWB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::MUL) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32:$a, (sext_inreg:i32 GPR:i32:$b, i16:Other)), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 17  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N0010 = N001.getNode()->getOperand(0);
            SDValue N0011 = N001.getNode()->getOperand(1);
            if (cast<VTSDNode>(N0011.getNode())->getVT() == MVT::i16) {
              SDValue N01 = N0.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1 = N->getOperand(1);
                  if (N01.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_98(N, ARM::SMLAWB, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (sra:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), GPR:i32:$a), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 17  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          if (cast<VTSDNode>(N0001.getNode())->getVT() == MVT::i16) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue N01 = N0.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N01.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_99(N, ARM::SMLAWB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sext_inreg:i32 GPR:i32:$a, i16:Other)))
    // Emits: (t2SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
                SDValue N110 = N11.getNode()->getOperand(0);
                SDValue N111 = N11.getNode()->getOperand(1);
                if (cast<VTSDNode>(N111.getNode())->getVT() == MVT::i16 &&
                    N101.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_91(N, ARM::t2SMLABT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sra:i32 GPR:i32:$b, 16:i32)), GPR:i32:$acc)
      // Emits: (t2SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::SRA) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N011.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_92(N, ARM::t2SMLABT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sext_inreg:i32 GPR:i32:$a, i16:Other)), GPR:i32:$acc)
      // Emits: (t2SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
              SDValue N010 = N01.getNode()->getOperand(0);
              SDValue N011 = N01.getNode()->getOperand(1);
              if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
                SDValue N1 = N->getOperand(1);
                if (N001.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_93(N, ARM::t2SMLABT, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), (sra:i32 GPR:i32:$a, 16:i32)))
    // Emits: (t2SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (cast<VTSDNode>(N101.getNode())->getVT() == MVT::i16) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::SRA) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16) &&
                    N111.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_91(N, ARM::t2SMLATB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sext_inreg:i32 GPR:i32:$b, i16:Other)), GPR:i32:$acc)
      // Emits: (t2SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
              SDValue N010 = N01.getNode()->getOperand(0);
              SDValue N011 = N01.getNode()->getOperand(1);
              if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
                SDValue N1 = N->getOperand(1);
                if (N001.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_92(N, ARM::t2SMLATB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (add:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), (sra:i32 GPR:i32:$a, 16:i32)), GPR:i32:$acc)
      // Emits: (t2SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 17  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::SRA) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N011.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_93(N, ARM::t2SMLATB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), GPR:i32:$a), 16:i32))
    // Emits: (t2SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 17  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N1001 = N100.getNode()->getOperand(1);
            if (cast<VTSDNode>(N1001.getNode())->getVT() == MVT::i16) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16) &&
                    N11.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_97(N, ARM::t2SMLAWB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::MUL) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32:$a, (sext_inreg:i32 GPR:i32:$b, i16:Other)), 16:i32), GPR:i32:$acc)
        // Emits: (t2SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 17  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N0010 = N001.getNode()->getOperand(0);
            SDValue N0011 = N001.getNode()->getOperand(1);
            if (cast<VTSDNode>(N0011.getNode())->getVT() == MVT::i16) {
              SDValue N01 = N0.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1 = N->getOperand(1);
                  if (N01.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_98(N, ARM::t2SMLAWB, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (sra:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), GPR:i32:$a), 16:i32), GPR:i32:$acc)
        // Emits: (t2SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 17  cost = 1  size = 0
        if (N000.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          if (cast<VTSDNode>(N0001.getNode())->getVT() == MVT::i16) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue N01 = N0.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N01.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_99(N, ARM::t2SMLAWB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (add:i32 GPR:i32:$a, so_reg:i32:$b)
  // Emits: (ADDrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
      SDNode *Result = Emit_57(N, ARM::ADDrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$a, (sra:i32 GPR:i32:$b, 16:i32)))
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 15  cost = 1  size = 0
      if (Predicate_sext_16_node(N10.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::SRA) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N111.getValueType() == MVT::i32) {
              SDNode *Result = Emit_79(N, ARM::SMLABT, MVT::i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), GPR:i32<<P:Predicate_sext_16_node>>:$b))
      // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 15  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ISD::SRA) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (Predicate_sext_16_node(N11.getNode()) &&
                N101.getValueType() == MVT::i32) {
              SDNode *Result = Emit_81(N, ARM::SMLATB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32:$a, GPR:i32<<P:Predicate_sext_16_node>>:$b), 16:i32))
    // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 15  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::SRA) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::MUL) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (Predicate_sext_16_node(N101.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N11.getValueType() == MVT::i32) {
              SDNode *Result = Emit_83(N, ARM::SMLAWB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (add:i32 so_reg:i32:$b, GPR:i32:$a)
  // Emits: (ADDrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_88(N, ARM::ADDrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32<<P:Predicate_sext_16_node>>:$a))
    // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRA) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N101.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (Predicate_sext_16_node(N11.getNode()) &&
                  N101.getValueType() == MVT::i32) {
                SDNode *Result = Emit_110(N, ARM::SMLABT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$a, (sra:i32 GPR:i32:$b, 16:i32)), GPR:i32:$acc)
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 15  cost = 1  size = 0
      if (Predicate_sext_16_node(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::SRA) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N1 = N->getOperand(1);
              if (N011.getValueType() == MVT::i32) {
                SDNode *Result = Emit_111(N, ARM::SMLABT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32<<P:Predicate_sext_16_node>>:$a), GPR:i32:$acc)
      // Emits: (SMLABT:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 15  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (Predicate_sext_16_node(N01.getNode())) {
              SDValue N1 = N->getOperand(1);
              if (N001.getValueType() == MVT::i32) {
                SDNode *Result = Emit_112(N, ARM::SMLABT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$b, (sra:i32 GPR:i32:$a, 16:i32)))
    // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (Predicate_sext_16_node(N10.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SRA) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16) &&
                  N111.getValueType() == MVT::i32) {
                SDNode *Result = Emit_116(N, ARM::SMLATB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), GPR:i32<<P:Predicate_sext_16_node>>:$b), GPR:i32:$acc)
      // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 15  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (Predicate_sext_16_node(N01.getNode())) {
              SDValue N1 = N->getOperand(1);
              if (N001.getValueType() == MVT::i32) {
                SDNode *Result = Emit_117(N, ARM::SMLATB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:i32 (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$b, (sra:i32 GPR:i32:$a, 16:i32)), GPR:i32:$acc)
      // Emits: (SMLATB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
      // Pattern complexity = 15  cost = 1  size = 0
      if (Predicate_sext_16_node(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::SRA) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N1 = N->getOperand(1);
              if (N011.getValueType() == MVT::i32) {
                SDNode *Result = Emit_118(N, ARM::SMLATB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (sra:i32 (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$b, GPR:i32:$a), 16:i32))
    // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::MUL) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (Predicate_sext_16_node(N100.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16) &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_122(N, ARM::SMLAWB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::MUL) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32:$a, GPR:i32<<P:Predicate_sext_16_node>>:$b), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 15  cost = 1  size = 0
        {
          SDValue N001 = N00.getNode()->getOperand(1);
          if (Predicate_sext_16_node(N001.getNode())) {
            SDValue N01 = N0.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N01.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_123(N, ARM::SMLAWB, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }

        // Pattern: (add:i32 (sra:i32 (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$b, GPR:i32:$a), 16:i32), GPR:i32:$acc)
        // Emits: (SMLAWB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
        // Pattern complexity = 15  cost = 1  size = 0
        if (Predicate_sext_16_node(N000.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue N01 = N0.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N1 = N->getOperand(1);
              if (N01.getValueType() == MVT::i32) {
                SDNode *Result = Emit_124(N, ARM::SMLAWB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N101.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);

          // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i8:Other))
          // Emits: (SXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i8 &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_52(N, ARM::SXTABrr_rot, MVT::i32);
            return Result;
          }

          // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i16:Other))
          // Emits: (SXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16 &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_52(N, ARM::SXTAHrr_rot, MVT::i32);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N101.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);

          // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i8:Other))
          // Emits: (t2SXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i8 &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_52(N, ARM::t2SXTABrr_rot, MVT::i32);
            return Result;
          }

          // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i16:Other))
          // Emits: (t2SXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16 &&
              N101.getValueType() == MVT::i32) {
            SDNode *Result = Emit_52(N, ARM::t2SXTAHrr_rot, MVT::i32);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N001.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);

          // Pattern: (add:i32 (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i8:Other), GPR:i32:$LHS)
          // Emits: (SXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i8) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_85(N, ARM::SXTABrr_rot, MVT::i32);
              return Result;
            }
          }

          // Pattern: (add:i32 (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i16:Other), GPR:i32:$LHS)
          // Emits: (SXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_85(N, ARM::SXTAHrr_rot, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N001.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);

          // Pattern: (add:i32 (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i8:Other), GPR:i32:$LHS)
          // Emits: (t2SXTABrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i8) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_85(N, ARM::t2SXTABrr_rot, MVT::i32);
              return Result;
            }
          }

          // Pattern: (add:i32 (sext_inreg:i32 (rotr:i32 GPR:i32:$RHS, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i16:Other), GPR:i32:$LHS)
          // Emits: (t2SXTAHrr_rot:i32 GPR:i32:$LHS, GPR:i32:$RHS, (imm:i32):$rot)
          // Pattern complexity = 13  cost = 1  size = 0
          if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
            SDValue N1 = N->getOperand(1);
            if (N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_85(N, ARM::t2SXTAHrr_rot, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sext_inreg:i32 GPR:i32:$b, i16:Other)))
  // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (cast<VTSDNode>(N101.getNode())->getVT() == MVT::i16) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (cast<VTSDNode>(N111.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_60(N, ARM::SMLABB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (add:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2ADDrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_68(N, ARM::t2ADDrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sext_inreg:i32 GPR:i32:$b, i16:Other)))
    // Emits: (t2SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 12  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (cast<VTSDNode>(N101.getNode())->getVT() == MVT::i16) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (cast<VTSDNode>(N111.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_60(N, ARM::t2SMLABB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (add:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sext_inreg:i32 GPR:i32:$b, i16:Other)), GPR:i32:$acc)
  // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_90(N, ARM::SMLABB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
    // Emits: (t2ADDrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue CPTmpN0_0;
      SDValue CPTmpN0_1;
      if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
        SDNode *Result = Emit_103(N, ARM::t2ADDrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
        return Result;
      }
    }

    // Pattern: (add:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sext_inreg:i32 GPR:i32:$b, i16:Other)), GPR:i32:$acc)
    // Emits: (t2SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 12  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_90(N, ARM::t2SMLABB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (add:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_imm0_255_neg>><<X:imm_neg_XFORM>>:$imm)
    // Emits: (t2SUBri:i32 GPR:i32:$src, (imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_imm0_255_neg>>:$imm))
    // Pattern complexity = 8  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm0_255_neg(N1.getNode())) {
      SDNode *Result = Emit_69(N, ARM::t2SUBri, MVT::i32);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GPR:i32:$acc, (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$a, GPR:i32<<P:Predicate_sext_16_node>>:$b))
    // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 8  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (Predicate_sext_16_node(N10.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (Predicate_sext_16_node(N11.getNode())) {
            SDNode *Result = Emit_77(N, ARM::SMLABB, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (add:i32 (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$a, GPR:i32<<P:Predicate_sext_16_node>>:$b), GPR:i32:$acc)
    // Emits: (SMLABB:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$acc)
    // Pattern complexity = 8  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (Predicate_sext_16_node(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (Predicate_sext_16_node(N01.getNode())) {
          SDNode *Result = Emit_59(N, ARM::SMLABB, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (add:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (ADDri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_55(N, ARM::ADDri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_7>>:$rhs)
      // Emits: (tADDi3:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm0_7(N1.getNode())) {
        SDNode *Result = Emit_65(N, ARM::tADDi3, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm8_255>>:$rhs)
      // Emits: (tADDi8:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm8_255(N1.getNode())) {
        SDNode *Result = Emit_65(N, ARM::tADDi8, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_7_neg>><<X:imm_neg_XFORM>>:$rhs)
      // Emits: (tSUBi3:i32 tGPR:i32:$lhs, (imm_neg_XFORM:i32 (imm:i32):$rhs))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm0_7_neg(N1.getNode())) {
        SDNode *Result = Emit_67(N, ARM::tSUBi3, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm8_255_neg>><<X:imm_neg_XFORM>>:$rhs)
      // Emits: (tSUBi8:i32 tGPR:i32:$lhs, (imm_neg_XFORM:i32 (imm:i32):$rhs))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm8_255_neg(N1.getNode())) {
        SDNode *Result = Emit_67(N, ARM::tSUBi8, MVT::i32);
        return Result;
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
      // Emits: (t2ADDri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::t2ADDri, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_4095>>:$rhs)
      // Emits: (t2ADDri12:i32 GPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm0_4095(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::t2ADDri12, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_t2_so_imm_neg>><<X:t2_so_imm_neg_XFORM>>:$imm)
      // Emits: (t2SUBri:i32 GPR:i32:$src, (t2_so_imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_t2_so_imm_neg>>:$imm))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm_neg(N1.getNode())) {
        SDNode *Result = Emit_70(N, ARM::t2SUBri, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_imm0_4095_neg>><<X:imm_neg_XFORM>>:$imm)
      // Emits: (t2SUBri12:i32 GPR:i32:$src, (imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_imm0_4095_neg>>:$imm))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm0_4095_neg(N1.getNode())) {
        SDNode *Result = Emit_69(N, ARM::t2SUBri12, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (add:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_so_imm_neg>><<X:so_imm_neg_XFORM>>:$imm)
  // Emits: (SUBri:i32 GPR:i32:$src, (so_imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_so_imm_neg>>:$imm))
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm_neg(N1.getNode())) {
      SDNode *Result = Emit_73(N, ARM::SUBri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_t2_so_imm2part>>:$RHS)
      // Emits: (t2ADDri:i32 (t2ADDri:i32 GPR:i32:$LHS, (t2_so_imm2part_1:i32 (imm:i32):$RHS)), (t2_so_imm2part_2:i32 (imm:i32):$RHS))
      // Pattern complexity = 7  cost = 2  size = 0
      if (Predicate_t2_so_imm2part(N1.getNode())) {
        SDNode *Result = Emit_71(N, ARM::t2ADDri, ARM::t2ADDri, MVT::i32, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_t2_so_neg_imm2part>>:$RHS)
      // Emits: (t2SUBri:i32 (t2SUBri:i32 GPR:i32:$LHS, (t2_so_neg_imm2part_1:i32 (imm:i32):$RHS)), (t2_so_neg_imm2part_2:i32 (imm:i32):$RHS))
      // Pattern complexity = 7  cost = 2  size = 0
      if (Predicate_t2_so_neg_imm2part(N1.getNode())) {
        SDNode *Result = Emit_72(N, ARM::t2SUBri, ARM::t2SUBri, MVT::i32, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_so_imm2part>>:$RHS)
      // Emits: (ADDri:i32 (ADDri:i32 GPR:i32:$LHS, (so_imm2part_1:i32 (imm:i32):$RHS)), (so_imm2part_2:i32 (imm:i32):$RHS))
      // Pattern complexity = 7  cost = 2  size = 0
      if (Predicate_so_imm2part(N1.getNode())) {
        SDNode *Result = Emit_74(N, ARM::ADDri, ARM::ADDri, MVT::i32, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_so_neg_imm2part>>:$RHS)
      // Emits: (SUBri:i32 (SUBri:i32 GPR:i32:$LHS, (so_neg_imm2part_1:i32 (imm:i32):$RHS)), (so_neg_imm2part_2:i32 (imm:i32):$RHS))
      // Pattern complexity = 7  cost = 2  size = 0
      if (Predicate_so_neg_imm2part(N1.getNode())) {
        SDNode *Result = Emit_75(N, ARM::SUBri, ARM::SUBri, MVT::i32, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);

      // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 GPR:i32:$RHS, i8:Other))
      // Emits: (SXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
      // Pattern complexity = 6  cost = 1  size = 0
      if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i8) {
        SDNode *Result = Emit_51(N, ARM::SXTABrr, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 GPR:i32:$RHS, i16:Other))
      // Emits: (SXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
      // Pattern complexity = 6  cost = 1  size = 0
      if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16) {
        SDNode *Result = Emit_51(N, ARM::SXTAHrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (add:i32 (mul:i32 GPR:i32:$a, GPR:i32:$b), GPR:i32:$c)
  // Emits: (MLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDNode *Result = Emit_58(N, ARM::MLA, MVT::i32);
      return Result;
    }
  }

  // Pattern: (add:i32 (mulhs:i32 GPR:i32:$a, GPR:i32:$b), GPR:i32:$c)
  // Emits: (SMMLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MULHS) {
      SDNode *Result = Emit_59(N, ARM::SMMLA, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);

        // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 GPR:i32:$RHS, i8:Other))
        // Emits: (t2SXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 6  cost = 1  size = 0
        if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i8) {
          SDNode *Result = Emit_51(N, ARM::t2SXTABrr, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GPR:i32:$LHS, (sext_inreg:i32 GPR:i32:$RHS, i16:Other))
        // Emits: (t2SXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
        // Pattern complexity = 6  cost = 1  size = 0
        if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_51(N, ARM::t2SXTAHrr, MVT::i32);
          return Result;
        }
      }
    }

    // Pattern: (add:i32 (mul:i32 GPR:i32:$a, GPR:i32:$b), GPR:i32:$c)
    // Emits: (t2MLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDNode *Result = Emit_59(N, ARM::t2MLA, MVT::i32);
      return Result;
    }

    // Pattern: (add:i32 (mulhs:i32 GPR:i32:$a, GPR:i32:$b), GPR:i32:$c)
    // Emits: (t2SMMLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::MULHS) {
      SDNode *Result = Emit_59(N, ARM::t2SMMLA, MVT::i32);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);

      // Pattern: (add:i32 (sext_inreg:i32 GPR:i32:$RHS, i8:Other), GPR:i32:$LHS)
      // Emits: (SXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
      // Pattern complexity = 6  cost = 1  size = 0
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i8) {
        SDNode *Result = Emit_84(N, ARM::SXTABrr, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 (sext_inreg:i32 GPR:i32:$RHS, i16:Other), GPR:i32:$LHS)
      // Emits: (SXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
      // Pattern complexity = 6  cost = 1  size = 0
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDNode *Result = Emit_84(N, ARM::SXTAHrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (add:i32 GPR:i32:$c, (mul:i32 GPR:i32:$a, GPR:i32:$b))
  // Emits: (MLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDNode *Result = Emit_89(N, ARM::MLA, MVT::i32);
      return Result;
    }
  }

  // Pattern: (add:i32 GPR:i32:$c, (mulhs:i32 GPR:i32:$a, GPR:i32:$b))
  // Emits: (SMMLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MULHS) {
      SDNode *Result = Emit_77(N, ARM::SMMLA, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);

      // Pattern: (add:i32 (sext_inreg:i32 GPR:i32:$RHS, i8:Other), GPR:i32:$LHS)
      // Emits: (t2SXTABrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
      // Pattern complexity = 6  cost = 1  size = 0
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i8) {
        SDNode *Result = Emit_84(N, ARM::t2SXTABrr, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 (sext_inreg:i32 GPR:i32:$RHS, i16:Other), GPR:i32:$LHS)
      // Emits: (t2SXTAHrr:i32 GPR:i32:$LHS, GPR:i32:$RHS)
      // Pattern complexity = 6  cost = 1  size = 0
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDNode *Result = Emit_84(N, ARM::t2SXTAHrr, MVT::i32);
        return Result;
      }
    }
    SDValue N1 = N->getOperand(1);

    // Pattern: (add:i32 GPR:i32:$c, (mul:i32 GPR:i32:$a, GPR:i32:$b))
    // Emits: (t2MLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDNode *Result = Emit_77(N, ARM::t2MLA, MVT::i32);
      return Result;
    }

    // Pattern: (add:i32 GPR:i32:$c, (mulhs:i32 GPR:i32:$a, GPR:i32:$b))
    // Emits: (t2SMMLA:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MULHS) {
      SDNode *Result = Emit_77(N, ARM::t2SMMLA, MVT::i32);
      return Result;
    }
  }

  // Pattern: (add:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (ADDrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_56(N, ARM::ADDrr, MVT::i32);
    return Result;
  }

  // Pattern: (add:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tADDrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_66(N, ARM::tADDrr, MVT::i32);
    return Result;
  }

  // Pattern: (add:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ADDrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_56(N, ARM::t2ADDrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_125(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, N11, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_126(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_127(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, N01, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_128(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_ADD_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v8i8 DPR:v8i8:$src1, (NEONvshrs:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv8i8, MVT::v8i8);
            return Result;
          }
        }

        // Pattern: (add:v8i8 DPR:v8i8:$src1, (NEONvshru:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv8i8, MVT::v8i8);
            return Result;
          }
        }

        // Pattern: (add:v8i8 DPR:v8i8:$src1, (NEONvrshrs:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv8i8, MVT::v8i8);
            return Result;
          }
        }

        // Pattern: (add:v8i8 DPR:v8i8:$src1, (NEONvrshru:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv8i8, MVT::v8i8);
            return Result;
          }
        }
      }

      // Pattern: (add:v8i8 (NEONvshrs:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM), DPR:v8i8:$src1)
      // Emits: (VSRAsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (add:v8i8 (NEONvshru:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM), DPR:v8i8:$src1)
      // Emits: (VSRAuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (add:v8i8 (NEONvrshrs:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM), DPR:v8i8:$src1)
      // Emits: (VRSRAsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (add:v8i8 (NEONvrshru:v8i8 DPR:v8i8:$src2, (imm:i32):$SIMM), DPR:v8i8:$src1)
      // Emits: (VRSRAuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (add:v8i8 DPR:v8i8:$src1, (mul:v8i8 DPR:v8i8:$src2, DPR:v8i8:$src3))
      // Emits: (VMLAv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (add:v8i8 (mul:v8i8 DPR:v8i8:$src2, DPR:v8i8:$src3), DPR:v8i8:$src1)
      // Emits: (VMLAv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAv8i8, MVT::v8i8);
        return Result;
      }
    }

    // Pattern: (add:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
    // Emits: (VADDv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv8i8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ADD_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v16i8 QPR:v16i8:$src1, (NEONvshrs:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv16i8, MVT::v16i8);
            return Result;
          }
        }

        // Pattern: (add:v16i8 QPR:v16i8:$src1, (NEONvshru:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv16i8, MVT::v16i8);
            return Result;
          }
        }

        // Pattern: (add:v16i8 QPR:v16i8:$src1, (NEONvrshrs:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv16i8, MVT::v16i8);
            return Result;
          }
        }

        // Pattern: (add:v16i8 QPR:v16i8:$src1, (NEONvrshru:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv16i8, MVT::v16i8);
            return Result;
          }
        }
      }

      // Pattern: (add:v16i8 (NEONvshrs:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM), QPR:v16i8:$src1)
      // Emits: (VSRAsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (add:v16i8 (NEONvshru:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM), QPR:v16i8:$src1)
      // Emits: (VSRAuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (add:v16i8 (NEONvrshrs:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM), QPR:v16i8:$src1)
      // Emits: (VRSRAsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (add:v16i8 (NEONvrshru:v16i8 QPR:v16i8:$src2, (imm:i32):$SIMM), QPR:v16i8:$src1)
      // Emits: (VRSRAuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (add:v16i8 QPR:v16i8:$src1, (mul:v16i8 QPR:v16i8:$src2, QPR:v16i8:$src3))
      // Emits: (VMLAv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (add:v16i8 (mul:v16i8 QPR:v16i8:$src2, QPR:v16i8:$src3), QPR:v16i8:$src1)
      // Emits: (VMLAv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAv16i8, MVT::v16i8);
        return Result;
      }
    }

    // Pattern: (add:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
    // Emits: (VADDv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv16i8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_129(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N111)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, N110, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_130(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N11, N100, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_131(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N011)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, N010, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_132(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N001)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N01, N000, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
SDNode *Select_ISD_ADD_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (add:v4i16 DPR:v4i16:$src1, (mul:v4i16 DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane)))
          // Emits: (VMLAslv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              if (N111.getNode()->getOpcode() == ISD::Constant &&
                  N110.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_129(N, ARM::VMLAslv4i16, MVT::v4i16);
                return Result;
              }
            }
          }

          // Pattern: (add:v4i16 DPR:v4i16:$src1, (mul:v4i16 (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane), DPR:v4i16:$src2))
          // Emits: (VMLAslv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N100.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_130(N, ARM::VMLAslv4i16, MVT::v4i16);
                return Result;
              }
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (add:v4i16 (mul:v4i16 DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane)), DPR:v4i16:$src1)
        // Emits: (VMLAslv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            if (N011.getNode()->getOpcode() == ISD::Constant) {
              SDValue N1 = N->getOperand(1);
              if (N010.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_131(N, ARM::VMLAslv4i16, MVT::v4i16);
                return Result;
              }
            }
          }
        }

        // Pattern: (add:v4i16 (mul:v4i16 (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane), DPR:v4i16:$src2), DPR:v4i16:$src1)
        // Emits: (VMLAslv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N000.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_132(N, ARM::VMLAslv4i16, MVT::v4i16);
              return Result;
            }
          }
        }
      }
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v4i16 DPR:v4i16:$src1, (NEONvshrs:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv4i16, MVT::v4i16);
            return Result;
          }
        }

        // Pattern: (add:v4i16 DPR:v4i16:$src1, (NEONvshru:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv4i16, MVT::v4i16);
            return Result;
          }
        }

        // Pattern: (add:v4i16 DPR:v4i16:$src1, (NEONvrshrs:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv4i16, MVT::v4i16);
            return Result;
          }
        }

        // Pattern: (add:v4i16 DPR:v4i16:$src1, (NEONvrshru:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv4i16, MVT::v4i16);
            return Result;
          }
        }
      }

      // Pattern: (add:v4i16 (NEONvshrs:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM), DPR:v4i16:$src1)
      // Emits: (VSRAsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (add:v4i16 (NEONvshru:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM), DPR:v4i16:$src1)
      // Emits: (VSRAuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (add:v4i16 (NEONvrshrs:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM), DPR:v4i16:$src1)
      // Emits: (VRSRAsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (add:v4i16 (NEONvrshru:v4i16 DPR:v4i16:$src2, (imm:i32):$SIMM), DPR:v4i16:$src1)
      // Emits: (VRSRAuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (add:v4i16 DPR:v4i16:$src1, (mul:v4i16 DPR:v4i16:$src2, DPR:v4i16:$src3))
      // Emits: (VMLAv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (add:v4i16 (mul:v4i16 DPR:v4i16:$src2, DPR:v4i16:$src3), DPR:v4i16:$src1)
      // Emits: (VMLAv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAv4i16, MVT::v4i16);
        return Result;
      }
    }

    // Pattern: (add:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
    // Emits: (VADDv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv4i16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_133(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N111)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i16_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N110, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i16_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N0, N10, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
DISABLE_INLINE SDNode *Emit_134(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i16_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N100, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i16_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N0, N11, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
DISABLE_INLINE SDNode *Emit_135(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N011)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i16_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N010, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i16_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, N00, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
DISABLE_INLINE SDNode *Emit_136(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N001)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i16_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N000, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i16_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, N01, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
SDNode *Select_ISD_ADD_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (mul:v8i16 QPR:v8i16:$src2, (NEONvduplane:v8i16 DPR_8:v4i16:$src3, (imm:i32):$lane)))
        // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_129(N, ARM::VMLAslv8i16, MVT::v8i16);
              return Result;
            }
          }
        }

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (mul:v8i16 (NEONvduplane:v8i16 DPR_8:v4i16:$src3, (imm:i32):$lane), QPR:v8i16:$src2))
        // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_130(N, ARM::VMLAslv8i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:v8i16 (mul:v8i16 QPR:v8i16:$src2, (NEONvduplane:v8i16 DPR_8:v4i16:$src3, (imm:i32):$lane)), QPR:v8i16:$src1)
      // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          if (N011.getNode()->getOpcode() == ISD::Constant) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_131(N, ARM::VMLAslv8i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }

      // Pattern: (add:v8i16 (mul:v8i16 (NEONvduplane:v8i16 DPR_8:v4i16:$src3, (imm:i32):$lane), QPR:v8i16:$src2), QPR:v8i16:$src1)
      // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_132(N, ARM::VMLAslv8i16, MVT::v8i16);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (mul:v8i16 QPR:v8i16:$src2, (NEONvduplane:v8i16 QPR:v8i16:$src3, (imm:i32):$lane)))
        // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src3, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
        // Pattern complexity = 12  cost = 2  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_133(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv8i16, MVT::v4i16, MVT::v8i16);
              return Result;
            }
          }
        }

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (mul:v8i16 (NEONvduplane:v8i16 QPR:v8i16:$src3, (imm:i32):$lane), QPR:v8i16:$src2))
        // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src3, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
        // Pattern complexity = 12  cost = 2  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_134(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv8i16, MVT::v4i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:v8i16 (mul:v8i16 QPR:v8i16:$src2, (NEONvduplane:v8i16 QPR:v8i16:$src3, (imm:i32):$lane)), QPR:v8i16:$src1)
      // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src3, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          if (N011.getNode()->getOpcode() == ISD::Constant) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_135(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv8i16, MVT::v4i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }

      // Pattern: (add:v8i16 (mul:v8i16 (NEONvduplane:v8i16 QPR:v8i16:$src3, (imm:i32):$lane), QPR:v8i16:$src2), QPR:v8i16:$src1)
      // Emits: (VMLAslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src3, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_136(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv8i16, MVT::v4i16, MVT::v8i16);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (NEONvshrs:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv8i16, MVT::v8i16);
            return Result;
          }
        }

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (NEONvshru:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv8i16, MVT::v8i16);
            return Result;
          }
        }

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (NEONvrshrs:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv8i16, MVT::v8i16);
            return Result;
          }
        }

        // Pattern: (add:v8i16 QPR:v8i16:$src1, (NEONvrshru:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv8i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (add:v8i16 (NEONvshrs:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM), QPR:v8i16:$src1)
      // Emits: (VSRAsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (add:v8i16 (NEONvshru:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM), QPR:v8i16:$src1)
      // Emits: (VSRAuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (add:v8i16 (NEONvrshrs:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM), QPR:v8i16:$src1)
      // Emits: (VRSRAsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (add:v8i16 (NEONvrshru:v8i16 QPR:v8i16:$src2, (imm:i32):$SIMM), QPR:v8i16:$src1)
      // Emits: (VRSRAuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (add:v8i16 QPR:v8i16:$src1, (mul:v8i16 QPR:v8i16:$src2, QPR:v8i16:$src3))
      // Emits: (VMLAv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (add:v8i16 (mul:v8i16 QPR:v8i16:$src2, QPR:v8i16:$src3), QPR:v8i16:$src1)
      // Emits: (VMLAv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAv8i16, MVT::v8i16);
        return Result;
      }
    }

    // Pattern: (add:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
    // Emits: (VADDv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv8i16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ADD_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (add:v2i32 DPR:v2i32:$src1, (mul:v2i32 DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane)))
          // Emits: (VMLAslv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              if (N111.getNode()->getOpcode() == ISD::Constant &&
                  N110.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_129(N, ARM::VMLAslv2i32, MVT::v2i32);
                return Result;
              }
            }
          }

          // Pattern: (add:v2i32 DPR:v2i32:$src1, (mul:v2i32 (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane), DPR:v2i32:$src2))
          // Emits: (VMLAslv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N100.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_130(N, ARM::VMLAslv2i32, MVT::v2i32);
                return Result;
              }
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (add:v2i32 (mul:v2i32 DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane)), DPR:v2i32:$src1)
        // Emits: (VMLAslv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            if (N011.getNode()->getOpcode() == ISD::Constant) {
              SDValue N1 = N->getOperand(1);
              if (N010.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_131(N, ARM::VMLAslv2i32, MVT::v2i32);
                return Result;
              }
            }
          }
        }

        // Pattern: (add:v2i32 (mul:v2i32 (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane), DPR:v2i32:$src2), DPR:v2i32:$src1)
        // Emits: (VMLAslv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N000.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_132(N, ARM::VMLAslv2i32, MVT::v2i32);
              return Result;
            }
          }
        }
      }
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v2i32 DPR:v2i32:$src1, (NEONvshrs:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv2i32, MVT::v2i32);
            return Result;
          }
        }

        // Pattern: (add:v2i32 DPR:v2i32:$src1, (NEONvshru:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv2i32, MVT::v2i32);
            return Result;
          }
        }

        // Pattern: (add:v2i32 DPR:v2i32:$src1, (NEONvrshrs:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv2i32, MVT::v2i32);
            return Result;
          }
        }

        // Pattern: (add:v2i32 DPR:v2i32:$src1, (NEONvrshru:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv2i32, MVT::v2i32);
            return Result;
          }
        }
      }

      // Pattern: (add:v2i32 (NEONvshrs:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM), DPR:v2i32:$src1)
      // Emits: (VSRAsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (add:v2i32 (NEONvshru:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM), DPR:v2i32:$src1)
      // Emits: (VSRAuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (add:v2i32 (NEONvrshrs:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM), DPR:v2i32:$src1)
      // Emits: (VRSRAsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (add:v2i32 (NEONvrshru:v2i32 DPR:v2i32:$src2, (imm:i32):$SIMM), DPR:v2i32:$src1)
      // Emits: (VRSRAuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (add:v2i32 DPR:v2i32:$src1, (mul:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src3))
      // Emits: (VMLAv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (add:v2i32 (mul:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src3), DPR:v2i32:$src1)
      // Emits: (VMLAv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAv2i32, MVT::v2i32);
        return Result;
      }
    }

    // Pattern: (add:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VADDv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv2i32, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_137(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N111)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i32_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N110, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i32_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N0, N10, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
DISABLE_INLINE SDNode *Emit_138(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i32_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N100, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i32_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N0, N11, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
DISABLE_INLINE SDNode *Emit_139(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N011)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i32_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N010, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i32_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, N00, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
DISABLE_INLINE SDNode *Emit_140(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N001)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_DSubReg_i32_reg(Tmp3.getNode());
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N000, Tmp4), 0);
  SDValue Tmp6 = Transform_SubReg_i32_lane(Tmp3.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, N01, Tmp5, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 6);
}
SDNode *Select_ISD_ADD_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (mul:v4i32 QPR:v4i32:$src2, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane)))
        // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_129(N, ARM::VMLAslv4i32, MVT::v4i32);
              return Result;
            }
          }
        }

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (mul:v4i32 (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane), QPR:v4i32:$src2))
        // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_130(N, ARM::VMLAslv4i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:v4i32 (mul:v4i32 QPR:v4i32:$src2, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane)), QPR:v4i32:$src1)
      // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          if (N011.getNode()->getOpcode() == ISD::Constant) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_131(N, ARM::VMLAslv4i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (add:v4i32 (mul:v4i32 (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane), QPR:v4i32:$src2), QPR:v4i32:$src1)
      // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_132(N, ARM::VMLAslv4i32, MVT::v4i32);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (mul:v4i32 QPR:v4i32:$src2, (NEONvduplane:v4i32 QPR:v4i32:$src3, (imm:i32):$lane)))
        // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
        // Pattern complexity = 12  cost = 2  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_137(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv4i32, MVT::v2i32, MVT::v4i32);
              return Result;
            }
          }
        }

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (mul:v4i32 (NEONvduplane:v4i32 QPR:v4i32:$src3, (imm:i32):$lane), QPR:v4i32:$src2))
        // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
        // Pattern complexity = 12  cost = 2  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_138(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv4i32, MVT::v2i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:v4i32 (mul:v4i32 QPR:v4i32:$src2, (NEONvduplane:v4i32 QPR:v4i32:$src3, (imm:i32):$lane)), QPR:v4i32:$src1)
      // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          if (N011.getNode()->getOpcode() == ISD::Constant) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_139(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv4i32, MVT::v2i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (add:v4i32 (mul:v4i32 (NEONvduplane:v4i32 QPR:v4i32:$src3, (imm:i32):$lane), QPR:v4i32:$src2), QPR:v4i32:$src1)
      // Emits: (VMLAslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_140(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslv4i32, MVT::v2i32, MVT::v4i32);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (NEONvshrs:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv4i32, MVT::v4i32);
            return Result;
          }
        }

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (NEONvshru:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv4i32, MVT::v4i32);
            return Result;
          }
        }

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (NEONvrshrs:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv4i32, MVT::v4i32);
            return Result;
          }
        }

        // Pattern: (add:v4i32 QPR:v4i32:$src1, (NEONvrshru:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv4i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (add:v4i32 (NEONvshrs:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM), QPR:v4i32:$src1)
      // Emits: (VSRAsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (add:v4i32 (NEONvshru:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM), QPR:v4i32:$src1)
      // Emits: (VSRAuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (add:v4i32 (NEONvrshrs:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM), QPR:v4i32:$src1)
      // Emits: (VRSRAsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (add:v4i32 (NEONvrshru:v4i32 QPR:v4i32:$src2, (imm:i32):$SIMM), QPR:v4i32:$src1)
      // Emits: (VRSRAuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (add:v4i32 QPR:v4i32:$src1, (mul:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src3))
      // Emits: (VMLAv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::MUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (add:v4i32 (mul:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src3), QPR:v4i32:$src1)
      // Emits: (VMLAv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAv4i32, MVT::v4i32);
        return Result;
      }
    }

    // Pattern: (add:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VADDv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv4i32, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ADD_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v1i64 DPR:v1i64:$src1, (NEONvshrs:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv1i64, MVT::v1i64);
            return Result;
          }
        }

        // Pattern: (add:v1i64 DPR:v1i64:$src1, (NEONvshru:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv1i64, MVT::v1i64);
            return Result;
          }
        }

        // Pattern: (add:v1i64 DPR:v1i64:$src1, (NEONvrshrs:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv1i64, MVT::v1i64);
            return Result;
          }
        }

        // Pattern: (add:v1i64 DPR:v1i64:$src1, (NEONvrshru:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv1i64, MVT::v1i64);
            return Result;
          }
        }
      }

      // Pattern: (add:v1i64 (NEONvshrs:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM), DPR:v1i64:$src1)
      // Emits: (VSRAsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (add:v1i64 (NEONvshru:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM), DPR:v1i64:$src1)
      // Emits: (VSRAuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (add:v1i64 (NEONvrshrs:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM), DPR:v1i64:$src1)
      // Emits: (VRSRAsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (add:v1i64 (NEONvrshru:v1i64 DPR:v1i64:$src2, (imm:i32):$SIMM), DPR:v1i64:$src1)
      // Emits: (VRSRAuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv1i64, MVT::v1i64);
          return Result;
        }
      }
    }

    // Pattern: (add:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
    // Emits: (VADDv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv1i64, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ADD_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);

        // Pattern: (add:v2i64 QPR:v2i64:$src1, (NEONvshrs:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAsv2i64, MVT::v2i64);
            return Result;
          }
        }

        // Pattern: (add:v2i64 QPR:v2i64:$src1, (NEONvshru:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM))
        // Emits: (VSRAuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VSRAuv2i64, MVT::v2i64);
            return Result;
          }
        }

        // Pattern: (add:v2i64 QPR:v2i64:$src1, (NEONvrshrs:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRs) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAsv2i64, MVT::v2i64);
            return Result;
          }
        }

        // Pattern: (add:v2i64 QPR:v2i64:$src1, (NEONvrshru:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM))
        // Emits: (VRSRAuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
        // Pattern complexity = 9  cost = 1  size = 0
        if (N1.getNode()->getOpcode() == ARMISD::VRSHRu) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_126(N, ARM::VRSRAuv2i64, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (add:v2i64 (NEONvshrs:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM), QPR:v2i64:$src1)
      // Emits: (VSRAsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (add:v2i64 (NEONvshru:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM), QPR:v2i64:$src1)
      // Emits: (VSRAuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VSRAuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (add:v2i64 (NEONvrshrs:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM), QPR:v2i64:$src1)
      // Emits: (VRSRAsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRs) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (add:v2i64 (NEONvrshru:v2i64 QPR:v2i64:$src2, (imm:i32):$SIMM), QPR:v2i64:$src1)
      // Emits: (VRSRAuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2, (imm:i32):$SIMM)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VRSHRu) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_128(N, ARM::VRSRAuv2i64, MVT::v2i64);
          return Result;
        }
      }
    }

    // Pattern: (add:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
    // Emits: (VADDv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDv2i64, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_141(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_142(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_143(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_144(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_145(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, Tmp2, Tmp3, Tmp4 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_146(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, N1, Tmp3, Tmp4 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_147(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_imm_neg_XFORM(Tmp2.getNode());
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, Tmp3, Tmp4, Tmp5 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_148(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1, SDValue &CPTmpN0_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 6);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_149(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
SDNode *Select_ISD_ADDC_i32(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (addc:i32 GPR:i32:$a, so_reg:i32:$b)
    // Emits: (ADDSrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
        SDNode *Result = Emit_143(N, ARM::ADDSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
        return Result;
      }
    }

    // Pattern: (addc:i32 so_reg:i32:$b, GPR:i32:$a)
    // Emits: (ADDSrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_148(N, ARM::ADDSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (addc:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2ADDSrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_144(N, ARM::t2ADDSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (addc:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
    // Emits: (t2ADDSrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDNode *Result = Emit_149(N, ARM::t2ADDSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
      return Result;
    }
  }

  // Pattern: (addc:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (ADDSri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_141(N, ARM::ADDSri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (addc:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
  // Emits: (t2ADDSri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N1.getNode())) {
      SDNode *Result = Emit_141(N, ARM::t2ADDSri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (addc:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_7>>:$rhs)
      // Emits: (tADDi3:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_7>>:$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm0_7(N1.getNode())) {
        SDNode *Result = Emit_145(N, ARM::tADDi3, MVT::i32);
        return Result;
      }

      // Pattern: (addc:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm8_255>>:$rhs)
      // Emits: (tADDi8:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm8_255>>:$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm8_255(N1.getNode())) {
        SDNode *Result = Emit_145(N, ARM::tADDi8, MVT::i32);
        return Result;
      }

      // Pattern: (addc:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_7_neg>><<X:imm_neg_XFORM>>:$rhs)
      // Emits: (tSUBi3:i32 tGPR:i32:$lhs, (imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_imm0_7_neg>>:$rhs))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm0_7_neg(N1.getNode())) {
        SDNode *Result = Emit_147(N, ARM::tSUBi3, MVT::i32);
        return Result;
      }

      // Pattern: (addc:i32 tGPR:i32:$lhs, (imm:i32)<<P:Predicate_imm8_255_neg>><<X:imm_neg_XFORM>>:$rhs)
      // Emits: (tSUBi8:i32 tGPR:i32:$lhs, (imm_neg_XFORM:i32 (imm:i32)<<P:Predicate_imm8_255_neg>>:$rhs))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_imm8_255_neg(N1.getNode())) {
        SDNode *Result = Emit_147(N, ARM::tSUBi8, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (addc:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (ADDSrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_142(N, ARM::ADDSrr, MVT::i32);
    return Result;
  }

  // Pattern: (addc:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ADDSrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_142(N, ARM::t2ADDSrr, MVT::i32);
    return Result;
  }

  // Pattern: (addc:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tADDrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_146(N, ARM::tADDrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_150(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 6);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_151(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N0, N1, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 6);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_152(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 8);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_153(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0, Tmp1, InFlag);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_154(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0, N1, InFlag);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_155(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_156(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { Tmp0, N0, N1, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 6);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_157(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 7);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_158(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N0, CPTmpN1_0, CPTmpN1_1, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 4);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_159(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1, SDValue &CPTmpN0_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 8);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_160(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1, SDValue &CPTmpN0_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 5);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_161(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 7);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_162(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 4);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
SDNode *Select_ISD_ADDE_i32(SDNode *N) {

  // Pattern: (adde:i32 GPR:i32:$a, so_reg:i32:$b)
  // Emits: (ADCrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
      SDNode *Result = Emit_152(N, ARM::ADCrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$a, so_reg:i32:$b)
  // Emits: (ADCSSrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
      SDNode *Result = Emit_155(N, ARM::ADCSSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }

  // Pattern: (adde:i32 so_reg:i32:$b, GPR:i32:$a)
  // Emits: (ADCrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_159(N, ARM::ADCrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }

  // Pattern: (adde:i32 so_reg:i32:$b, GPR:i32:$a)
  // Emits: (ADCSSrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_160(N, ARM::ADCSSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Emits: (t2ADCrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
      SDNode *Result = Emit_157(N, ARM::t2ADCrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Emits: (t2ADCSrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
      SDNode *Result = Emit_158(N, ARM::t2ADCSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
      return Result;
    }
  }

  // Pattern: (adde:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
  // Emits: (t2ADCrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDNode *Result = Emit_161(N, ARM::t2ADCrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
      return Result;
    }
  }

  // Pattern: (adde:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
  // Emits: (t2ADCSrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDNode *Result = Emit_162(N, ARM::t2ADCSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (ADCri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_150(N, ARM::ADCri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (ADCSSri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_153(N, ARM::ADCSSri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
  // Emits: (t2ADCri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N1.getNode())) {
      SDNode *Result = Emit_150(N, ARM::t2ADCri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
  // Emits: (t2ADCSri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N1.getNode())) {
      SDNode *Result = Emit_153(N, ARM::t2ADCSri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (adde:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (ADCrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_151(N, ARM::ADCrr, MVT::i32);
    return Result;
  }

  // Pattern: (adde:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (ADCSSrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_154(N, ARM::ADCSSrr, MVT::i32);
    return Result;
  }

  // Pattern: (adde:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tADC:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_156(N, ARM::tADC, MVT::i32);
    return Result;
  }

  // Pattern: (adde:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ADCrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_151(N, ARM::t2ADCrr, MVT::i32);
    return Result;
  }

  // Pattern: (adde:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ADCSrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_154(N, ARM::t2ADCSrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_163(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2, Tmp3);
}
DISABLE_INLINE SDNode *Emit_164(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_165(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N10)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_166(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_167(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN10_0, SDValue &CPTmpN10_1, SDValue &CPTmpN10_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN10_0, CPTmpN10_1, CPTmpN10_2, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 7);
}
DISABLE_INLINE SDNode *Emit_168(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, N10, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_169(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN10_0, SDValue &CPTmpN10_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, CPTmpN10_0, CPTmpN10_1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_170(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0x18ULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_171(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0x8ULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_172(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_t2_so_imm_not_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_173(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_so_imm_not_XFORM(Tmp1.getNode());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_174(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_175(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N00)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_176(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_177(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_178(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN00_0, SDValue &CPTmpN00_1, SDValue &CPTmpN00_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 7);
}
DISABLE_INLINE SDNode *Emit_179(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N1, N00, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_180(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN00_0, SDValue &CPTmpN00_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN00_0, CPTmpN00_1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
SDNode *Select_ISD_AND_i32(SDNode *N) {
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(16711935))) {

      // Pattern: (and:i32 (shl:i32 GPR:i32:$Src, 8:i32), 16711935:i32)
      // Emits: (t2UXTB16r_rot:i32 GPR:i32:$Src, 24:i32)
      // Pattern complexity = 32  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::SHL) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N01.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8) &&
              N01.getValueType() == MVT::i32) {
            SDNode *Result = Emit_170(N, ARM::t2UXTB16r_rot, MVT::i32);
            return Result;
          }
        }
      }

      // Pattern: (and:i32 (srl:i32 GPR:i32:$Src, 8:i32), 16711935:i32)
      // Emits: (t2UXTB16r_rot:i32 GPR:i32:$Src, 8:i32)
      // Pattern complexity = 32  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::SRL) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N01.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8) &&
              N01.getValueType() == MVT::i32) {
            SDNode *Result = Emit_171(N, ARM::t2UXTB16r_rot, MVT::i32);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      if (CheckAndMask(N0, Tmp0, INT64_C(16711935))) {

        // Pattern: (and:i32 (shl:i32 GPR:i32:$Src, 8:i32), 16711935:i32)
        // Emits: (UXTB16r_rot:i32 GPR:i32:$Src, 24:i32)
        // Pattern complexity = 32  cost = 1  size = 0
        if (N0.getNode()->getOpcode() == ISD::SHL) {
          SDValue N00 = N0.getNode()->getOperand(0);
          SDValue N01 = N0.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N01.getNode());
          if (Tmp1) {
            int64_t CN2 = Tmp1->getSExtValue();
            if (CN2 == INT64_C(8) &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_170(N, ARM::UXTB16r_rot, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (and:i32 (srl:i32 GPR:i32:$Src, 8:i32), 16711935:i32)
        // Emits: (UXTB16r_rot:i32 GPR:i32:$Src, 8:i32)
        // Pattern complexity = 32  cost = 1  size = 0
        if (N0.getNode()->getOpcode() == ISD::SRL) {
          SDValue N00 = N0.getNode()->getOperand(0);
          SDValue N01 = N0.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N01.getNode());
          if (Tmp1) {
            int64_t CN2 = Tmp1->getSExtValue();
            if (CN2 == INT64_C(8) &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_171(N, ARM::UXTB16r_rot, MVT::i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (and:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 255:i32)
      // Emits: (UXTBr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
      // Pattern complexity = 31  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(255)) &&
          N0.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N01.getNode()) &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_164(N, ARM::UXTBr_rot, MVT::i32);
          return Result;
        }
      }

      // Pattern: (and:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 65535:i32)
      // Emits: (UXTHr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
      // Pattern complexity = 31  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(65535)) &&
          N0.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N01.getNode()) &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_164(N, ARM::UXTHr_rot, MVT::i32);
          return Result;
        }
      }

      // Pattern: (and:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 16711935:i32)
      // Emits: (UXTB16r_rot:i32 GPR:i32:$src, (imm:i32):$rot)
      // Pattern complexity = 31  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(16711935)) &&
          N0.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N01.getNode()) &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_164(N, ARM::UXTB16r_rot, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {

      // Pattern: (and:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 255:i32)
      // Emits: (t2UXTBr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
      // Pattern complexity = 31  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(255)) &&
          N0.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N01.getNode()) &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_164(N, ARM::t2UXTBr_rot, MVT::i32);
          return Result;
        }
      }

      // Pattern: (and:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 65535:i32)
      // Emits: (t2UXTHr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
      // Pattern complexity = 31  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(65535)) &&
          N0.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N01.getNode()) &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_164(N, ARM::t2UXTHr_rot, MVT::i32);
          return Result;
        }
      }

      // Pattern: (and:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), 16711935:i32)
      // Emits: (t2UXTB16r_rot:i32 GPR:i32:$src, (imm:i32):$rot)
      // Pattern complexity = 31  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(16711935)) &&
          N0.getNode()->getOpcode() == ISD::ROTR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_rot_imm(N01.getNode()) &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_164(N, ARM::t2UXTB16r_rot, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {

      // Pattern: (and:i32 GPR:i32:$src, 255:i32)
      // Emits: (UXTBr:i32 GPR:i32:$src)
      // Pattern complexity = 24  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(255))) {
        SDNode *Result = Emit_163(N, ARM::UXTBr, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GPR:i32:$src, 65535:i32)
      // Emits: (UXTHr:i32 GPR:i32:$src)
      // Pattern complexity = 24  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(65535))) {
        SDNode *Result = Emit_163(N, ARM::UXTHr, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GPR:i32:$src, 16711935:i32)
      // Emits: (UXTB16r:i32 GPR:i32:$src)
      // Pattern complexity = 24  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(16711935))) {
        SDNode *Result = Emit_163(N, ARM::UXTB16r, MVT::i32);
        return Result;
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {

      // Pattern: (and:i32 GPR:i32:$src, 255:i32)
      // Emits: (t2UXTBr:i32 GPR:i32:$src)
      // Pattern complexity = 24  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(255))) {
        SDNode *Result = Emit_163(N, ARM::t2UXTBr, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GPR:i32:$src, 65535:i32)
      // Emits: (t2UXTHr:i32 GPR:i32:$src)
      // Pattern complexity = 24  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(65535))) {
        SDNode *Result = Emit_163(N, ARM::t2UXTHr, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GPR:i32:$src, 16711935:i32)
      // Emits: (t2UXTB16r:i32 GPR:i32:$src)
      // Pattern complexity = 24  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(16711935))) {
        SDNode *Result = Emit_163(N, ARM::t2UXTB16r, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i32 GPR:i32:$a, (xor:i32 so_reg:i32:$b, (imm:i32)<<P:Predicate_immAllOnes>>))
    // Emits: (BICrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 22  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue CPTmpN10_0;
        SDValue CPTmpN10_1;
        SDValue CPTmpN10_2;
        if (SelectShifterOperandReg(N, N10, CPTmpN10_0, CPTmpN10_1, CPTmpN10_2)) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_immAllOnes(N11.getNode())) {
            SDNode *Result = Emit_167(N, ARM::BICrs, MVT::i32, CPTmpN10_0, CPTmpN10_1, CPTmpN10_2);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i32 (xor:i32 so_reg:i32:$b, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$a)
    // Emits: (BICrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 22  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      SDValue CPTmpN00_2;
      if (SelectShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N01.getNode())) {
          SDNode *Result = Emit_178(N, ARM::BICrs, MVT::i32, CPTmpN00_0, CPTmpN00_1, CPTmpN00_2);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i32 GPR:i32:$lhs, (xor:i32 t2_so_reg:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
    // Emits: (t2BICrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 19  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue CPTmpN10_0;
        SDValue CPTmpN10_1;
        if (SelectT2ShifterOperandReg(N, N10, CPTmpN10_0, CPTmpN10_1)) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_immAllOnes(N11.getNode())) {
            SDNode *Result = Emit_169(N, ARM::t2BICrs, MVT::i32, CPTmpN10_0, CPTmpN10_1);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i32 (xor:i32 t2_so_reg:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$lhs)
    // Emits: (t2BICrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 19  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      if (SelectT2ShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N01.getNode())) {
          SDNode *Result = Emit_180(N, ARM::t2BICrs, MVT::i32, CPTmpN00_0, CPTmpN00_1);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i32 GPR:i32:$a, so_reg:i32:$b)
    // Emits: (ANDrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
        SDNode *Result = Emit_57(N, ARM::ANDrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
        return Result;
      }
    }

    // Pattern: (and:i32 so_reg:i32:$b, GPR:i32:$a)
    // Emits: (ANDrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue CPTmpN0_0;
      SDValue CPTmpN0_1;
      SDValue CPTmpN0_2;
      if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
        SDNode *Result = Emit_88(N, ARM::ANDrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
        return Result;
      }
    }

    // Pattern: (and:i32 GPR:i32:$a, (xor:i32 (imm:i32)<<P:Predicate_so_imm>>:$b, (imm:i32)<<P:Predicate_immAllOnes>>))
    // Emits: (BICri:i32 GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 14  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm(N10.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N11.getNode())) {
          SDNode *Result = Emit_165(N, ARM::BICri, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (and:i32 GPR:i32:$lhs, (xor:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
  // Emits: (t2BICri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 14  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::Constant &&
          Predicate_t2_so_imm(N10.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N11.getNode())) {
          SDNode *Result = Emit_165(N, ARM::t2BICri, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i32 GPR:i32:$a, (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_so_imm>>:$b))
    // Emits: (BICri:i32 GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 14  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N10.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_so_imm(N11.getNode())) {
            SDNode *Result = Emit_174(N, ARM::BICri, MVT::i32);
            return Result;
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (and:i32 (xor:i32 (imm:i32)<<P:Predicate_so_imm>>:$b, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$a)
        // Emits: (BICri:i32 GPR:i32:$a, (imm:i32):$b)
        // Pattern complexity = 14  cost = 1  size = 0
        if (Predicate_so_imm(N00.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_immAllOnes(N01.getNode())) {
            SDNode *Result = Emit_175(N, ARM::BICri, MVT::i32);
            return Result;
          }
        }

        // Pattern: (and:i32 (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_so_imm>>:$b), GPR:i32:$a)
        // Emits: (BICri:i32 GPR:i32:$a, (imm:i32):$b)
        // Pattern complexity = 14  cost = 1  size = 0
        if (Predicate_immAllOnes(N00.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_so_imm(N01.getNode())) {
            SDNode *Result = Emit_176(N, ARM::BICri, MVT::i32);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i32 GPR:i32:$lhs, (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs))
    // Emits: (t2BICri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 14  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N10.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_t2_so_imm(N11.getNode())) {
            SDNode *Result = Emit_174(N, ARM::t2BICri, MVT::i32);
            return Result;
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (and:i32 (xor:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$lhs)
        // Emits: (t2BICri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
        // Pattern complexity = 14  cost = 1  size = 0
        if (Predicate_t2_so_imm(N00.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_immAllOnes(N01.getNode())) {
            SDNode *Result = Emit_175(N, ARM::t2BICri, MVT::i32);
            return Result;
          }
        }

        // Pattern: (and:i32 (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs), GPR:i32:$lhs)
        // Emits: (t2BICri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
        // Pattern complexity = 14  cost = 1  size = 0
        if (Predicate_immAllOnes(N00.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_t2_so_imm(N01.getNode())) {
            SDNode *Result = Emit_176(N, ARM::t2BICri, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2ANDrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_68(N, ARM::t2ANDrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (and:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
    // Emits: (t2ANDrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDNode *Result = Emit_103(N, ARM::t2ANDrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
      return Result;
    }
  }

  // Pattern: (and:i32 GPR:i32:$a, (xor:i32 GPR:i32:$b, (imm:i32)<<P:Predicate_immAllOnes>>))
  // Emits: (BICrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      if (N11.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N11.getNode())) {
        SDNode *Result = Emit_166(N, ARM::BICrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (and:i32 tGPR:i32:$lhs, (xor:i32 tGPR:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
  // Emits: (tBIC:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      if (N11.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N11.getNode())) {
        SDNode *Result = Emit_168(N, ARM::tBIC, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (and:i32 GPR:i32:$lhs, (xor:i32 GPR:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
  // Emits: (t2BICrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      if (N11.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N11.getNode())) {
        SDNode *Result = Emit_166(N, ARM::t2BICrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (and:i32 (xor:i32 GPR:i32:$b, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$a)
  // Emits: (BICrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N01.getNode())) {
        SDNode *Result = Emit_177(N, ARM::BICrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (and:i32 (xor:i32 tGPR:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), tGPR:i32:$lhs)
  // Emits: (tBIC:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N01.getNode())) {
        SDNode *Result = Emit_179(N, ARM::tBIC, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (and:i32 (xor:i32 GPR:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$lhs)
  // Emits: (t2BICrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N01.getNode())) {
        SDNode *Result = Emit_177(N, ARM::t2BICrr, MVT::i32);
        return Result;
      }
    }
  }
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {

      // Pattern: (and:i32 tGPR:i32:$src, 255:i32)
      // Emits: (tUXTB:i32 tGPR:i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(255))) {
        SDNode *Result = Emit_163(N, ARM::tUXTB, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 tGPR:i32:$src, 65535:i32)
      // Emits: (tUXTH:i32 tGPR:i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CheckAndMask(N0, Tmp0, INT64_C(65535))) {
        SDNode *Result = Emit_163(N, ARM::tUXTH, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (and:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (ANDri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_55(N, ARM::ANDri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (and:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_bf_inv_mask_imm>>:$imm)
  // Emits: (BFC:i32 GPR:i32:$src, (imm:i32):$imm)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_bf_inv_mask_imm(N1.getNode())) {
      SDNode *Result = Emit_35(N, ARM::BFC, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (and:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
      // Emits: (t2ANDri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::t2ANDri, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_bf_inv_mask_imm>>:$imm)
      // Emits: (t2BFC:i32 GPR:i32:$src, (imm:i32):$imm)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_bf_inv_mask_imm(N1.getNode())) {
        SDNode *Result = Emit_35(N, ARM::t2BFC, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_t2_so_imm_not>><<X:t2_so_imm_not_XFORM>>:$imm)
      // Emits: (t2BICri:i32 GPR:i32:$src, (t2_so_imm_not_XFORM:i32 (imm:i32)<<P:Predicate_t2_so_imm_not>>:$imm))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm_not(N1.getNode())) {
        SDNode *Result = Emit_172(N, ARM::t2BICri, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {

    // Pattern: (and:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_so_imm_not>><<X:so_imm_not_XFORM>>:$imm)
    // Emits: (BICri:i32 GPR:i32:$src, (so_imm_not_XFORM:i32 (imm:i32)<<P:Predicate_so_imm_not>>:$imm))
    // Pattern complexity = 7  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm_not(N1.getNode())) {
        SDNode *Result = Emit_173(N, ARM::BICri, MVT::i32);
        return Result;
      }
    }

    // Pattern: (and:i32 GPR:i32:$a, GPR:i32:$b)
    // Emits: (ANDrr:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_56(N, ARM::ANDrr, MVT::i32);
    return Result;
  }

  // Pattern: (and:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tAND:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_66(N, ARM::tAND, MVT::i32);
    return Result;
  }

  // Pattern: (and:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ANDrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_56(N, ARM::t2ANDrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_181(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N11, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_182(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N01, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_AND_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::XOR) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (and:v2i32 DPR:v2i32:$src1, (xor:v2i32 DPR:v2i32:$src2, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>))
          // Emits: (VBICd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N11.getNode())) {
              SDNode *Result = Emit_51(N, ARM::VBICd, MVT::v2i32);
              return Result;
            }
          }

          // Pattern: (and:v2i32 DPR:v2i32:$src1, (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src2))
          // Emits: (VBICd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N10.getNode())) {
            SDNode *Result = Emit_181(N, ARM::VBICd, MVT::v2i32);
            return Result;
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::XOR) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (and:v2i32 (xor:v2i32 DPR:v2i32:$src2, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>), DPR:v2i32:$src1)
        // Emits: (VBICd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N01.getNode())) {
            SDNode *Result = Emit_84(N, ARM::VBICd, MVT::v2i32);
            return Result;
          }
        }

        // Pattern: (and:v2i32 (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src2), DPR:v2i32:$src1)
        // Emits: (VBICd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N00.getNode())) {
          SDNode *Result = Emit_182(N, ARM::VBICd, MVT::v2i32);
          return Result;
        }
      }
    }

    // Pattern: (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VANDd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VANDd, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_AND_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::XOR) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (and:v4i32 QPR:v4i32:$src1, (xor:v4i32 QPR:v4i32:$src2, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>))
          // Emits: (VBICq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N11.getNode())) {
              SDNode *Result = Emit_51(N, ARM::VBICq, MVT::v4i32);
              return Result;
            }
          }

          // Pattern: (and:v4i32 QPR:v4i32:$src1, (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src2))
          // Emits: (VBICq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N10.getNode())) {
            SDNode *Result = Emit_181(N, ARM::VBICq, MVT::v4i32);
            return Result;
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::XOR) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (and:v4i32 (xor:v4i32 QPR:v4i32:$src2, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>), QPR:v4i32:$src1)
        // Emits: (VBICq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N01.getNode())) {
            SDNode *Result = Emit_84(N, ARM::VBICq, MVT::v4i32);
            return Result;
          }
        }

        // Pattern: (and:v4i32 (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src2), QPR:v4i32:$src1)
        // Emits: (VBICq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N00.getNode())) {
          SDNode *Result = Emit_182(N, ARM::VBICq, MVT::v4i32);
          return Result;
        }
      }
    }

    // Pattern: (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VANDq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VANDq, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_183(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { N1, N2, N3, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 4);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_ATOMIC_CMP_SWAP_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_cmp_swap:i32 GPR:i32:$ptr, GPR:i32:$old, GPR:i32:$new)<<P:Predicate_atomic_cmp_swap_8>>
  // Emits: (ATOMIC_CMP_SWAP_I8:i32 GPR:i32:$ptr, GPR:i32:$old, GPR:i32:$new)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_cmp_swap_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue N3 = N->getOperand(3);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_183(N, ARM::ATOMIC_CMP_SWAP_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_cmp_swap:i32 GPR:i32:$ptr, GPR:i32:$old, GPR:i32:$new)<<P:Predicate_atomic_cmp_swap_16>>
  // Emits: (ATOMIC_CMP_SWAP_I16:i32 GPR:i32:$ptr, GPR:i32:$old, GPR:i32:$new)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_cmp_swap_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue N3 = N->getOperand(3);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_183(N, ARM::ATOMIC_CMP_SWAP_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_cmp_swap:i32 GPR:i32:$ptr, GPR:i32:$old, GPR:i32:$new)<<P:Predicate_atomic_cmp_swap_32>>
  // Emits: (ATOMIC_CMP_SWAP_I32:i32 GPR:i32:$ptr, GPR:i32:$old, GPR:i32:$new)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_cmp_swap_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue N3 = N->getOperand(3);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_183(N, ARM::ATOMIC_CMP_SWAP_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_184(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, N1, N2, Chain);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_ATOMIC_LOAD_ADD_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_load_add:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_add_8>>
  // Emits: (ATOMIC_LOAD_ADD_I8:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_add_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_ADD_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_add:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_add_16>>
  // Emits: (ATOMIC_LOAD_ADD_I16:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_add_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_ADD_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_add:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_add_32>>
  // Emits: (ATOMIC_LOAD_ADD_I32:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_add_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_ADD_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_AND_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_load_and:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_and_8>>
  // Emits: (ATOMIC_LOAD_AND_I8:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_and_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_AND_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_and:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_and_16>>
  // Emits: (ATOMIC_LOAD_AND_I16:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_and_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_AND_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_and:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_and_32>>
  // Emits: (ATOMIC_LOAD_AND_I32:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_and_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_AND_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_NAND_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_load_nand:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_nand_8>>
  // Emits: (ATOMIC_LOAD_NAND_I8:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_nand_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_NAND_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_nand:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_nand_16>>
  // Emits: (ATOMIC_LOAD_NAND_I16:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_nand_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_NAND_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_nand:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_nand_32>>
  // Emits: (ATOMIC_LOAD_NAND_I32:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_nand_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_NAND_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_OR_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_load_or:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_or_8>>
  // Emits: (ATOMIC_LOAD_OR_I8:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_or_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_OR_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_or:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_or_16>>
  // Emits: (ATOMIC_LOAD_OR_I16:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_or_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_OR_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_or:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_or_32>>
  // Emits: (ATOMIC_LOAD_OR_I32:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_or_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_OR_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_SUB_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_load_sub:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_sub_8>>
  // Emits: (ATOMIC_LOAD_SUB_I8:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_sub_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_SUB_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_sub:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_sub_16>>
  // Emits: (ATOMIC_LOAD_SUB_I16:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_sub_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_SUB_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_sub:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_sub_32>>
  // Emits: (ATOMIC_LOAD_SUB_I32:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_sub_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_SUB_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_XOR_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_load_xor:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_xor_8>>
  // Emits: (ATOMIC_LOAD_XOR_I8:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_xor_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_XOR_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_xor:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_xor_16>>
  // Emits: (ATOMIC_LOAD_XOR_I16:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_xor_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_XOR_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_load_xor:i32 GPR:i32:$ptr, GPR:i32:$incr)<<P:Predicate_atomic_load_xor_32>>
  // Emits: (ATOMIC_LOAD_XOR_I32:i32 GPR:i32:$ptr, GPR:i32:$incr)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_load_xor_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_LOAD_XOR_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_SWAP_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);

  // Pattern: (atomic_swap:i32 GPR:i32:$ptr, GPR:i32:$new)<<P:Predicate_atomic_swap_8>>
  // Emits: (ATOMIC_SWAP_I8:i32 GPR:i32:$ptr, GPR:i32:$new)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_swap_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_SWAP_I8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_swap:i32 GPR:i32:$ptr, GPR:i32:$new)<<P:Predicate_atomic_swap_16>>
  // Emits: (ATOMIC_SWAP_I16:i32 GPR:i32:$ptr, GPR:i32:$new)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_swap_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_SWAP_I16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (atomic_swap:i32 GPR:i32:$ptr, GPR:i32:$new)<<P:Predicate_atomic_swap_32>>
  // Emits: (ATOMIC_SWAP_I32:i32 GPR:i32:$ptr, GPR:i32:$new)
  // Pattern complexity = 4  cost = 11  size = 0
  if (Predicate_atomic_swap_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_184(N, ARM::ATOMIC_SWAP_I32, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_i32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_31(N, ARM::VMOVRS, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_f32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_31(N, ARM::VMOVSR, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_185(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ReplaceUses(SDValue(N, 0), N0);
  return NULL;
}
SDNode *Select_ISD_BIT_CONVERT_f64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:f64 DPR:v1i64:$src)
  // Emits: DPR:f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:f64 DPR:v2i32:$src)
  // Emits: DPR:f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:f64 DPR:v4i16:$src)
  // Emits: DPR:f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:f64 DPR:v8i8:$src)
  // Emits: DPR:f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:f64 DPR:v2f32:$src)
  // Emits: DPR:f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v8i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v8i8 DPR:v1i64:$src)
  // Emits: DPR:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 DPR:v2i32:$src)
  // Emits: DPR:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 DPR:v4i16:$src)
  // Emits: DPR:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 DPR:f64:$src)
  // Emits: DPR:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 DPR:v2f32:$src)
  // Emits: DPR:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v16i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v16i8 QPR:v2i64:$src)
  // Emits: QPR:v16i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v16i8 QPR:v4i32:$src)
  // Emits: QPR:v16i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v16i8 QPR:v8i16:$src)
  // Emits: QPR:v16i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v16i8 QPR:v2f64:$src)
  // Emits: QPR:v16i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v16i8 QPR:v4f32:$src)
  // Emits: QPR:v16i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v4i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v4i16 DPR:v1i64:$src)
  // Emits: DPR:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 DPR:v2i32:$src)
  // Emits: DPR:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 DPR:v8i8:$src)
  // Emits: DPR:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 DPR:f64:$src)
  // Emits: DPR:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 DPR:v2f32:$src)
  // Emits: DPR:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v8i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v8i16 QPR:v2i64:$src)
  // Emits: QPR:v8i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i16 QPR:v4i32:$src)
  // Emits: QPR:v8i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i16 QPR:v16i8:$src)
  // Emits: QPR:v8i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v16i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i16 QPR:v2f64:$src)
  // Emits: QPR:v8i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i16 QPR:v4f32:$src)
  // Emits: QPR:v8i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v2i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v2i32 DPR:v1i64:$src)
  // Emits: DPR:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 DPR:v4i16:$src)
  // Emits: DPR:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 DPR:v8i8:$src)
  // Emits: DPR:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 DPR:f64:$src)
  // Emits: DPR:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 DPR:v2f32:$src)
  // Emits: DPR:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v4i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v4i32 QPR:v2i64:$src)
  // Emits: QPR:v4i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i32 QPR:v8i16:$src)
  // Emits: QPR:v4i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i32 QPR:v16i8:$src)
  // Emits: QPR:v4i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v16i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i32 QPR:v2f64:$src)
  // Emits: QPR:v4i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i32 QPR:v4f32:$src)
  // Emits: QPR:v4i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v1i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v1i64 DPR:v2i32:$src)
  // Emits: DPR:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 DPR:v4i16:$src)
  // Emits: DPR:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 DPR:v8i8:$src)
  // Emits: DPR:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 DPR:f64:$src)
  // Emits: DPR:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 DPR:v2f32:$src)
  // Emits: DPR:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v2i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v2i64 QPR:v4i32:$src)
  // Emits: QPR:v2i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i64 QPR:v8i16:$src)
  // Emits: QPR:v2i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i64 QPR:v16i8:$src)
  // Emits: QPR:v2i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v16i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i64 QPR:v2f64:$src)
  // Emits: QPR:v2i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i64 QPR:v4f32:$src)
  // Emits: QPR:v2i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v2f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v2f32 DPR:f64:$src)
  // Emits: DPR:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 DPR:v1i64:$src)
  // Emits: DPR:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 DPR:v2i32:$src)
  // Emits: DPR:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 DPR:v4i16:$src)
  // Emits: DPR:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 DPR:v8i8:$src)
  // Emits: DPR:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v4f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v4f32 QPR:v2i64:$src)
  // Emits: QPR:v4f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4f32 QPR:v4i32:$src)
  // Emits: QPR:v4f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4f32 QPR:v8i16:$src)
  // Emits: QPR:v4f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4f32 QPR:v16i8:$src)
  // Emits: QPR:v4f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v16i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v4f32 QPR:v2f64:$src)
  // Emits: QPR:v4f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v2f64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v2f64 QPR:v2i64:$src)
  // Emits: QPR:v2f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i64) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f64 QPR:v4i32:$src)
  // Emits: QPR:v2f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f64 QPR:v8i16:$src)
  // Emits: QPR:v2f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i16) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f64 QPR:v16i8:$src)
  // Emits: QPR:v2f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v16i8) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f64 QPR:v4f32:$src)
  // Emits: QPR:v2f64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_185(N);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BR(SDNode *N) {

  // Pattern: (br:isVoid (bb:Other):$target)
  // Emits: (B:isVoid (bb:Other):$target)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BasicBlock) {
      SDNode *Result = Emit_34(N, ARM::B);
      return Result;
    }
  }

  // Pattern: (br:isVoid (bb:Other):$target)
  // Emits: (tB:isVoid (bb:Other):$target)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BasicBlock) {
      SDNode *Result = Emit_34(N, ARM::tB);
      return Result;
    }
  }

  // Pattern: (br:isVoid (bb:Other):$target)
  // Emits: (t2B:isVoid (bb:Other):$target)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BasicBlock) {
      SDNode *Result = Emit_34(N, ARM::t2B);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BRIND(SDNode *N) {

  // Pattern: (brind:isVoid GPR:i32:$dst)
  // Emits: (BRIND:isVoid GPR:i32:$dst)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_34(N, ARM::BRIND);
      return Result;
    }
  }

  // Pattern: (brind:isVoid GPR:i32:$dst)
  // Emits: (tBRIND:isVoid GPR:i32:$dst)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_34(N, ARM::tBRIND);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BSWAP_i32(SDNode *N) {

  // Pattern: (bswap:i32 GPR:i32:$src)
  // Emits: (REV:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDNode *Result = Emit_31(N, ARM::REV, MVT::i32);
    return Result;
  }

  // Pattern: (bswap:i32 tGPR:i32:$src)
  // Emits: (tREV:i32 tGPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDNode *Result = Emit_31(N, ARM::tREV, MVT::i32);
    return Result;
  }

  // Pattern: (bswap:i32 GPR:i32:$src)
  // Emits: (t2REV:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_31(N, ARM::t2REV, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_186(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp1 = Transform_VMOV_get_imm8(SDValue(N, 0).getNode());
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp1, Tmp2, Tmp3);
}
SDNode *Select_ISD_BUILD_VECTOR_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm8(N)) {
    SDNode *Result = Emit_186(N, ARM::VMOVv8i8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm8(N)) {
    SDNode *Result = Emit_186(N, ARM::VMOVv16i8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_187(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp1 = Transform_VMOV_get_imm16(SDValue(N, 0).getNode());
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp1, Tmp2, Tmp3);
}
SDNode *Select_ISD_BUILD_VECTOR_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm16(N)) {
    SDNode *Result = Emit_187(N, ARM::VMOVv4i16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm16(N)) {
    SDNode *Result = Emit_187(N, ARM::VMOVv8i16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_188(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp1 = Transform_VMOV_get_imm32(SDValue(N, 0).getNode());
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp1, Tmp2, Tmp3);
}
SDNode *Select_ISD_BUILD_VECTOR_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm32(N)) {
    SDNode *Result = Emit_188(N, ARM::VMOVv2i32, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm32(N)) {
    SDNode *Result = Emit_188(N, ARM::VMOVv4i32, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_189(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp1 = Transform_VMOV_get_imm64(SDValue(N, 0).getNode());
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp1, Tmp2, Tmp3);
}
SDNode *Select_ISD_BUILD_VECTOR_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm64(N)) {
    SDNode *Result = Emit_189(N, ARM::VMOVv1i64, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON()) &&
      Predicate_vmovImm64(N)) {
    SDNode *Result = Emit_189(N, ARM::VMOVv2i64, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_190(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  SDValue Ops0[] = { N1, N2, Tmp2, Tmp3, Chain, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, HasInFlag ? 6 : 5);
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_191(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  SDValue Ops0[] = { Tmp0, Tmp1, Chain, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, HasInFlag ? 4 : 3);
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ISD_CALLSEQ_END(SDNode *N) {

  // Pattern: (ARMcallseq_end:isVoid (timm:i32):$amt1, (timm:i32):$amt2)
  // Emits: (ADJCALLSTACKUP:isVoid (timm:i32):$amt1, (timm:i32):$amt2)
  // Pattern complexity = 9  cost = 1  size = 0
  {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetConstant) {
      SDValue N2 = N->getOperand(2);
      if (N2.getNode()->getOpcode() == ISD::TargetConstant) {
        SDNode *Result = Emit_190(N, ARM::ADJCALLSTACKUP);
        return Result;
      }
    }
  }

  // Pattern: (ARMcallseq_end:isVoid (imm:i32):$amt1, (imm:i32):$amt2)
  // Emits: (tADJCALLSTACKUP:isVoid (imm:i32):$amt1, (imm:i32):$amt2)
  // Pattern complexity = 9  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDValue N2 = N->getOperand(2);
      if (N2.getNode()->getOpcode() == ISD::Constant) {
        SDNode *Result = Emit_191(N, ARM::tADJCALLSTACKUP);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_192(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 4);
  Chain = SDValue(ResNode, 0);
  SDValue InFlag(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_193(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Tmp0, Chain);
  Chain = SDValue(ResNode, 0);
  SDValue InFlag(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ISD_CALLSEQ_START(SDNode *N) {

  // Pattern: (ARMcallseq_start:isVoid (timm:i32):$amt)
  // Emits: (ADJCALLSTACKDOWN:isVoid (timm:i32):$amt)
  // Pattern complexity = 6  cost = 1  size = 0
  {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetConstant) {
      SDNode *Result = Emit_192(N, ARM::ADJCALLSTACKDOWN);
      return Result;
    }
  }

  // Pattern: (ARMcallseq_start:isVoid (imm:i32):$amt)
  // Emits: (tADJCALLSTACKDOWN:isVoid (imm:i32):$amt)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_193(N, ARM::tADJCALLSTACKDOWN);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_CTLZ_i32(SDNode *N) {

  // Pattern: (ctlz:i32 GPR:i32:$src)
  // Emits: (CLZ:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TOps())) {
    SDNode *Result = Emit_31(N, ARM::CLZ, MVT::i32);
    return Result;
  }

  // Pattern: (ctlz:i32 GPR:i32:$src)
  // Emits: (t2CLZ:i32 GPR:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_31(N, ARM::t2CLZ, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_194(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_195(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0, Tmp1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_196(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = Transform_so_imm_not_XFORM(Tmp0.getNode());
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_197(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_198(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp1 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_thumb_immshifted_val(Tmp2.getNode());
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp1, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, Ops0, 4), 0);
  SDValue Tmp7 = Transform_thumb_immshifted_shamt(Tmp2.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp0, Tmp6, Tmp7, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_199(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp1 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_imm_comp_XFORM(Tmp2.getNode());
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp1, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, Ops0, 4), 0);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp0, Tmp6, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 4);
}
DISABLE_INLINE SDNode *Emit_200(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = Transform_t2_so_imm_not_XFORM(Tmp0.getNode());
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_Constant_i32(SDNode *N) {

  // Pattern: (imm:i32)<<P:Predicate_t2_so_imm>>:$src
  // Emits: (t2MOVi:i32 (imm:i32):$src)
  // Pattern complexity = 5  cost = 1  size = 0
  if ((Subtarget->isThumb2()) &&
      Predicate_t2_so_imm(N)) {
    SDNode *Result = Emit_194(N, ARM::t2MOVi, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32)<<P:Predicate_so_imm>>:$src
  // Emits: (MOVi:i32 (imm:i32):$src)
  // Pattern complexity = 4  cost = 1  size = 0
  if ((!Subtarget->isThumb()) &&
      Predicate_so_imm(N)) {
    SDNode *Result = Emit_194(N, ARM::MOVi, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32)<<P:Predicate_imm0_65535>>:$src
  // Emits: (MOVi16:i32 (imm:i32):$src)
  // Pattern complexity = 4  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops()) &&
      Predicate_imm0_65535(N)) {
    SDNode *Result = Emit_195(N, ARM::MOVi16, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32)<<P:Predicate_so_imm_not>><<X:so_imm_not_XFORM>>:$imm
  // Emits: (MVNi:i32 (so_imm_not_XFORM:i32 (imm:i32):$imm))
  // Pattern complexity = 4  cost = 1  size = 0
  if ((!Subtarget->isThumb()) &&
      Predicate_so_imm_not(N)) {
    SDNode *Result = Emit_196(N, ARM::MVNi, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32)<<P:Predicate_so_imm2part>>:$src
  // Emits: (MOVi2pieces:i32 (imm:i32):$src)
  // Pattern complexity = 4  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!Subtarget->hasV6T2Ops()) &&
      Predicate_so_imm2part(N)) {
    SDNode *Result = Emit_195(N, ARM::MOVi2pieces, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32)<<P:Predicate_imm0_255>>:$src
  // Emits: (tMOVi8:i32 (imm:i32):$src)
  // Pattern complexity = 4  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) &&
      Predicate_imm0_255(N)) {
    SDNode *Result = Emit_197(N, ARM::tMOVi8, MVT::i32);
    return Result;
  }
  if ((Subtarget->isThumb2())) {

    // Pattern: (imm:i32)<<P:Predicate_imm0_65535>>:$src
    // Emits: (t2MOVi16:i32 (imm:i32):$src)
    // Pattern complexity = 4  cost = 1  size = 0
    if (Predicate_imm0_65535(N)) {
      SDNode *Result = Emit_195(N, ARM::t2MOVi16, MVT::i32);
      return Result;
    }

    // Pattern: (imm:i32)<<P:Predicate_t2_so_imm_not>><<X:t2_so_imm_not_XFORM>>:$src
    // Emits: (t2MVNi:i32 (t2_so_imm_not_XFORM:i32 (imm:i32)<<P:Predicate_t2_so_imm_not>>:$src))
    // Pattern complexity = 4  cost = 1  size = 0
    if (Predicate_t2_so_imm_not(N)) {
      SDNode *Result = Emit_200(N, ARM::t2MVNi, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {

    // Pattern: (imm:i32)<<P:Predicate_thumb_immshifted>>:$src
    // Emits: (tLSLri:i32 (tMOVi8:i32 (thumb_immshifted_val:i32 (imm:i32):$src)), (thumb_immshifted_shamt:i32 (imm:i32):$src))
    // Pattern complexity = 4  cost = 2  size = 0
    if (Predicate_thumb_immshifted(N)) {
      SDNode *Result = Emit_198(N, ARM::tMOVi8, ARM::tLSLri, MVT::i32, MVT::i32);
      return Result;
    }

    // Pattern: (imm:i32)<<P:Predicate_imm0_255_comp>>:$src
    // Emits: (tMVN:i32 (tMOVi8:i32 (imm_comp_XFORM:i32 (imm:i32):$src)))
    // Pattern complexity = 4  cost = 2  size = 0
    if (Predicate_imm0_255_comp(N)) {
      SDNode *Result = Emit_199(N, ARM::tMOVi8, ARM::tMVN, MVT::i32, MVT::i32);
      return Result;
    }
  }

  // Pattern: (imm:i32):$src
  // Emits: (MOVi32imm:i32 (imm:i32):$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops())) {
    SDNode *Result = Emit_195(N, ARM::MOVi32imm, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32):$src
  // Emits: (t2MOVi32imm:i32 (imm:i32):$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_195(N, ARM::t2MOVi32imm, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_201(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstantFP(*cast<ConstantFPSDNode>(N)->getConstantFPValue(), cast<ConstantFPSDNode>(N)->getValueType(0));
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0, Tmp1, Tmp2);
}
SDNode *Select_ISD_ConstantFP_f32(SDNode *N) {
  if ((Subtarget->hasVFP3()) &&
      Predicate_vfp_f32imm(N)) {
    SDNode *Result = Emit_201(N, ARM::FCONSTS, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ConstantFP_f64(SDNode *N) {
  if ((Subtarget->hasVFP3()) &&
      Predicate_vfp_f64imm(N)) {
    SDNode *Result = Emit_201(N, ARM::FCONSTD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_EXTRACT_VECTOR_ELT_i32(SDNode *N) {

  // Pattern: (extractelt:i32 DPR:v2i32:$src, (imm:iPTR):$lane)
  // Emits: (VGETLNi32:i32 DPR:v2i32:$src, (imm:i32):$lane)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_35(N, ARM::VGETLNi32, MVT::i32);
      return Result;
    }
  }

  // Pattern: (extractelt:i32 QPR:v4i32:$src, (imm:iPTR):$lane)
  // Emits: (VGETLNi32:i32 (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
  // Pattern complexity = 6  cost = 2  size = 0
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v4i32) {
    SDNode *Result = Emit_48(N, TargetOpcode::EXTRACT_SUBREG, ARM::VGETLNi32, MVT::v2i32, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_202(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(ARM::DPR_VFP2RegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_SSubReg_f32_reg(Tmp3.getNode());
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2, Tmp4);
}
DISABLE_INLINE SDNode *Emit_203(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(ARM::QPR_VFP2RegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = Transform_SSubReg_f32_reg(Tmp3.getNode());
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2, Tmp4);
}
SDNode *Select_ISD_EXTRACT_VECTOR_ELT_f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant) {

    // Pattern: (extractelt:f32 DPR:v2f32:$src1, (imm:iPTR):$src2)
    // Emits: (EXTRACT_SUBREG:f32 (COPY_TO_REGCLASS:v2f32 DPR:v2f32:$src1, DPR_VFP2:f64), (SSubReg_f32_reg:i32 (imm:i32):$src2))
    // Pattern complexity = 6  cost = 2  size = 0
    if (N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_202(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f32);
      return Result;
    }

    // Pattern: (extractelt:f32 QPR:v4f32:$src1, (imm:iPTR):$src2)
    // Emits: (EXTRACT_SUBREG:f32 (COPY_TO_REGCLASS:v4f32 QPR:v4f32:$src1, QPR_VFP2:v16i8), (SSubReg_f32_reg:i32 (imm:i32):$src2))
    // Pattern complexity = 6  cost = 2  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_203(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, MVT::v4f32, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_204(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = Transform_DSubReg_f64_reg(Tmp1.getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2);
}
SDNode *Select_ISD_EXTRACT_VECTOR_ELT_f64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_204(N, TargetOpcode::EXTRACT_SUBREG, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FABS_f32(SDNode *N) {

  // Pattern: (fabs:f32 SPR:f32:$a)
  // Emits: (VABSS:f32 SPR:f32:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_31(N, ARM::VABSS, MVT::f32);
    return Result;
  }

  // Pattern: (fabs:f32 SPR:f32:$a)
  // Emits: (EXTRACT_SUBREG:f32 (VABSfd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 4  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_32(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VABSfd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FABS_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_31(N, ARM::VABSD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_205(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N000, N001, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_206(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, unsigned Opc3, unsigned Opc4, unsigned Opc5, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2, MVT::SimpleValueType VT3, MVT::SimpleValueType VT4, MVT::SimpleValueType VT5) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp0, N0, Tmp2), 0);
  SDValue Tmp4(CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp7(CurDAG->getMachineNode(Opc3, N->getDebugLoc(), VT3, Tmp4, N1, Tmp6), 0);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops4[] = { Tmp3, Tmp7, Tmp8, Tmp9 };
  SDValue Tmp10(CurDAG->getMachineNode(Opc4, N->getDebugLoc(), VT4, Ops4, 4), 0);
  SDValue Tmp11 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc5, VT5, Tmp10, Tmp11);
}
DISABLE_INLINE SDNode *Emit_207(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N100, N101, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_FADD_f32(SDNode *N) {
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (fadd:f32 (fneg:f32 (fmul:f32 SPR:f32:$a, SPR:f32:$b)), SPR:f32:$dstin)
      // Emits: (VMLSS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::FNEG) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::FMUL) {
          SDNode *Result = Emit_205(N, ARM::VMLSS, MVT::f32);
          return Result;
        }
      }

      // Pattern: (fadd:f32 SPR:f32:$dstin, (fneg:f32 (fmul:f32 SPR:f32:$a, SPR:f32:$b)))
      // Emits: (VMLSS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
      // Pattern complexity = 9  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::FNEG) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::FMUL) {
            SDNode *Result = Emit_207(N, ARM::VMLSS, MVT::f32);
            return Result;
          }
        }
      }

      // Pattern: (fadd:f32 (fmul:f32 SPR:f32:$a, SPR:f32:$b), SPR:f32:$dstin)
      // Emits: (VMLAS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAS, MVT::f32);
        return Result;
      }

      // Pattern: (fadd:f32 SPR:f32:$dstin, (fmul:f32 SPR:f32:$a, SPR:f32:$b))
      // Emits: (VMLAS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
      // Pattern complexity = 6  cost = 1  size = 0
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_125(N, ARM::VMLAS, MVT::f32);
        return Result;
      }
    }

    // Pattern: (fadd:f32 SPR:f32:$a, SPR:f32:$b)
    // Emits: (VADDS:f32 SPR:f32:$a, SPR:f32:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDS, MVT::f32);
    return Result;
  }

  // Pattern: (fadd:f32 SPR:f32:$a, SPR:f32:$b)
  // Emits: (EXTRACT_SUBREG:f32 (VADDfd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32), (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$b, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 6  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_206(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VADDfd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FADD_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (fadd:f64 (fneg:f64 (fmul:f64 DPR:f64:$a, DPR:f64:$b)), DPR:f64:$dstin)
      // Emits: (VMLSD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::FNEG) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::FMUL) {
          SDNode *Result = Emit_205(N, ARM::VMLSD, MVT::f64);
          return Result;
        }
      }

      // Pattern: (fadd:f64 DPR:f64:$dstin, (fneg:f64 (fmul:f64 DPR:f64:$a, DPR:f64:$b)))
      // Emits: (VMLSD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
      // Pattern complexity = 9  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::FNEG) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::FMUL) {
            SDNode *Result = Emit_207(N, ARM::VMLSD, MVT::f64);
            return Result;
          }
        }
      }

      // Pattern: (fadd:f64 (fmul:f64 DPR:f64:$a, DPR:f64:$b), DPR:f64:$dstin)
      // Emits: (VMLAD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAD, MVT::f64);
        return Result;
      }

      // Pattern: (fadd:f64 DPR:f64:$dstin, (fmul:f64 DPR:f64:$a, DPR:f64:$b))
      // Emits: (VMLAD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
      // Pattern complexity = 6  cost = 1  size = 0
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_125(N, ARM::VMLAD, MVT::f64);
        return Result;
      }
    }

    // Pattern: (fadd:f64 DPR:f64:$a, DPR:f64:$b)
    // Emits: (VADDD:f64 DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FADD_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::FMUL) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (fadd:v2f32 DPR:v2f32:$src1, (fmul:v2f32 DPR:v2f32:$src2, (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane)))
          // Emits: (VMLAslfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              if (N111.getNode()->getOpcode() == ISD::Constant &&
                  N110.getValueType() == MVT::v2f32) {
                SDNode *Result = Emit_129(N, ARM::VMLAslfd, MVT::v2f32);
                return Result;
              }
            }
          }

          // Pattern: (fadd:v2f32 DPR:v2f32:$src1, (fmul:v2f32 (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane), DPR:v2f32:$src2))
          // Emits: (VMLAslfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N100.getValueType() == MVT::v2f32) {
                SDNode *Result = Emit_130(N, ARM::VMLAslfd, MVT::v2f32);
                return Result;
              }
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::FMUL) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (fadd:v2f32 (fmul:v2f32 DPR:v2f32:$src2, (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane)), DPR:v2f32:$src1)
        // Emits: (VMLAslfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N011 = N01.getNode()->getOperand(1);
            if (N011.getNode()->getOpcode() == ISD::Constant) {
              SDValue N1 = N->getOperand(1);
              if (N010.getValueType() == MVT::v2f32) {
                SDNode *Result = Emit_131(N, ARM::VMLAslfd, MVT::v2f32);
                return Result;
              }
            }
          }
        }

        // Pattern: (fadd:v2f32 (fmul:v2f32 (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane), DPR:v2f32:$src2), DPR:v2f32:$src1)
        // Emits: (VMLAslfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N000.getValueType() == MVT::v2f32) {
              SDNode *Result = Emit_132(N, ARM::VMLAslfd, MVT::v2f32);
              return Result;
            }
          }
        }
      }

      // Pattern: (fadd:v2f32 DPR:v2f32:$src1, (fmul:v2f32 DPR:v2f32:$src2, DPR:v2f32:$src3))
      // Emits: (VMLAfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR:v2f32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::FMUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (fadd:v2f32 (fmul:v2f32 DPR:v2f32:$src2, DPR:v2f32:$src3), DPR:v2f32:$src1)
      // Emits: (VMLAfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR:v2f32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAfd, MVT::v2f32);
        return Result;
      }
    }

    // Pattern: (fadd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Emits: (VADDfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDfd, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FADD_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::FMUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (fadd:v4f32 QPR:v4f32:$src1, (fmul:v4f32 QPR:v4f32:$src2, (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane)))
        // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v2f32) {
              SDNode *Result = Emit_129(N, ARM::VMLAslfq, MVT::v4f32);
              return Result;
            }
          }
        }

        // Pattern: (fadd:v4f32 QPR:v4f32:$src1, (fmul:v4f32 (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane), QPR:v4f32:$src2))
        // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v2f32) {
              SDNode *Result = Emit_130(N, ARM::VMLAslfq, MVT::v4f32);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::FMUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (fadd:v4f32 (fmul:v4f32 QPR:v4f32:$src2, (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane)), QPR:v4f32:$src1)
      // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          if (N011.getNode()->getOpcode() == ISD::Constant) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v2f32) {
              SDNode *Result = Emit_131(N, ARM::VMLAslfq, MVT::v4f32);
              return Result;
            }
          }
        }
      }

      // Pattern: (fadd:v4f32 (fmul:v4f32 (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane), QPR:v4f32:$src2), QPR:v4f32:$src1)
      // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v2f32) {
            SDNode *Result = Emit_132(N, ARM::VMLAslfq, MVT::v4f32);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::FMUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (fadd:v4f32 QPR:v4f32:$src1, (fmul:v4f32 QPR:v4f32:$src2, (NEONvduplane:v4f32 QPR:v4f32:$src3, (imm:i32):$lane)))
        // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
        // Pattern complexity = 12  cost = 2  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_137(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslfq, MVT::v2f32, MVT::v4f32);
              return Result;
            }
          }
        }

        // Pattern: (fadd:v4f32 QPR:v4f32:$src1, (fmul:v4f32 (NEONvduplane:v4f32 QPR:v4f32:$src3, (imm:i32):$lane), QPR:v4f32:$src2))
        // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
        // Pattern complexity = 12  cost = 2  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_138(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslfq, MVT::v2f32, MVT::v4f32);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::FMUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (fadd:v4f32 (fmul:v4f32 QPR:v4f32:$src2, (NEONvduplane:v4f32 QPR:v4f32:$src3, (imm:i32):$lane)), QPR:v4f32:$src1)
      // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N011 = N01.getNode()->getOperand(1);
          if (N011.getNode()->getOpcode() == ISD::Constant) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_139(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslfq, MVT::v2f32, MVT::v4f32);
              return Result;
            }
          }
        }
      }

      // Pattern: (fadd:v4f32 (fmul:v4f32 (NEONvduplane:v4f32 QPR:v4f32:$src3, (imm:i32):$lane), QPR:v4f32:$src2), QPR:v4f32:$src1)
      // Emits: (VMLAslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      if (N00.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_140(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLAslfq, MVT::v2f32, MVT::v4f32);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (fadd:v4f32 QPR:v4f32:$src1, (fmul:v4f32 QPR:v4f32:$src2, QPR:v4f32:$src3))
      // Emits: (VMLAfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, QPR:v4f32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::FMUL) {
          SDNode *Result = Emit_125(N, ARM::VMLAfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (fadd:v4f32 (fmul:v4f32 QPR:v4f32:$src2, QPR:v4f32:$src3), QPR:v4f32:$src1)
      // Emits: (VMLAfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, QPR:v4f32:$src3)
      // Pattern complexity = 6  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_127(N, ARM::VMLAfq, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (fadd:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Emits: (VADDfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VADDfq, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FDIV_f32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_44(N, ARM::VDIVS, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FDIV_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_44(N, ARM::VDIVD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_208(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_209(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N0, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_FMUL_f32(SDNode *N) {
  if ((!HonorSignDependentRoundingFPMath())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:f32 (fneg:f32 SPR:f32:$a), SPR:f32:$b)
    // Emits: (VNMULS:f32 SPR:f32:$a, SPR:f32:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::FNEG) {
      SDNode *Result = Emit_208(N, ARM::VNMULS, MVT::f32);
      return Result;
    }

    // Pattern: (fmul:f32 SPR:f32:$b, (fneg:f32 SPR:f32:$a))
    // Emits: (VNMULS:f32 SPR:f32:$a, SPR:f32:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::FNEG) {
      SDNode *Result = Emit_209(N, ARM::VNMULS, MVT::f32);
      return Result;
    }
  }

  // Pattern: (fmul:f32 SPR:f32:$a, SPR:f32:$b)
  // Emits: (VMULS:f32 SPR:f32:$a, SPR:f32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_44(N, ARM::VMULS, MVT::f32);
    return Result;
  }

  // Pattern: (fmul:f32 SPR:f32:$a, SPR:f32:$b)
  // Emits: (EXTRACT_SUBREG:f32 (VMULfd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32), (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$b, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 6  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_206(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VMULfd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FMUL_f64(SDNode *N) {
  if ((!HonorSignDependentRoundingFPMath())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:f64 (fneg:f64 DPR:f64:$a), DPR:f64:$b)
    // Emits: (VNMULD:f64 DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::FNEG) {
      SDNode *Result = Emit_208(N, ARM::VNMULD, MVT::f64);
      return Result;
    }

    // Pattern: (fmul:f64 DPR:f64:$b, (fneg:f64 DPR:f64:$a))
    // Emits: (VNMULD:f64 DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::FNEG) {
      SDNode *Result = Emit_209(N, ARM::VNMULD, MVT::f64);
      return Result;
    }
  }

  // Pattern: (fmul:f64 DPR:f64:$a, DPR:f64:$b)
  // Emits: (VMULD:f64 DPR:f64:$a, DPR:f64:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_44(N, ARM::VMULD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FMUL_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (fmul:v2f32 DPR:v2f32:$src1, (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src2, (imm:i32):$lane))
      // Emits: (VMULslfd:v2f32 DPR:v2f32:$src1, DPR_VFP2:v2f32:$src2, (imm:i32):$lane)
      // Pattern complexity = 9  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N10.getValueType() == MVT::v2f32) {
            SDNode *Result = Emit_126(N, ARM::VMULslfd, MVT::v2f32);
            return Result;
          }
        }
      }

      // Pattern: (fmul:v2f32 (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src2, (imm:i32):$lane), DPR:v2f32:$src1)
      // Emits: (VMULslfd:v2f32 DPR:v2f32:$src1, DPR_VFP2:v2f32:$src2, (imm:i32):$lane)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDValue N1 = N->getOperand(1);
          if (N00.getValueType() == MVT::v2f32) {
            SDNode *Result = Emit_128(N, ARM::VMULslfd, MVT::v2f32);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Emits: (VMULfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VMULfd, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_210(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i32_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N10, Tmp3), 0);
  SDValue Tmp5 = Transform_SubReg_i32_lane(Tmp2.getNode());
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N0, Tmp4, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_211(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i32_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp3), 0);
  SDValue Tmp5 = Transform_SubReg_i32_lane(Tmp2.getNode());
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, Tmp4, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
SDNode *Select_ISD_FMUL_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:v4f32 QPR:v4f32:$src1, (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src2, (imm:i32):$lane))
    // Emits: (VMULslfq:v4f32 QPR:v4f32:$src1, DPR_VFP2:v2f32:$src2, (imm:i32):$lane)
    // Pattern complexity = 9  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            N10.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_126(N, ARM::VMULslfq, MVT::v4f32);
          return Result;
        }
      }
    }

    // Pattern: (fmul:v4f32 (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src2, (imm:i32):$lane), QPR:v4f32:$src1)
    // Emits: (VMULslfq:v4f32 QPR:v4f32:$src1, DPR_VFP2:v2f32:$src2, (imm:i32):$lane)
    // Pattern complexity = 9  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        SDValue N1 = N->getOperand(1);
        if (N00.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_128(N, ARM::VMULslfq, MVT::v4f32);
          return Result;
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:v4f32 QPR:v4f32:$src1, (NEONvduplane:v4f32 QPR:v4f32:$src2, (imm:i32):$lane))
    // Emits: (VMULslfq:v4f32 QPR:v4f32:$src1, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 9  cost = 2  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            N10.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_210(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMULslfq, MVT::v2f32, MVT::v4f32);
          return Result;
        }
      }
    }

    // Pattern: (fmul:v4f32 (NEONvduplane:v4f32 QPR:v4f32:$src2, (imm:i32):$lane), QPR:v4f32:$src1)
    // Emits: (VMULslfq:v4f32 QPR:v4f32:$src1, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 9  cost = 2  size = 0
    if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        SDValue N1 = N->getOperand(1);
        if (N00.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_211(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMULslfq, MVT::v2f32, MVT::v4f32);
          return Result;
        }
      }
    }
  }

  // Pattern: (fmul:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
  // Emits: (VMULfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VMULfq, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_212(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_FNEG_f32(SDNode *N) {

  // Pattern: (fneg:f32 (fmul:f32 SPR:f32:$a, SPR:f32:$b))
  // Emits: (VNMULS:f32 SPR:f32:$a, SPR:f32:$b)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::FMUL) {
      SDNode *Result = Emit_212(N, ARM::VNMULS, MVT::f32);
      return Result;
    }
  }

  // Pattern: (fneg:f32 SPR:f32:$a)
  // Emits: (VNEGS:f32 SPR:f32:$a)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_31(N, ARM::VNEGS, MVT::f32);
    return Result;
  }

  // Pattern: (fneg:f32 SPR:f32:$a)
  // Emits: (EXTRACT_SUBREG:f32 (VNEGf32d_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 4  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_32(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VNEGf32d_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FNEG_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {

    // Pattern: (fneg:f64 (fmul:f64 DPR:f64:$a, DPR:f64:$b))
    // Emits: (VNMULD:f64 DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_212(N, ARM::VNMULD, MVT::f64);
        return Result;
      }
    }

    // Pattern: (fneg:f64 DPR:f64:$a)
    // Emits: (VNEGD:f64 DPR:f64:$a)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_31(N, ARM::VNEGD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FNEG_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VNEGf32d, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FNEG_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_31(N, ARM::VNEGf32q, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_EXTEND_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_31(N, ARM::VCVTDS, MVT::f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_ROUND_f32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_31(N, ARM::VCVTSD, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_SINT_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_31(N, ARM::VCVTf2sd, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_SINT_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_31(N, ARM::VCVTf2sq, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_UINT_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v2f32) {
      SDNode *Result = Emit_31(N, ARM::VCVTf2ud, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_UINT_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_31(N, ARM::VCVTf2uq, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSQRT_f32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_31(N, ARM::VSQRTS, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSQRT_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_31(N, ARM::VSQRTD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_f32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fsub:f32 (fneg:f32 (fmul:f32 SPR:f32:$a, SPR:f32:$b)), SPR:f32:$dstin)
    // Emits: (VNMLAS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
    // Pattern complexity = 9  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::FNEG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_205(N, ARM::VNMLAS, MVT::f32);
        return Result;
      }
    }

    // Pattern: (fsub:f32 (fmul:f32 SPR:f32:$a, SPR:f32:$b), SPR:f32:$dstin)
    // Emits: (VNMLSS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::FMUL) {
      SDNode *Result = Emit_127(N, ARM::VNMLSS, MVT::f32);
      return Result;
    }
  }

  // Pattern: (fsub:f32 SPR:f32:$dstin, (fmul:f32 SPR:f32:$a, SPR:f32:$b))
  // Emits: (VMLSS:f32 SPR:f32:$dstin, SPR:f32:$a, SPR:f32:$b)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->useNEONForSinglePrecisionFP())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::FMUL) {
      SDNode *Result = Emit_125(N, ARM::VMLSS, MVT::f32);
      return Result;
    }
  }

  // Pattern: (fsub:f32 SPR:f32:$a, SPR:f32:$b)
  // Emits: (VSUBS:f32 SPR:f32:$a, SPR:f32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2()) && (!Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_44(N, ARM::VSUBS, MVT::f32);
    return Result;
  }

  // Pattern: (fsub:f32 SPR:f32:$a, SPR:f32:$b)
  // Emits: (EXTRACT_SUBREG:f32 (VSUBfd_sfp:f64 (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$a, 1:i32), (INSERT_SUBREG:f64 (IMPLICIT_DEF:v2f32), SPR:f32:$b, 1:i32)), 1:i32)
  // Pattern complexity = 3  cost = 6  size = 0
  if ((Subtarget->hasNEON()) && (Subtarget->useNEONForSinglePrecisionFP())) {
    SDNode *Result = Emit_206(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, ARM::VSUBfd_sfp, TargetOpcode::EXTRACT_SUBREG, MVT::v2f32, MVT::f64, MVT::v2f32, MVT::f64, MVT::f64, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fsub:f64 (fneg:f64 (fmul:f64 DPR:f64:$a, DPR:f64:$b)), DPR:f64:$dstin)
    // Emits: (VNMLAD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 9  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::FNEG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_205(N, ARM::VNMLAD, MVT::f64);
        return Result;
      }
    }

    // Pattern: (fsub:f64 (fmul:f64 DPR:f64:$a, DPR:f64:$b), DPR:f64:$dstin)
    // Emits: (VNMLSD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::FMUL) {
      SDNode *Result = Emit_127(N, ARM::VNMLSD, MVT::f64);
      return Result;
    }
  }

  // Pattern: (fsub:f64 DPR:f64:$dstin, (fmul:f64 DPR:f64:$a, DPR:f64:$b))
  // Emits: (VMLSD:f64 DPR:f64:$dstin, DPR:f64:$a, DPR:f64:$b)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->useNEONForSinglePrecisionFP())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::FMUL) {
      SDNode *Result = Emit_125(N, ARM::VMLSD, MVT::f64);
      return Result;
    }
  }

  // Pattern: (fsub:f64 DPR:f64:$a, DPR:f64:$b)
  // Emits: (VSUBD:f64 DPR:f64:$a, DPR:f64:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasVFP2())) {
    SDNode *Result = Emit_44(N, ARM::VSUBD, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::FMUL) {
        {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (fsub:v2f32 DPR:v2f32:$src1, (fmul:v2f32 DPR:v2f32:$src2, (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane)))
          // Emits: (VMLSslfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
              SDValue N110 = N11.getNode()->getOperand(0);
              SDValue N111 = N11.getNode()->getOperand(1);
              if (N111.getNode()->getOpcode() == ISD::Constant &&
                  N110.getValueType() == MVT::v2f32) {
                SDNode *Result = Emit_129(N, ARM::VMLSslfd, MVT::v2f32);
                return Result;
              }
            }
          }

          // Pattern: (fsub:v2f32 DPR:v2f32:$src1, (fmul:v2f32 (NEONvduplane:v2f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane), DPR:v2f32:$src2))
          // Emits: (VMLSslfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
          // Pattern complexity = 12  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N100.getValueType() == MVT::v2f32) {
                SDNode *Result = Emit_130(N, ARM::VMLSslfd, MVT::v2f32);
                return Result;
              }
            }
          }
        }

        // Pattern: (fsub:v2f32 DPR:v2f32:$src1, (fmul:v2f32 DPR:v2f32:$src2, DPR:v2f32:$src3))
        // Emits: (VMLSfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2, DPR:v2f32:$src3)
        // Pattern complexity = 6  cost = 1  size = 0
        SDNode *Result = Emit_125(N, ARM::VMLSfd, MVT::v2f32);
        return Result;
      }
    }

    // Pattern: (fsub:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Emits: (VSUBfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBfd, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::FMUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (fsub:v4f32 QPR:v4f32:$src1, (fmul:v4f32 QPR:v4f32:$src2, (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane)))
      // Emits: (VMLSslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          if (N111.getNode()->getOpcode() == ISD::Constant &&
              N110.getValueType() == MVT::v2f32) {
            SDNode *Result = Emit_129(N, ARM::VMLSslfq, MVT::v4f32);
            return Result;
          }
        }
      }

      // Pattern: (fsub:v4f32 QPR:v4f32:$src1, (fmul:v4f32 (NEONvduplane:v4f32 DPR_VFP2:v2f32:$src3, (imm:i32):$lane), QPR:v4f32:$src2))
      // Emits: (VMLSslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, DPR_VFP2:v2f32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v2f32) {
            SDNode *Result = Emit_130(N, ARM::VMLSslfq, MVT::v4f32);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::FMUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (fsub:v4f32 QPR:v4f32:$src1, (fmul:v4f32 QPR:v4f32:$src2, (NEONvduplane:v4f32 QPR:v4f32:$src3, (imm:i32):$lane)))
      // Emits: (VMLSslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          if (N111.getNode()->getOpcode() == ISD::Constant &&
              N110.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_137(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLSslfq, MVT::v2f32, MVT::v4f32);
            return Result;
          }
        }
      }

      // Pattern: (fsub:v4f32 QPR:v4f32:$src1, (fmul:v4f32 (NEONvduplane:v4f32 QPR:v4f32:$src3, (imm:i32):$lane), QPR:v4f32:$src2))
      // Emits: (VMLSslfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, (EXTRACT_SUBREG:v2f32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_138(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLSslfq, MVT::v2f32, MVT::v4f32);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (fsub:v4f32 QPR:v4f32:$src1, (fmul:v4f32 QPR:v4f32:$src2, QPR:v4f32:$src3))
    // Emits: (VMLSfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2, QPR:v4f32:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::FMUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSfq, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (fsub:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Emits: (VSUBfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBfq, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_INSERT_VECTOR_ELT_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_50(N, ARM::VSETLNi8, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_213(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i8_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp3), 0);
  SDValue Tmp6 = Transform_SubReg_i8_lane(Tmp2.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp4, N1, Tmp6, Tmp7, Tmp8 };
  SDValue Tmp9(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Ops1, 5), 0);
  SDValue Tmp10 = Transform_DSubReg_i8_reg(Tmp2.getNode());
  return CurDAG->SelectNodeTo(N, Opc2, VT2, N0, Tmp9, Tmp10);
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v16i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i32) {
    SDNode *Result = Emit_213(N, TargetOpcode::EXTRACT_SUBREG, ARM::VSETLNi8, TargetOpcode::INSERT_SUBREG, MVT::v8i8, MVT::f64, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_INSERT_VECTOR_ELT_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_50(N, ARM::VSETLNi16, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_214(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i16_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp3), 0);
  SDValue Tmp6 = Transform_SubReg_i16_lane(Tmp2.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp4, N1, Tmp6, Tmp7, Tmp8 };
  SDValue Tmp9(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Ops1, 5), 0);
  SDValue Tmp10 = Transform_DSubReg_i16_reg(Tmp2.getNode());
  return CurDAG->SelectNodeTo(N, Opc2, VT2, N0, Tmp9, Tmp10);
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v8i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i32) {
    SDNode *Result = Emit_214(N, TargetOpcode::EXTRACT_SUBREG, ARM::VSETLNi16, TargetOpcode::INSERT_SUBREG, MVT::v4i16, MVT::f64, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_INSERT_VECTOR_ELT_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_50(N, ARM::VSETLNi32, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_215(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i32_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp3), 0);
  SDValue Tmp6 = Transform_SubReg_i32_lane(Tmp2.getNode());
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp4, N1, Tmp6, Tmp7, Tmp8 };
  SDValue Tmp9(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Ops1, 5), 0);
  SDValue Tmp10 = Transform_DSubReg_i32_reg(Tmp2.getNode());
  return CurDAG->SelectNodeTo(N, Opc2, VT2, N0, Tmp9, Tmp10);
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v4i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDNode *Result = Emit_215(N, TargetOpcode::EXTRACT_SUBREG, ARM::VSETLNi32, TargetOpcode::INSERT_SUBREG, MVT::v2i32, MVT::f64, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_216(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp1 = CurDAG->getTargetConstant(ARM::DPR_VFP2RegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = Transform_SSubReg_f32_reg(Tmp4.getNode());
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2, N1, Tmp5);
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v2f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDNode *Result = Emit_216(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::INSERT_SUBREG, MVT::v2f32, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_217(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp1 = CurDAG->getTargetConstant(ARM::QPR_VFP2RegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = Transform_SSubReg_f32_reg(Tmp4.getNode());
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2, N1, Tmp5);
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v4f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDNode *Result = Emit_217(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::INSERT_SUBREG, MVT::v4f32, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_218(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_f64_reg(Tmp2.getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, Tmp3);
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v2f64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDNode *Result = Emit_218(N, TargetOpcode::INSERT_SUBREG, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_219(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, N3, Tmp4, Tmp5, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
}
SDNode *Select_ISD_INTRINSIC_VOID(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(105)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3)) {
          SDValue N3 = N->getOperand(3);
          if (N2.getValueType() == MVT::i32) {

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, DPR:v8i8:$src)
            // Emits: (VST1d8:isVoid addrmode6:i32:$addr, DPR:v8i8:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v8i8) {
              SDNode *Result = Emit_219(N, ARM::VST1d8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, DPR:v4i16:$src)
            // Emits: (VST1d16:isVoid addrmode6:i32:$addr, DPR:v4i16:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_219(N, ARM::VST1d16, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, DPR:v2i32:$src)
            // Emits: (VST1d32:isVoid addrmode6:i32:$addr, DPR:v2i32:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_219(N, ARM::VST1d32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, DPR:v2f32:$src)
            // Emits: (VST1df:isVoid addrmode6:i32:$addr, DPR:v2f32:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v2f32) {
              SDNode *Result = Emit_219(N, ARM::VST1df, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, DPR:v1i64:$src)
            // Emits: (VST1d64:isVoid addrmode6:i32:$addr, DPR:v1i64:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_219(N, ARM::VST1d64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, QPR:v16i8:$src)
            // Emits: (VST1q8:isVoid addrmode6:i32:$addr, QPR:v16i8:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v16i8) {
              SDNode *Result = Emit_219(N, ARM::VST1q8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, QPR:v8i16:$src)
            // Emits: (VST1q16:isVoid addrmode6:i32:$addr, QPR:v8i16:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_219(N, ARM::VST1q16, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, QPR:v4i32:$src)
            // Emits: (VST1q32:isVoid addrmode6:i32:$addr, QPR:v4i32:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_219(N, ARM::VST1q32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, QPR:v4f32:$src)
            // Emits: (VST1qf:isVoid addrmode6:i32:$addr, QPR:v4f32:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_219(N, ARM::VST1qf, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }

            // Pattern: (intrinsic_void:isVoid 105:iPTR, addrmode6:i32:$addr, QPR:v2i64:$src)
            // Emits: (VST1q64:isVoid addrmode6:i32:$addr, QPR:v2i64:$src)
            // Pattern complexity = 23  cost = 1  size = 0
            if (N3.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_219(N, ARM::VST1q64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
              return Result;
            }
          }
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_220(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N2, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_221(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N2, N3, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_222(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, Tmp3, Tmp4);
}
DISABLE_INLINE SDNode *Emit_223(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue N4 = N->getOperand(4);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N2, N3, N4, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_224(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue N4 = N->getOperand(4);
  SDValue N5 = N->getOperand(5);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N2, N3, N4, N5, Tmp7, Tmp8 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 7);
}
DISABLE_INLINE SDNode *Emit_225(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue N4 = N->getOperand(4);
  SDValue N5 = N->getOperand(5);
  SDValue N6 = N->getOperand(6);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N2, N3, N4, N5, N6, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 8);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i8 28:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VHADDsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(28)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VHADDsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 29:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VHADDuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(29)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VHADDuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 91:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VRHADDsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(91)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VRHADDsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 92:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VRHADDuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(92)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VRHADDuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 64:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQADDsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 65:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQADDuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 16:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VADDHNv8i8:v8i8 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(16)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VADDHNv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 88:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VRADDHNv8i8:v8i8 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(88)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VRADDHNv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 53:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMULpd:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(53)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMULpd, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 30:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VHSUBsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(30)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VHSUBsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 31:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VHSUBuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(31)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VHSUBuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 86:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQSUBsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 87:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQSUBuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 112:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VSUBHNv8i8:v8i8 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(112)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VSUBHNv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 98:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VRSUBHNv8i8:v8i8 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(98)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VRSUBHNv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 9:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VABDsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VABDsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 10:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VABDuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(10)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VABDuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 5:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VABAsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(5)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VABAsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 6:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VABAuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(6)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VABAuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 39:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMAXsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMAXsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 40:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMAXuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(40)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMAXuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 41:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMINsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMINsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 42:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMINuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(42)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMINuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 56:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VPADDi8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(56)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPADDi8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 59:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VPMAXs8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(59)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPMAXs8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 60:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VPMAXu8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(60)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPMAXu8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 61:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VPMINs8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(61)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPMINs8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 62:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VPMINu8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(62)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPMINu8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 103:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VSHLsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 104:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VSHLuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 94:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VRSHLsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 95:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VRSHLuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 83:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQSHLsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 85:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQSHLuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 78:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQRSHLsv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 79:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VQRSHLuv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 11:iPTR, DPR:v8i8:$src)
      // Emits: (VABSv8i8:v8i8 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VABSv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 63:iPTR, DPR:v8i8:$src)
      // Emits: (VQABSv8i8:v8i8 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(63)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VQABSv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 73:iPTR, DPR:v8i8:$src)
      // Emits: (VQNEGv8i8:v8i8 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(73)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VQNEGv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 21:iPTR, DPR:v8i8:$src)
      // Emits: (VCLSv8i8:v8i8 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(21)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VCLSv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 22:iPTR, DPR:v8i8:$src)
      // Emits: (VCLZv8i8:v8i8 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(22)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VCLZv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 23:iPTR, DPR:v8i8:$src)
      // Emits: (VCNTd:v8i8 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(23)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VCNTd, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 49:iPTR, QPR:v8i16:$src)
      // Emits: (VMOVNv8i8:v8i8 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(49)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VMOVNv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 70:iPTR, QPR:v8i16:$src)
      // Emits: (VQMOVNsv8i8:v8i8 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(70)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNsv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 72:iPTR, QPR:v8i16:$src)
      // Emits: (VQMOVNuv8i8:v8i8 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(72)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 71:iPTR, QPR:v8i16:$src)
      // Emits: (VQMOVNsuv8i8:v8i8 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(71)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNsuv8i8, MVT::v8i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 117:iPTR, DPR:v8i8:$tbl1, DPR:v8i8:$src)
      // Emits: (VTBL1:v8i8 DPR:v8i8:$tbl1, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(117)) {
        SDNode *Result = Emit_220(N, ARM::VTBL1, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 118:iPTR, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$src)
      // Emits: (VTBL2:v8i8 DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(118)) {
        SDNode *Result = Emit_221(N, ARM::VTBL2, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 119:iPTR, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$src)
      // Emits: (VTBL3:v8i8 DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(119)) {
        SDNode *Result = Emit_223(N, ARM::VTBL3, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 120:iPTR, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$tbl4, DPR:v8i8:$src)
      // Emits: (VTBL4:v8i8 DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$tbl4, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(120)) {
        SDNode *Result = Emit_224(N, ARM::VTBL4, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 121:iPTR, DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$src)
      // Emits: (VTBX1:v8i8 DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(121)) {
        SDNode *Result = Emit_221(N, ARM::VTBX1, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 122:iPTR, DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$src)
      // Emits: (VTBX2:v8i8 DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(122)) {
        SDNode *Result = Emit_223(N, ARM::VTBX2, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 123:iPTR, DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$src)
      // Emits: (VTBX3:v8i8 DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(123)) {
        SDNode *Result = Emit_224(N, ARM::VTBX3, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 124:iPTR, DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$tbl4, DPR:v8i8:$src)
      // Emits: (VTBX4:v8i8 DPR:v8i8:$orig, DPR:v8i8:$tbl1, DPR:v8i8:$tbl2, DPR:v8i8:$tbl3, DPR:v8i8:$tbl4, DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(124)) {
        SDNode *Result = Emit_225(N, ARM::VTBX4, MVT::v8i8);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 28:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VHADDsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(28)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VHADDsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 29:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VHADDuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(29)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VHADDuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 91:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VRHADDsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(91)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VRHADDsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 92:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VRHADDuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(92)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VRHADDuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 64:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQADDsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 65:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQADDuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 53:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VMULpq:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(53)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VMULpq, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 30:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VHSUBsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(30)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VHSUBsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 31:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VHSUBuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(31)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VHSUBuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 86:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQSUBsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 87:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQSUBuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 9:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VABDsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VABDsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 10:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VABDuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(10)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VABDuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 5:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
      // Emits: (VABAsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(5)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8 &&
            N3.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_221(N, ARM::VABAsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 6:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
      // Emits: (VABAuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(6)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8 &&
            N3.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_221(N, ARM::VABAuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 39:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VMAXsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VMAXsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 40:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VMAXuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(40)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VMAXuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 41:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VMINsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VMINsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 42:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VMINuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(42)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VMINuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 103:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VSHLsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 104:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VSHLuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 94:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VRSHLsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 95:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VRSHLuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 83:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQSHLsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 85:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQSHLuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 78:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQRSHLsv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 79:iPTR, QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Emits: (VQRSHLuv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v16i8 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 11:iPTR, QPR:v16i8:$src)
      // Emits: (VABSv16i8:v16i8 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VABSv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 63:iPTR, QPR:v16i8:$src)
      // Emits: (VQABSv16i8:v16i8 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(63)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VQABSv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 73:iPTR, QPR:v16i8:$src)
      // Emits: (VQNEGv16i8:v16i8 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(73)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VQNEGv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 21:iPTR, QPR:v16i8:$src)
      // Emits: (VCLSv16i8:v16i8 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(21)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VCLSv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 22:iPTR, QPR:v16i8:$src)
      // Emits: (VCLZv16i8:v16i8 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(22)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VCLZv16i8, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 23:iPTR, QPR:v16i8:$src)
      // Emits: (VCNTq:v16i8 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(23)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VCNTq, MVT::v16i8);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_226(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N20 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N21)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N20, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_227(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N2, N10, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i16 68:iPTR, DPR:v4i16:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VQDMULHslv4i16:v4i16 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VQDMULHslv4i16, MVT::v4i16);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 74:iPTR, DPR:v4i16:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VQRDMULHslv4i16:v4i16 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VQRDMULHslv4i16, MVT::v4i16);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 68:iPTR, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane), DPR:v4i16:$src1)
      // Emits: (VQDMULHslv4i16:v4i16 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_227(N, ARM::VQDMULHslv4i16, MVT::v4i16);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 74:iPTR, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane), DPR:v4i16:$src1)
      // Emits: (VQRDMULHslv4i16:v4i16 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_227(N, ARM::VQRDMULHslv4i16, MVT::v4i16);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 28:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VHADDsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(28)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VHADDsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 29:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VHADDuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(29)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VHADDuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 91:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VRHADDsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(91)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VRHADDsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 92:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VRHADDuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(92)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VRHADDuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 64:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQADDsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 65:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQADDuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 16:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VADDHNv4i16:v4i16 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(16)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VADDHNv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 88:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VRADDHNv4i16:v4i16 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(88)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VRADDHNv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 68:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQDMULHv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQDMULHv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 74:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQRDMULHv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQRDMULHv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 30:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VHSUBsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(30)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VHSUBsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 31:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VHSUBuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(31)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VHSUBuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 86:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQSUBsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 87:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQSUBuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 112:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VSUBHNv4i16:v4i16 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(112)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VSUBHNv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 98:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VRSUBHNv4i16:v4i16 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(98)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VRSUBHNv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 9:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VABDsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VABDsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 10:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VABDuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(10)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VABDuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 5:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VABAsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(5)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VABAsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 6:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VABAuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(6)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VABAuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 39:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VMAXsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VMAXsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 40:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VMAXuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(40)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VMAXuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 41:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VMINsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VMINsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 42:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VMINuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(42)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VMINuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 56:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VPADDi16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(56)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPADDi16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 57:iPTR, DPR:v8i8:$src)
      // Emits: (VPADDLsv8i8:v4i16 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(57)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VPADDLsv8i8, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 58:iPTR, DPR:v8i8:$src)
      // Emits: (VPADDLuv8i8:v4i16 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(58)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VPADDLuv8i8, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 54:iPTR, DPR:v4i16:$src1, DPR:v8i8:$src2)
      // Emits: (VPADALsv8i8:v4i16 DPR:v4i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(54)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPADALsv8i8, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 55:iPTR, DPR:v4i16:$src1, DPR:v8i8:$src2)
      // Emits: (VPADALuv8i8:v4i16 DPR:v4i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(55)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VPADALuv8i8, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 59:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VPMAXs16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(59)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPMAXs16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 60:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VPMAXu16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(60)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPMAXu16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 61:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VPMINs16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(61)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPMINs16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 62:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VPMINu16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(62)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPMINu16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 103:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VSHLsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 104:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VSHLuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 94:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VRSHLsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 95:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VRSHLuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 83:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQSHLsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 85:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQSHLuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 78:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQRSHLsv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 79:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQRSHLuv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 11:iPTR, DPR:v4i16:$src)
      // Emits: (VABSv4i16:v4i16 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VABSv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 63:iPTR, DPR:v4i16:$src)
      // Emits: (VQABSv4i16:v4i16 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(63)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VQABSv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 73:iPTR, DPR:v4i16:$src)
      // Emits: (VQNEGv4i16:v4i16 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(73)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VQNEGv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 21:iPTR, DPR:v4i16:$src)
      // Emits: (VCLSv4i16:v4i16 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(21)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VCLSv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 22:iPTR, DPR:v4i16:$src)
      // Emits: (VCLZv4i16:v4i16 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(22)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VCLZv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 49:iPTR, QPR:v4i32:$src)
      // Emits: (VMOVNv4i16:v4i16 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(49)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VMOVNv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 70:iPTR, QPR:v4i32:$src)
      // Emits: (VQMOVNsv4i16:v4i16 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(70)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNsv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 72:iPTR, QPR:v4i32:$src)
      // Emits: (VQMOVNuv4i16:v4i16 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(72)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNuv4i16, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 71:iPTR, QPR:v4i32:$src)
      // Emits: (VQMOVNsuv4i16:v4i16 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(71)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNsuv4i16, MVT::v4i16);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_228(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N20 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N21)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = Transform_DSubReg_i16_reg(Tmp4.getNode());
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N20, Tmp5), 0);
  SDValue Tmp7 = Transform_SubReg_i16_lane(Tmp4.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, Tmp6, Tmp7, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_229(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N2, N1, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_230(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N2, N1, N3, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_231(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = Transform_DSubReg_i16_reg(Tmp4.getNode());
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N10, Tmp5), 0);
  SDValue Tmp7 = Transform_SubReg_i16_lane(Tmp4.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N2, Tmp6, Tmp7, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 68:iPTR, QPR:v8i16:$src1, (NEONvduplane:v8i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VQDMULHslv8i16:v8i16 QPR:v8i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v8i16 &&
              N2.getValueType() == MVT::v8i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VQDMULHslv8i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 74:iPTR, QPR:v8i16:$src1, (NEONvduplane:v8i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VQRDMULHslv8i16:v8i16 QPR:v8i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v8i16 &&
              N2.getValueType() == MVT::v8i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VQRDMULHslv8i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 68:iPTR, (NEONvduplane:v8i16 DPR_8:v4i16:$src2, (imm:i32):$lane), QPR:v8i16:$src1)
      // Emits: (VQDMULHslv8i16:v8i16 QPR:v8i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v8i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_227(N, ARM::VQDMULHslv8i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 74:iPTR, (NEONvduplane:v8i16 DPR_8:v4i16:$src2, (imm:i32):$lane), QPR:v8i16:$src1)
      // Emits: (VQRDMULHslv8i16:v8i16 QPR:v8i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v8i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_227(N, ARM::VQRDMULHslv8i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 68:iPTR, QPR:v8i16:$src1, (NEONvduplane:v8i16 QPR:v8i16:$src2, (imm:i32):$lane))
      // Emits: (VQDMULHslv8i16:v8i16 QPR:v8i16:$src1, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src2, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v8i16 &&
              N2.getValueType() == MVT::v8i16 &&
              N20.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_228(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQDMULHslv8i16, MVT::v4i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 74:iPTR, QPR:v8i16:$src1, (NEONvduplane:v8i16 QPR:v8i16:$src2, (imm:i32):$lane))
      // Emits: (VQRDMULHslv8i16:v8i16 QPR:v8i16:$src1, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src2, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v8i16 &&
              N2.getValueType() == MVT::v8i16 &&
              N20.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_228(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQRDMULHslv8i16, MVT::v4i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 68:iPTR, (NEONvduplane:v8i16 QPR:v8i16:$src2, (imm:i32):$lane), QPR:v8i16:$src1)
      // Emits: (VQDMULHslv8i16:v8i16 QPR:v8i16:$src1, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src2, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v8i16 &&
                N10.getValueType() == MVT::v8i16 &&
                N2.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_231(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQDMULHslv8i16, MVT::v4i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 74:iPTR, (NEONvduplane:v8i16 QPR:v8i16:$src2, (imm:i32):$lane), QPR:v8i16:$src1)
      // Emits: (VQRDMULHslv8i16:v8i16 QPR:v8i16:$src1, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src2, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v8i16 &&
                N10.getValueType() == MVT::v8i16 &&
                N2.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_231(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQRDMULHslv8i16, MVT::v4i16, MVT::v8i16);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 17:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VADDLsv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(17)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VADDLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 18:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VADDLuv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(18)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VADDLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 19:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Emits: (VADDWsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(19)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VADDWsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 20:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Emits: (VADDWuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(20)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VADDWuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 28:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VHADDsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(28)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VHADDsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 29:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VHADDuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(29)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VHADDuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 91:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VRHADDsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(91)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VRHADDsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 92:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VRHADDuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(92)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VRHADDuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 64:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQADDsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 65:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQADDuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 68:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQDMULHv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQDMULHv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 74:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQRDMULHv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQRDMULHv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 51:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMULLsv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMULLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 52:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMULLuv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMULLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 50:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VMULLp:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(50)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VMULLp, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 43:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VMLALsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VMLALsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 44:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VMLALuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VMLALuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 45:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VMLSLsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VMLSLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 46:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VMLSLuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VMLSLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 113:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VSUBLsv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(113)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VSUBLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 114:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VSUBLuv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(114)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VSUBLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 115:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Emits: (VSUBWsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(115)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VSUBWsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 116:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Emits: (VSUBWuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(116)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VSUBWuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 30:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VHSUBsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(30)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VHSUBsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 31:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VHSUBuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(31)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VHSUBuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 86:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQSUBsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 87:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQSUBuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 9:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VABDsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VABDsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 10:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VABDuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(10)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VABDuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 7:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VABDLsv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(7)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VABDLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 8:iPTR, DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Emits: (VABDLuv8i16:v8i16 DPR:v8i8:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(8)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_220(N, ARM::VABDLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 5:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
      // Emits: (VABAsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(5)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16 &&
            N3.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_221(N, ARM::VABAsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 6:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
      // Emits: (VABAuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(6)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16 &&
            N3.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_221(N, ARM::VABAuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 3:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VABALsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(3)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VABALsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 4:iPTR, QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Emits: (VABALuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(4)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i8 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_221(N, ARM::VABALuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 39:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VMAXsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VMAXsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 40:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VMAXuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(40)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VMAXuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 41:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VMINsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VMINsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 42:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VMINuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(42)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VMINuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 57:iPTR, QPR:v16i8:$src)
      // Emits: (VPADDLsv16i8:v8i16 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(57)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VPADDLsv16i8, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 58:iPTR, QPR:v16i8:$src)
      // Emits: (VPADDLuv16i8:v8i16 QPR:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(58)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_222(N, ARM::VPADDLuv16i8, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 54:iPTR, QPR:v8i16:$src1, QPR:v16i8:$src2)
      // Emits: (VPADALsv16i8:v8i16 QPR:v8i16:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(54)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VPADALsv16i8, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 55:iPTR, QPR:v8i16:$src1, QPR:v16i8:$src2)
      // Emits: (VPADALuv16i8:v8i16 QPR:v8i16:$src1, QPR:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(55)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_220(N, ARM::VPADALuv16i8, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 103:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VSHLsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 104:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VSHLuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 94:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VRSHLsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 95:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VRSHLuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 83:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQSHLsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 85:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQSHLuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 78:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQRSHLsv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 79:iPTR, QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Emits: (VQRSHLuv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i16 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 11:iPTR, QPR:v8i16:$src)
      // Emits: (VABSv8i16:v8i16 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VABSv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 63:iPTR, QPR:v8i16:$src)
      // Emits: (VQABSv8i16:v8i16 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(63)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VQABSv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 73:iPTR, QPR:v8i16:$src)
      // Emits: (VQNEGv8i16:v8i16 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(73)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VQNEGv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 21:iPTR, QPR:v8i16:$src)
      // Emits: (VCLSv8i16:v8i16 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(21)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VCLSv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 22:iPTR, QPR:v8i16:$src)
      // Emits: (VCLZv8i16:v8i16 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(22)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VCLZv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 47:iPTR, DPR:v8i8:$src)
      // Emits: (VMOVLsv8i16:v8i16 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(47)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VMOVLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 48:iPTR, DPR:v8i8:$src)
      // Emits: (VMOVLuv8i16:v8i16 DPR:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(48)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_222(N, ARM::VMOVLuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 19:iPTR, DPR:v8i8:$src2, QPR:v8i16:$src1)
      // Emits: (VADDWsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(19)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_229(N, ARM::VADDWsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 20:iPTR, DPR:v8i8:$src2, QPR:v8i16:$src1)
      // Emits: (VADDWuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(20)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_229(N, ARM::VADDWuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 43:iPTR, DPR:v8i8:$src2, QPR:v8i16:$src1, DPR:v8i8:$src3)
      // Emits: (VMLALsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i16 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_230(N, ARM::VMLALsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 44:iPTR, DPR:v8i8:$src2, QPR:v8i16:$src1, DPR:v8i8:$src3)
      // Emits: (VMLALuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i16 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_230(N, ARM::VMLALuv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 45:iPTR, DPR:v8i8:$src2, QPR:v8i16:$src1, DPR:v8i8:$src3)
      // Emits: (VMLSLsv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i16 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_230(N, ARM::VMLSLsv8i16, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 46:iPTR, DPR:v8i8:$src2, QPR:v8i16:$src1, DPR:v8i8:$src3)
      // Emits: (VMLSLuv8i16:v8i16 QPR:v8i16:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v8i8 &&
            N2.getValueType() == MVT::v8i16 &&
            N3.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_230(N, ARM::VMLSLuv8i16, MVT::v8i16);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_232(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 68:iPTR, DPR:v2i32:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VQDMULHslv2i32:v2i32 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VQDMULHslv2i32, MVT::v2i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 74:iPTR, DPR:v2i32:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VQRDMULHslv2i32:v2i32 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VQRDMULHslv2i32, MVT::v2i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 68:iPTR, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), DPR:v2i32:$src1)
      // Emits: (VQDMULHslv2i32:v2i32 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v2i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_227(N, ARM::VQDMULHslv2i32, MVT::v2i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 74:iPTR, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), DPR:v2i32:$src1)
      // Emits: (VQRDMULHslv2i32:v2i32 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v2i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_227(N, ARM::VQRDMULHslv2i32, MVT::v2i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 24:iPTR, DPR:v2f32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTf2xsd:v2i32 DPR:v2f32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(24)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_232(N, ARM::VCVTf2xsd, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 25:iPTR, DPR:v2f32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTf2xud:v2i32 DPR:v2f32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(25)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_232(N, ARM::VCVTf2xud, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 28:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VHADDsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(28)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VHADDsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 29:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VHADDuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(29)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VHADDuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 91:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VRHADDsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(91)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VRHADDsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 92:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VRHADDuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(92)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VRHADDuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 64:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQADDsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 65:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQADDuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 16:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VADDHNv2i32:v2i32 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(16)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VADDHNv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 88:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VRADDHNv2i32:v2i32 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(88)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VRADDHNv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 68:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQDMULHv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQDMULHv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 74:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQRDMULHv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQRDMULHv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 30:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VHSUBsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(30)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VHSUBsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 31:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VHSUBuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(31)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VHSUBuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 86:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQSUBsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 87:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQSUBuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 112:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VSUBHNv2i32:v2i32 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(112)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VSUBHNv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 98:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VRSUBHNv2i32:v2i32 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(98)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VRSUBHNv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 12:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VACGEd:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(12)) {
        SDNode *Result = Emit_220(N, ARM::VACGEd, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 14:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VACGTd:v2i32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(14)) {
        SDNode *Result = Emit_220(N, ARM::VACGTd, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 9:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VABDsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VABDsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 10:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VABDuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(10)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VABDuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 5:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VABAsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(5)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VABAsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 6:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VABAuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(6)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VABAuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 39:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VMAXsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VMAXsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 40:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VMAXuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(40)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VMAXuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 41:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VMINsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VMINsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 42:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VMINuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(42)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VMINuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 56:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VPADDi32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(56)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPADDi32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 57:iPTR, DPR:v4i16:$src)
      // Emits: (VPADDLsv4i16:v2i32 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(57)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VPADDLsv4i16, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 58:iPTR, DPR:v4i16:$src)
      // Emits: (VPADDLuv4i16:v2i32 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(58)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VPADDLuv4i16, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 54:iPTR, DPR:v2i32:$src1, DPR:v4i16:$src2)
      // Emits: (VPADALsv4i16:v2i32 DPR:v2i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(54)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPADALsv4i16, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 55:iPTR, DPR:v2i32:$src1, DPR:v4i16:$src2)
      // Emits: (VPADALuv4i16:v2i32 DPR:v2i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(55)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VPADALuv4i16, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 59:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VPMAXs32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(59)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPMAXs32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 60:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VPMAXu32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(60)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPMAXu32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 61:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VPMINs32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(61)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPMINs32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 62:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VPMINu32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(62)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPMINu32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 89:iPTR, DPR:v2i32:$src)
      // Emits: (VRECPEd:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(89)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VRECPEd, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 96:iPTR, DPR:v2i32:$src)
      // Emits: (VRSQRTEd:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(96)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VRSQRTEd, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 103:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VSHLsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 104:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VSHLuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 94:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VRSHLsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 95:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VRSHLuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 83:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQSHLsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 85:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQSHLuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 78:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQRSHLsv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 79:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQRSHLuv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 11:iPTR, DPR:v2i32:$src)
      // Emits: (VABSv2i32:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VABSv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 63:iPTR, DPR:v2i32:$src)
      // Emits: (VQABSv2i32:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(63)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VQABSv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 73:iPTR, DPR:v2i32:$src)
      // Emits: (VQNEGv2i32:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(73)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VQNEGv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 21:iPTR, DPR:v2i32:$src)
      // Emits: (VCLSv2i32:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(21)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VCLSv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 22:iPTR, DPR:v2i32:$src)
      // Emits: (VCLZv2i32:v2i32 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(22)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VCLZv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 49:iPTR, QPR:v2i64:$src)
      // Emits: (VMOVNv2i32:v2i32 QPR:v2i64:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(49)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_222(N, ARM::VMOVNv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 70:iPTR, QPR:v2i64:$src)
      // Emits: (VQMOVNsv2i32:v2i32 QPR:v2i64:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(70)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNsv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 72:iPTR, QPR:v2i64:$src)
      // Emits: (VQMOVNuv2i32:v2i32 QPR:v2i64:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(72)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNuv2i32, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 71:iPTR, QPR:v2i64:$src)
      // Emits: (VQMOVNsuv2i32:v2i32 QPR:v2i64:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(71)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_222(N, ARM::VQMOVNsuv2i32, MVT::v2i32);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_233(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue N30 = N3.getNode()->getOperand(0);
  SDValue N31 = N3.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N31)->getZExtValue()), MVT::i32);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N2, N30, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_234(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N20 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N21)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = Transform_DSubReg_i32_reg(Tmp4.getNode());
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N20, Tmp5), 0);
  SDValue Tmp7 = Transform_SubReg_i32_lane(Tmp4.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, Tmp6, Tmp7, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_235(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue N30 = N3.getNode()->getOperand(0);
  SDValue N31 = N3.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N31)->getZExtValue()), MVT::i32);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N2, N1, N30, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_236(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = Transform_DSubReg_i32_reg(Tmp4.getNode());
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N10, Tmp5), 0);
  SDValue Tmp7 = Transform_SubReg_i32_lane(Tmp4.getNode());
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N2, Tmp6, Tmp7, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 68:iPTR, QPR:v4i32:$src1, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VQDMULHslv4i32:v4i32 QPR:v4i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VQDMULHslv4i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 74:iPTR, QPR:v4i32:$src1, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VQRDMULHslv4i32:v4i32 QPR:v4i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VQRDMULHslv4i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 51:iPTR, DPR:v4i16:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VMULLslsv4i16:v4i32 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VMULLslsv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 52:iPTR, DPR:v4i16:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VMULLsluv4i16:v4i32 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VMULLsluv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 69:iPTR, DPR:v4i16:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VQDMULLslv4i16:v4i32 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(69)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i16 &&
              N20.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_226(N, ARM::VQDMULLslv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 43:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLALslsv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i16 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_233(N, ARM::VMLALslsv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 44:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLALsluv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i16 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_233(N, ARM::VMLALsluv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 66:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VQDMLALslv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i16 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_233(N, ARM::VQDMLALslv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 45:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLSLslsv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i16 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_233(N, ARM::VMLSLslsv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 46:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLSLsluv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i16 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_233(N, ARM::VMLSLsluv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 67:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VQDMLSLslv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i16 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_233(N, ARM::VQDMLSLslv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 68:iPTR, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), QPR:v4i32:$src1)
      // Emits: (VQDMULHslv4i32:v4i32 QPR:v4i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_227(N, ARM::VQDMULHslv4i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 74:iPTR, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), QPR:v4i32:$src1)
      // Emits: (VQRDMULHslv4i32:v4i32 QPR:v4i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_227(N, ARM::VQRDMULHslv4i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 51:iPTR, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane), DPR:v4i16:$src1)
      // Emits: (VMULLslsv4i16:v4i32 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_227(N, ARM::VMULLslsv4i16, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 52:iPTR, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane), DPR:v4i16:$src1)
      // Emits: (VMULLsluv4i16:v4i32 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_227(N, ARM::VMULLsluv4i16, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 69:iPTR, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane), DPR:v4i16:$src1)
      // Emits: (VQDMULLslv4i16:v4i32 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(69)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i16 &&
                N10.getValueType() == MVT::v4i16 &&
                N2.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_227(N, ARM::VQDMULLslv4i16, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 43:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLALslsv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i32 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_235(N, ARM::VMLALslsv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 44:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLALsluv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i32 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_235(N, ARM::VMLALsluv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 66:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VQDMLALslv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i32 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_235(N, ARM::VQDMLALslv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 45:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLSLslsv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i32 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_235(N, ARM::VMLSLslsv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 46:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VMLSLsluv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i32 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_235(N, ARM::VMLSLsluv4i16, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 67:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane))
      // Emits: (VQDMLSLslv4i16:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i16 &&
              N2.getValueType() == MVT::v4i32 &&
              N3.getValueType() == MVT::v4i16 &&
              N30.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_235(N, ARM::VQDMLSLslv4i16, MVT::v4i32);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 68:iPTR, QPR:v4i32:$src1, (NEONvduplane:v4i32 QPR:v4i32:$src2, (imm:i32):$lane))
      // Emits: (VQDMULHslv4i32:v4i32 QPR:v4i32:$src1, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i32 &&
              N20.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_234(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQDMULHslv4i32, MVT::v2i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 74:iPTR, QPR:v4i32:$src1, (NEONvduplane:v4i32 QPR:v4i32:$src2, (imm:i32):$lane))
      // Emits: (VQRDMULHslv4i32:v4i32 QPR:v4i32:$src1, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v4i32 &&
              N2.getValueType() == MVT::v4i32 &&
              N20.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_234(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQRDMULHslv4i32, MVT::v2i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 68:iPTR, (NEONvduplane:v4i32 QPR:v4i32:$src2, (imm:i32):$lane), QPR:v4i32:$src1)
      // Emits: (VQDMULHslv4i32:v4i32 QPR:v4i32:$src1, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i32 &&
                N10.getValueType() == MVT::v4i32 &&
                N2.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_236(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQDMULHslv4i32, MVT::v2i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 74:iPTR, (NEONvduplane:v4i32 QPR:v4i32:$src2, (imm:i32):$lane), QPR:v4i32:$src1)
      // Emits: (VQRDMULHslv4i32:v4i32 QPR:v4i32:$src1, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 14  cost = 2  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v4i32 &&
                N10.getValueType() == MVT::v4i32 &&
                N2.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_236(N, TargetOpcode::EXTRACT_SUBREG, ARM::VQRDMULHslv4i32, MVT::v2i32, MVT::v4i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 24:iPTR, QPR:v4f32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTf2xsq:v4i32 QPR:v4f32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(24)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_232(N, ARM::VCVTf2xsq, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 25:iPTR, QPR:v4f32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTf2xuq:v4i32 QPR:v4f32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(25)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_232(N, ARM::VCVTf2xuq, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 17:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VADDLsv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(17)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VADDLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 18:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VADDLuv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(18)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VADDLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 19:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Emits: (VADDWsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(19)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VADDWsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 20:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Emits: (VADDWuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(20)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VADDWuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 28:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VHADDsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(28)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VHADDsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 29:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VHADDuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(29)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VHADDuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 91:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VRHADDsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(91)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VRHADDsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 92:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VRHADDuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(92)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VRHADDuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 64:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQADDsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 65:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQADDuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 68:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQDMULHv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(68)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQDMULHv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 74:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQRDMULHv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(74)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQRDMULHv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 51:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VMULLsv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VMULLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 52:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VMULLuv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VMULLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 69:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VQDMULLv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(69)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VQDMULLv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 43:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VMLALsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VMLALsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 44:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VMLALuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VMLALuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 66:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VQDMLALv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VQDMLALv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 45:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VMLSLsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VMLSLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 46:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VMLSLuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VMLSLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 67:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VQDMLSLv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VQDMLSLv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 113:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VSUBLsv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(113)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VSUBLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 114:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VSUBLuv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(114)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VSUBLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 115:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Emits: (VSUBWsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(115)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VSUBWsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 116:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Emits: (VSUBWuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(116)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VSUBWuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 30:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VHSUBsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(30)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VHSUBsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 31:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VHSUBuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(31)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VHSUBuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 86:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQSUBsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 87:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQSUBuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 13:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VACGEq:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(13)) {
        SDNode *Result = Emit_220(N, ARM::VACGEq, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 15:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VACGTq:v4i32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(15)) {
        SDNode *Result = Emit_220(N, ARM::VACGTq, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 9:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VABDsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VABDsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 10:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VABDuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(10)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VABDuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 7:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VABDLsv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(7)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VABDLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 8:iPTR, DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Emits: (VABDLuv4i32:v4i32 DPR:v4i16:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(8)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_220(N, ARM::VABDLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 5:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
      // Emits: (VABAsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(5)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_221(N, ARM::VABAsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 6:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
      // Emits: (VABAuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(6)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_221(N, ARM::VABAuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 3:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VABALsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(3)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VABALsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 4:iPTR, QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Emits: (VABALuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(4)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i16 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_221(N, ARM::VABALuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 39:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VMAXsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VMAXsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 40:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VMAXuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(40)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VMAXuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 41:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VMINsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VMINsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 42:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VMINuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(42)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VMINuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 57:iPTR, QPR:v8i16:$src)
      // Emits: (VPADDLsv8i16:v4i32 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(57)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VPADDLsv8i16, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 58:iPTR, QPR:v8i16:$src)
      // Emits: (VPADDLuv8i16:v4i32 QPR:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(58)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_222(N, ARM::VPADDLuv8i16, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 54:iPTR, QPR:v4i32:$src1, QPR:v8i16:$src2)
      // Emits: (VPADALsv8i16:v4i32 QPR:v4i32:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(54)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VPADALsv8i16, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 55:iPTR, QPR:v4i32:$src1, QPR:v8i16:$src2)
      // Emits: (VPADALuv8i16:v4i32 QPR:v4i32:$src1, QPR:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(55)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_220(N, ARM::VPADALuv8i16, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 89:iPTR, QPR:v4i32:$src)
      // Emits: (VRECPEq:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(89)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VRECPEq, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 96:iPTR, QPR:v4i32:$src)
      // Emits: (VRSQRTEq:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(96)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VRSQRTEq, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 103:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VSHLsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 104:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VSHLuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 94:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VRSHLsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 95:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VRSHLuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 83:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQSHLsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 85:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQSHLuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 78:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQRSHLsv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 79:iPTR, QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Emits: (VQRSHLuv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i32 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 11:iPTR, QPR:v4i32:$src)
      // Emits: (VABSv4i32:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VABSv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 63:iPTR, QPR:v4i32:$src)
      // Emits: (VQABSv4i32:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(63)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VQABSv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 73:iPTR, QPR:v4i32:$src)
      // Emits: (VQNEGv4i32:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(73)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VQNEGv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 21:iPTR, QPR:v4i32:$src)
      // Emits: (VCLSv4i32:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(21)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VCLSv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 22:iPTR, QPR:v4i32:$src)
      // Emits: (VCLZv4i32:v4i32 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(22)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VCLZv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 47:iPTR, DPR:v4i16:$src)
      // Emits: (VMOVLsv4i32:v4i32 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(47)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VMOVLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 48:iPTR, DPR:v4i16:$src)
      // Emits: (VMOVLuv4i32:v4i32 DPR:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(48)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_222(N, ARM::VMOVLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 19:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1)
      // Emits: (VADDWsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(19)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_229(N, ARM::VADDWsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 20:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1)
      // Emits: (VADDWuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(20)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_229(N, ARM::VADDWuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 43:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, DPR:v4i16:$src3)
      // Emits: (VMLALsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_230(N, ARM::VMLALsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 44:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, DPR:v4i16:$src3)
      // Emits: (VMLALuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_230(N, ARM::VMLALuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 66:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, DPR:v4i16:$src3)
      // Emits: (VQDMLALv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_230(N, ARM::VQDMLALv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 45:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, DPR:v4i16:$src3)
      // Emits: (VMLSLsv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_230(N, ARM::VMLSLsv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 46:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, DPR:v4i16:$src3)
      // Emits: (VMLSLuv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_230(N, ARM::VMLSLuv4i32, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 67:iPTR, DPR:v4i16:$src2, QPR:v4i32:$src1, DPR:v4i16:$src3)
      // Emits: (VQDMLSLv4i32:v4i32 QPR:v4i32:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v4i16 &&
            N2.getValueType() == MVT::v4i32 &&
            N3.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_230(N, ARM::VQDMLSLv4i32, MVT::v4i32);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v1i64 64:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQADDsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 65:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQADDuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 86:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQSUBsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 87:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQSUBuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 57:iPTR, DPR:v2i32:$src)
      // Emits: (VPADDLsv2i32:v1i64 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(57)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VPADDLsv2i32, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 58:iPTR, DPR:v2i32:$src)
      // Emits: (VPADDLuv2i32:v1i64 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(58)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VPADDLuv2i32, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 54:iPTR, DPR:v1i64:$src1, DPR:v2i32:$src2)
      // Emits: (VPADALsv2i32:v1i64 DPR:v1i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(54)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPADALsv2i32, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 55:iPTR, DPR:v1i64:$src1, DPR:v2i32:$src2)
      // Emits: (VPADALuv2i32:v1i64 DPR:v1i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(55)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VPADALuv2i32, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 103:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VSHLsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 104:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VSHLuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 94:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VRSHLsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 95:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VRSHLuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 83:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQSHLsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 85:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQSHLuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 78:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQRSHLsv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv1i64, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 79:iPTR, DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Emits: (VQRSHLuv1i64:v1i64 DPR:v1i64:$src1, DPR:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v1i64 &&
            N2.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv1i64, MVT::v1i64);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 51:iPTR, DPR:v2i32:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VMULLslsv2i32:v2i64 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VMULLslsv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 52:iPTR, DPR:v2i32:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VMULLsluv2i32:v2i64 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VMULLsluv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 69:iPTR, DPR:v2i32:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VQDMULLslv2i32:v2i64 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(69)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N20 = N2.getNode()->getOperand(0);
          SDValue N21 = N2.getNode()->getOperand(1);
          if (N21.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i32 &&
              N20.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_226(N, ARM::VQDMULLslv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 43:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLALslsv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i64 &&
              N2.getValueType() == MVT::v2i32 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_233(N, ARM::VMLALslsv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 44:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLALsluv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i64 &&
              N2.getValueType() == MVT::v2i32 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_233(N, ARM::VMLALsluv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 66:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VQDMLALslv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i64 &&
              N2.getValueType() == MVT::v2i32 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_233(N, ARM::VQDMLALslv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 45:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLSLslsv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i64 &&
              N2.getValueType() == MVT::v2i32 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_233(N, ARM::VMLSLslsv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 46:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLSLsluv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i64 &&
              N2.getValueType() == MVT::v2i32 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_233(N, ARM::VMLSLsluv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 67:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VQDMLSLslv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i64 &&
              N2.getValueType() == MVT::v2i32 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_233(N, ARM::VQDMLSLslv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 51:iPTR, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), DPR:v2i32:$src1)
      // Emits: (VMULLslsv2i32:v2i64 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v2i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_227(N, ARM::VMULLslsv2i32, MVT::v2i64);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 52:iPTR, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), DPR:v2i32:$src1)
      // Emits: (VMULLsluv2i32:v2i64 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v2i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_227(N, ARM::VMULLsluv2i32, MVT::v2i64);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 69:iPTR, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), DPR:v2i32:$src1)
      // Emits: (VQDMULLslv2i32:v2i64 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(69)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            if (N1.getValueType() == MVT::v2i32 &&
                N10.getValueType() == MVT::v2i32 &&
                N2.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_227(N, ARM::VQDMULLslv2i32, MVT::v2i64);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 43:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLALslsv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i64 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_235(N, ARM::VMLALslsv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 44:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLALsluv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i64 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_235(N, ARM::VMLALsluv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 66:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VQDMLALslv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i64 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_235(N, ARM::VQDMLALslv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 45:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLSLslsv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i64 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_235(N, ARM::VMLSLslsv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 46:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VMLSLsluv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i64 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_235(N, ARM::VMLSLsluv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 67:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane))
      // Emits: (VQDMLSLslv2i32:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 14  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N30 = N3.getNode()->getOperand(0);
          SDValue N31 = N3.getNode()->getOperand(1);
          if (N31.getNode()->getOpcode() == ISD::Constant &&
              N1.getValueType() == MVT::v2i32 &&
              N2.getValueType() == MVT::v2i64 &&
              N3.getValueType() == MVT::v2i32 &&
              N30.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_235(N, ARM::VQDMLSLslv2i32, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 17:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VADDLsv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(17)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VADDLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 18:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VADDLuv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(18)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VADDLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 19:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Emits: (VADDWsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(19)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VADDWsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 20:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Emits: (VADDWuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(20)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VADDWuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 64:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQADDsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(64)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQADDsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 65:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQADDuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(65)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQADDuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 51:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VMULLsv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(51)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VMULLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 52:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VMULLuv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(52)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VMULLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 69:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VQDMULLv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(69)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VQDMULLv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 43:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VMLALsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VMLALsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 44:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VMLALuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VMLALuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 66:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VQDMLALv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VQDMLALv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 45:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VMLSLsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VMLSLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 46:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VMLSLuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VMLSLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 67:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VQDMLSLv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VQDMLSLv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 113:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VSUBLsv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(113)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VSUBLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 114:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VSUBLuv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(114)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VSUBLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 115:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Emits: (VSUBWsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(115)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VSUBWsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 116:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Emits: (VSUBWuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(116)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VSUBWuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 86:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQSUBsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(86)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQSUBsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 87:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQSUBuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(87)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQSUBuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 7:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VABDLsv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(7)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VABDLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 8:iPTR, DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Emits: (VABDLuv2i64:v2i64 DPR:v2i32:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(8)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_220(N, ARM::VABDLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 3:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VABALsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(3)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VABALsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 4:iPTR, QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Emits: (VABALuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(4)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i32 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_221(N, ARM::VABALuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 57:iPTR, QPR:v4i32:$src)
      // Emits: (VPADDLsv4i32:v2i64 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(57)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VPADDLsv4i32, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 58:iPTR, QPR:v4i32:$src)
      // Emits: (VPADDLuv4i32:v2i64 QPR:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(58)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_222(N, ARM::VPADDLuv4i32, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 54:iPTR, QPR:v2i64:$src1, QPR:v4i32:$src2)
      // Emits: (VPADALsv4i32:v2i64 QPR:v2i64:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(54)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VPADALsv4i32, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 55:iPTR, QPR:v2i64:$src1, QPR:v4i32:$src2)
      // Emits: (VPADALuv4i32:v2i64 QPR:v2i64:$src1, QPR:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(55)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_220(N, ARM::VPADALuv4i32, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 103:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VSHLsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(103)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VSHLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 104:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VSHLuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(104)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VSHLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 94:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VRSHLsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(94)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VRSHLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 95:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VRSHLuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(95)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VRSHLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 83:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQSHLsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(83)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQSHLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 85:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQSHLuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(85)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQSHLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 78:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQRSHLsv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(78)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 79:iPTR, QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Emits: (VQRSHLuv2i64:v2i64 QPR:v2i64:$src1, QPR:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(79)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i64 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_220(N, ARM::VQRSHLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 47:iPTR, DPR:v2i32:$src)
      // Emits: (VMOVLsv2i64:v2i64 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(47)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VMOVLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 48:iPTR, DPR:v2i32:$src)
      // Emits: (VMOVLuv2i64:v2i64 DPR:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(48)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_222(N, ARM::VMOVLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 19:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1)
      // Emits: (VADDWsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(19)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_229(N, ARM::VADDWsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 20:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1)
      // Emits: (VADDWuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(20)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_229(N, ARM::VADDWuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 43:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, DPR:v2i32:$src3)
      // Emits: (VMLALsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(43)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_230(N, ARM::VMLALsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 44:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, DPR:v2i32:$src3)
      // Emits: (VMLALuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(44)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_230(N, ARM::VMLALuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 66:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, DPR:v2i32:$src3)
      // Emits: (VQDMLALv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(66)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_230(N, ARM::VQDMLALv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 45:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, DPR:v2i32:$src3)
      // Emits: (VMLSLsv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(45)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_230(N, ARM::VMLSLsv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 46:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, DPR:v2i32:$src3)
      // Emits: (VMLSLuv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(46)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_230(N, ARM::VMLSLuv2i64, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 67:iPTR, DPR:v2i32:$src2, QPR:v2i64:$src1, DPR:v2i32:$src3)
      // Emits: (VQDMLSLv2i64:v2i64 QPR:v2i64:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(67)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N1.getValueType() == MVT::v2i32 &&
            N2.getValueType() == MVT::v2i64 &&
            N3.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_230(N, ARM::VQDMLSLv2i64, MVT::v2i64);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f32 26:iPTR, DPR:v2i32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTxs2fd:v2f32 DPR:v2i32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(26)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_232(N, ARM::VCVTxs2fd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 27:iPTR, DPR:v2i32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTxu2fd:v2f32 DPR:v2i32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(27)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_232(N, ARM::VCVTxu2fd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 9:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VABDfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VABDfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 39:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VMAXfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VMAXfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 41:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VMINfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VMINfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 56:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VPADDf:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(56)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VPADDf, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 59:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VPMAXf:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(59)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VPMAXf, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 61:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VPMINf:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(61)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VPMINf, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 89:iPTR, DPR:v2f32:$src)
      // Emits: (VRECPEfd:v2f32 DPR:v2f32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(89)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_222(N, ARM::VRECPEfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 90:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VRECPSfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(90)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VRECPSfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 96:iPTR, DPR:v2f32:$src)
      // Emits: (VRSQRTEfd:v2f32 DPR:v2f32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(96)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_222(N, ARM::VRSQRTEfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 97:iPTR, DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Emits: (VRSQRTSfd:v2f32 DPR:v2f32:$src1, DPR:v2f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(97)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v2f32 &&
            N2.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_220(N, ARM::VRSQRTSfd, MVT::v2f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f32 11:iPTR, DPR:v2f32:$src)
      // Emits: (VABSfd:v2f32 DPR:v2f32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_222(N, ARM::VABSfd, MVT::v2f32);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 26:iPTR, QPR:v4i32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTxs2fq:v4f32 QPR:v4i32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(26)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_232(N, ARM::VCVTxs2fq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 27:iPTR, QPR:v4i32:$src, (imm:i32):$SIMM)
      // Emits: (VCVTxu2fq:v4f32 QPR:v4i32:$src, (imm:i32):$SIMM)
      // Pattern complexity = 11  cost = 1  size = 0
      if (CN1 == INT64_C(27)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_232(N, ARM::VCVTxu2fq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 9:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VABDfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4f32 &&
            N2.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_220(N, ARM::VABDfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 39:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VMAXfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(39)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4f32 &&
            N2.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_220(N, ARM::VMAXfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 41:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VMINfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(41)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4f32 &&
            N2.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_220(N, ARM::VMINfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 89:iPTR, QPR:v4f32:$src)
      // Emits: (VRECPEfq:v4f32 QPR:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(89)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_222(N, ARM::VRECPEfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 90:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VRECPSfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(90)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4f32 &&
            N2.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_220(N, ARM::VRECPSfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 96:iPTR, QPR:v4f32:$src)
      // Emits: (VRSQRTEfq:v4f32 QPR:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(96)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_222(N, ARM::VRSQRTEfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 97:iPTR, QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Emits: (VRSQRTSfq:v4f32 QPR:v4f32:$src1, QPR:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(97)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N1.getValueType() == MVT::v4f32 &&
            N2.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_220(N, ARM::VRSQRTSfq, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 11:iPTR, QPR:v4f32:$src)
      // Emits: (VABSfq:v4f32 QPR:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_222(N, ARM::VABSfq, MVT::v4f32);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_237(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, Tmp3, Tmp4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
}
SDNode *Select_ISD_INTRINSIC_W_CHAIN_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1d8, MVT::v8i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1q8, MVT::v16i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1d16, MVT::v4i16, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1q16, MVT::v8i16, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1d32, MVT::v2i32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1q32, MVT::v4i32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1d64, MVT::v1i64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1q64, MVT::v2i64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1df, MVT::v2f32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(32)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        if (SelectAddrMode6(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3) &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_237(N, ARM::VLD1qf, MVT::v4f32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_238(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, Tmp1, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 5);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_239(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp1, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_240(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { N10, Tmp1, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 4);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_241(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp1, Tmp2, Chain };
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, MVT::Other, Ops0, 6), 0);
  Chain = SDValue(Tmp3.getNode(), 1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs1 = MF->allocateMemRefsArray(1);
  MemRefs1[0] = cast<MemSDNode>(N)->getMemOperand();
  SDNode *ResNode = CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp3, Tmp4, Tmp5);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs1, MemRefs1 + 1);
  ReplaceUses(SDValue(N, 1), Chain);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_242(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp1 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp3, Tmp4, Chain };
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, MVT::Other, Ops0, 6), 0);
  Chain = SDValue(Tmp5.getNode(), 1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x18ULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp1, Tmp5, Tmp6, Tmp7, Tmp8 };
  SDValue Tmp9(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Ops1, 5), 0);
  SDValue Tmp10 = CurDAG->getTargetConstant(0x18ULL, MVT::i32);
  SDValue Tmp11 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp12 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs2 = MF->allocateMemRefsArray(1);
  MemRefs2[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops2[] = { Tmp0, Tmp9, Tmp10, Tmp11, Tmp12 };
  SDNode *ResNode = CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Ops2, 5);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs2, MemRefs2 + 1);
  ReplaceUses(SDValue(N, 1), Chain);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_243(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp1 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, Tmp3, Tmp4, Chain };
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, MVT::Other, Ops0, 6), 0);
  Chain = SDValue(Tmp5.getNode(), 1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x10ULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp8 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp1, Tmp5, Tmp6, Tmp7, Tmp8 };
  SDValue Tmp9(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Ops1, 5), 0);
  SDValue Tmp10 = CurDAG->getTargetConstant(0x10ULL, MVT::i32);
  SDValue Tmp11 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp12 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs2 = MF->allocateMemRefsArray(1);
  MemRefs2[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops2[] = { Tmp0, Tmp9, Tmp10, Tmp11, Tmp12 };
  SDNode *ResNode = CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Ops2, 5);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs2, MemRefs2 + 1);
  ReplaceUses(SDValue(N, 1), Chain);
  return ResNode;
}
SDNode *Select_ISD_LOAD_i32(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (PICLDR:i32 addrmodepc:i32:$addr)
      // Pattern complexity = 23  cost = 1  size = 0
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::PICLDR, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }
      if (Predicate_zextload(N)) {

        // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
        // Emits: (PICLDRH:i32 addrmodepc:i32:$addr)
        // Pattern complexity = 23  cost = 1  size = 0
        if (Predicate_zextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::PICLDRH, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }

        // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
        // Emits: (PICLDRB:i32 addrmodepc:i32:$addr)
        // Pattern complexity = 23  cost = 1  size = 0
        if (Predicate_zextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::PICLDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
      }
      if (Predicate_sextload(N)) {

        // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
        // Emits: (PICLDRSH:i32 addrmodepc:i32:$addr)
        // Pattern complexity = 23  cost = 1  size = 0
        if (Predicate_sextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::PICLDRSH, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }

        // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
        // Emits: (PICLDRSB:i32 addrmodepc:i32:$addr)
        // Pattern complexity = 23  cost = 1  size = 0
        if (Predicate_sextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::PICLDRSB, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_sextload(N)) {

      // Pattern: (ld:i32 t_addrmode_rr:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
      // Emits: (tLDRSB:i32 t_addrmode_rr:i32:$addr)
      // Pattern complexity = 23  cost = 1  size = 0
      if (Predicate_sextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        if (SelectThumbAddrModeRR(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::tLDRSB, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }

      // Pattern: (ld:i32 t_addrmode_rr:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
      // Emits: (tLDRSH:i32 t_addrmode_rr:i32:$addr)
      // Pattern complexity = 23  cost = 1  size = 0
      if (Predicate_sextloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        if (SelectThumbAddrModeRR(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::tLDRSH, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 addrmode2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (LDR:i32 addrmode2:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectAddrMode2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_239(N, ARM::LDR, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
      if (Predicate_zextload(N)) {

        // Pattern: (ld:i32 addrmode3:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
        // Emits: (LDRH:i32 addrmode3:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_zextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode3(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRH, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 addrmode2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
        // Emits: (LDRB:i32 addrmode2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_zextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
      if (Predicate_sextload(N)) {

        // Pattern: (ld:i32 addrmode3:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
        // Emits: (LDRSH:i32 addrmode3:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_sextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode3(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRSH, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 addrmode3:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
        // Emits: (LDRSB:i32 addrmode3:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_sextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode3(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRSB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 t_addrmode_s4:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (tLDR:i32 t_addrmode_s4:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectThumbAddrModeS4(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_239(N, ARM::tLDR, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
      if (Predicate_zextload(N)) {

        // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
        // Emits: (tLDRB:i32 t_addrmode_s1:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_zextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::tLDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t_addrmode_s2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
        // Emits: (tLDRH:i32 t_addrmode_s2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_zextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::tLDRH, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (t2LDRs:i32 t2addrmode_so_reg:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_239(N, ARM::t2LDRs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
      if (Predicate_zextload(N)) {

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
        // Emits: (t2LDRHs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_zextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRHs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
        // Emits: (t2LDRBs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_zextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRBs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
      if (Predicate_sextload(N)) {

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
        // Emits: (t2LDRSHs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_sextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRSHs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
        // Emits: (t2LDRSBs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_sextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRSBs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (tLDRB:i32 t_addrmode_s1:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_zextload(N) &&
          Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_239(N, ARM::tLDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
      if (Predicate_extload(N)) {

        // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
        // Emits: (tLDRB:i32 t_addrmode_s1:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi1(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::tLDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
        // Emits: (tLDRB:i32 t_addrmode_s1:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::tLDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t_addrmode_s2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
        // Emits: (tLDRH:i32 t_addrmode_s2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::tLDRH, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (t2LDRBs:i32 t2addrmode_so_reg:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_zextload(N) &&
          Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_239(N, ARM::t2LDRBs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
      if (Predicate_extload(N)) {

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
        // Emits: (t2LDRBs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi1(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRBs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
        // Emits: (t2LDRBs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRBs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
        // Emits: (t2LDRHs:i32 t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectT2AddrModeSoReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::t2LDRHs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 addrmode2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (LDRB:i32 addrmode2:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_zextload(N) &&
          Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectAddrMode2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_239(N, ARM::LDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
      if (Predicate_extload(N)) {

        // Pattern: (ld:i32 addrmode2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
        // Emits: (LDRB:i32 addrmode2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi1(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 addrmode2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
        // Emits: (LDRB:i32 addrmode2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 addrmode3:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
        // Emits: (LDRH:i32 addrmode3:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_extloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectAddrMode3(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_239(N, ARM::LDRH, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_sextload(N)) {

      // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
      // Emits: (tSXTB:i32 (tLDRB:i32 t_addrmode_s1:i32:$addr))
      // Pattern complexity = 16  cost = 2  size = 0
      if (Predicate_sextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_241(N, ARM::tLDRB, ARM::tSXTB, MVT::i32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }

      // Pattern: (ld:i32 t_addrmode_s2:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
      // Emits: (tSXTH:i32 (tLDRH:i32 t_addrmode_s2:i32:$addr))
      // Pattern complexity = 16  cost = 2  size = 0
      if (Predicate_sextloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        if (SelectThumbAddrModeS2(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_241(N, ARM::tLDRH, ARM::tSXTH, MVT::i32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {
      if (Predicate_sextload(N)) {

        // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
        // Emits: (tASRri:i32 (tLSLri:i32 (tLDRB:i32 t_addrmode_s1:i32:$addr), 24:i32), 24:i32)
        // Pattern complexity = 16  cost = 3  size = 0
        if (Predicate_sextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_242(N, ARM::tLDRB, ARM::tLSLri, ARM::tASRri, MVT::i32, MVT::i32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }

        // Pattern: (ld:i32 t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
        // Emits: (tASRri:i32 (tLSLri:i32 (tLDRH:i32 t_addrmode_s1:i32:$addr), 16:i32), 16:i32)
        // Pattern complexity = 16  cost = 3  size = 0
        if (Predicate_sextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;
          SDValue CPTmpN1_2;
          if (SelectThumbAddrModeS1(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_243(N, ARM::tLDRH, ARM::tLSLri, ARM::tASRri, MVT::i32, MVT::i32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
            return Result;
          }
        }
      }

      // Pattern: (ld:i32 t_addrmode_sp:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (tLDRspi:i32 t_addrmode_sp:i32:$addr)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        if (SelectThumbAddrModeSP(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::tLDRspi, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;

        // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
        // Emits: (t2LDRi12:i32 t2addrmode_imm12:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::t2LDRi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }

        // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_load>>
        // Emits: (t2LDRi8:i32 t2addrmode_imm8:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::t2LDRi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }
      if (Predicate_zextload(N)) {
        if (Predicate_zextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
          // Emits: (t2LDRHi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRHi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
          // Emits: (t2LDRHi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRHi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
        if (Predicate_zextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
          // Emits: (t2LDRBi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRBi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
          // Emits: (t2LDRBi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRBi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
      }
      if (Predicate_sextload(N)) {
        if (Predicate_sextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
          // Emits: (t2LDRSHi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRSHi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
          // Emits: (t2LDRSHi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRSHi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
        if (Predicate_sextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
          // Emits: (t2LDRSBi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRSBi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
          // Emits: (t2LDRSBi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRSBi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
      }
      if (Predicate_zextload(N) &&
          Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;

        // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
        // Emits: (t2LDRBi12:i32 t2addrmode_imm12:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::t2LDRBi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }

        // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
        // Emits: (t2LDRBi8:i32 t2addrmode_imm8:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::t2LDRBi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }
      if (Predicate_extload(N)) {
        if (Predicate_extloadi1(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
          // Emits: (t2LDRBi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRBi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
          // Emits: (t2LDRBi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRBi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
        if (Predicate_extloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
          // Emits: (t2LDRBi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRBi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
          // Emits: (t2LDRBi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRBi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
        if (Predicate_extloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue CPTmpN1_0;
          SDValue CPTmpN1_1;

          // Pattern: (ld:i32 t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
          // Emits: (t2LDRHi12:i32 t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRHi12, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }

          // Pattern: (ld:i32 t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
          // Emits: (t2LDRHi8:i32 t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N1, CPTmpN1_0, CPTmpN1_1) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_238(N, ARM::t2LDRHi8, MVT::i32, CPTmpN1_0, CPTmpN1_1);
            return Result;
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_extload(N)) {

      // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
      // Emits: (PICLDRB:i32 addrmodepc:i32:$addr)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_extloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::PICLDRB, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }

      // Pattern: (ld:i32 addrmodepc:i32:$addr)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
      // Emits: (PICLDRH:i32 addrmodepc:i32:$addr)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_extloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        if (SelectAddrModePC(N, N1, CPTmpN1_0, CPTmpN1_1) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_238(N, ARM::PICLDRH, MVT::i32, CPTmpN1_0, CPTmpN1_1);
          return Result;
        }
      }
    }
  }

  // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_load>>
  // Emits: (tLDRpci:i32 (tconstpool:i32):$addr)
  // Pattern complexity = 10  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
          SDNode *Result = Emit_240(N, ARM::tLDRpci, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (t2LDRpci:i32 (tconstpool:i32):$addr)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_load(N)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
            SDNode *Result = Emit_240(N, ARM::t2LDRpci, MVT::i32);
            return Result;
          }
        }
      }
      if (Predicate_zextload(N)) {

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
        // Emits: (t2LDRHpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_zextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRHpci, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
        // Emits: (t2LDRBpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_zextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRBpci, MVT::i32);
              return Result;
            }
          }
        }
      }
      if (Predicate_sextload(N)) {

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
        // Emits: (t2LDRSHpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_sextloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRSHpci, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
        // Emits: (t2LDRSBpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_sextloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRSBpci, MVT::i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (t2LDRBpci:i32 (tconstpool:i32):$addr)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_zextload(N) &&
          Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
            SDNode *Result = Emit_240(N, ARM::t2LDRBpci, MVT::i32);
            return Result;
          }
        }
      }
      if (Predicate_extload(N)) {

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
        // Emits: (t2LDRBpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_extloadi1(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRBpci, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
        // Emits: (t2LDRBpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_extloadi8(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRBpci, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (ld:i32 (ARMWrapper:iPTR (tconstpool:iPTR):$addr))<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
        // Emits: (t2LDRHpci:i32 (tconstpool:i32):$addr)
        // Pattern complexity = 10  cost = 1  size = 0
        if (Predicate_extloadi16(N)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ARMISD::Wrapper) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
              SDNode *Result = Emit_240(N, ARM::t2LDRHpci, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_f32(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectAddrMode5(N, N1, CPTmpN1_0, CPTmpN1_1) &&
          N1.getValueType() == MVT::i32) {
        SDNode *Result = Emit_238(N, ARM::VLDRS, MVT::f32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_f64(SDNode *N) {
  if ((Subtarget->hasVFP2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectAddrMode5(N, N1, CPTmpN1_0, CPTmpN1_1) &&
          N1.getValueType() == MVT::i32) {
        SDNode *Result = Emit_238(N, ARM::VLDRD, MVT::f64, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_v2f64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectAddrMode4(N, N1, CPTmpN1_0, CPTmpN1_1) &&
          N1.getValueType() == MVT::i32) {
        SDNode *Result = Emit_238(N, ARM::VLDRQ, MVT::v2f64, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_244(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N10, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_245(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N10, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_246(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N10, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_247(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp10 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp11 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N100, Tmp10, Tmp11 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_248(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N10, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_249(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, N10, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_250(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N100, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_251(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N1, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_252(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N00, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_253(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N00, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_254(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp10 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp11 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N000, Tmp10, Tmp11 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_255(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N100, N00, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_256(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, N00, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_257(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N000, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_258(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N0, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_MUL_i32(SDNode *N) {
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N01.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N1.getNode()->getOpcode() == ISD::SRA) {
                  SDValue N10 = N1.getNode()->getOperand(0);
                  if (N10.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N100 = N10.getNode()->getOperand(0);
                    SDValue N101 = N10.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N101.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16)) {
                        SDValue N11 = N1.getNode()->getOperand(1);
                        ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N11.getNode());
                        if (Tmp6) {
                          int64_t CN7 = Tmp6->getSExtValue();
                          if (CN7 == INT64_C(16) &&
                              N001.getValueType() == MVT::i32 &&
                              N01.getValueType() == MVT::i32 &&
                              N101.getValueType() == MVT::i32 &&
                              N11.getValueType() == MVT::i32) {

                            // Pattern: (mul:i32 (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32), (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32))
                            // Emits: (SMULBB:i32 GPR:i32:$a, GPR:i32:$b)
                            // Pattern complexity = 35  cost = 1  size = 0
                            {
                              SDNode *Result = Emit_247(N, ARM::SMULBB, MVT::i32);
                              return Result;
                            }

                            // Pattern: (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32))
                            // Emits: (SMULBB:i32 GPR:i32:$a, GPR:i32:$b)
                            // Pattern complexity = 35  cost = 1  size = 0
                            SDNode *Result = Emit_254(N, ARM::SMULBB, MVT::i32);
                            return Result;
                          }
                        }
                      }
                    }
                  }

                  // Pattern: (mul:i32 (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32), (sra:i32 GPR:i32:$b, 16:i32))
                  // Emits: (SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
                  // Pattern complexity = 27  cost = 1  size = 0
                  SDValue N11 = N1.getNode()->getOperand(1);
                  ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N11.getNode());
                  if (Tmp4) {
                    int64_t CN5 = Tmp4->getSExtValue();
                    if (CN5 == INT64_C(16) &&
                        N001.getValueType() == MVT::i32 &&
                        N01.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_248(N, ARM::SMULBT, MVT::i32);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::SRA) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::SHL) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N11.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16) &&
                          N01.getValueType() == MVT::i32 &&
                          N101.getValueType() == MVT::i32 &&
                          N11.getValueType() == MVT::i32) {

                        // Pattern: (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32))
                        // Emits: (SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
                        // Pattern complexity = 27  cost = 1  size = 0
                        {
                          SDNode *Result = Emit_250(N, ARM::SMULTB, MVT::i32);
                          return Result;
                        }

                        // Pattern: (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 (shl:i32 GPR:i32:$a, 16:i32), 16:i32))
                        // Emits: (SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
                        // Pattern complexity = 27  cost = 1  size = 0
                        SDNode *Result = Emit_255(N, ARM::SMULBT, MVT::i32);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), (sra:i32 GPR:i32:$a, 16:i32))
      // Emits: (SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 27  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N01.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16)) {
                SDValue N1 = N->getOperand(1);
                if (N1.getNode()->getOpcode() == ISD::SRA) {
                  SDValue N10 = N1.getNode()->getOperand(0);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N11.getNode());
                  if (Tmp4) {
                    int64_t CN5 = Tmp4->getSExtValue();
                    if (CN5 == INT64_C(16) &&
                        N001.getValueType() == MVT::i32 &&
                        N01.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_257(N, ARM::SMULTB, MVT::i32);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 GPR:i32:$b, 16:i32))
      // Emits: (SMULTT:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 19  cost = 1  size = 0
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRA) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N01.getValueType() == MVT::i32 &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_246(N, ARM::SMULTT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sra:i32 GPR:i32:$b, 16:i32))
  // Emits: (t2SMULTT:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRA) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N01.getValueType() == MVT::i32 &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_246(N, ARM::t2SMULTT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 GPR:i32:$a, 16:i32))
  // Emits: (SMULTT:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRA) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N01.getValueType() == MVT::i32 &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_253(N, ARM::SMULTT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sra:i32 GPR:i32:$a, 16:i32))
  // Emits: (t2SMULTT:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRA) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N01.getValueType() == MVT::i32 &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_253(N, ARM::t2SMULTT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sra:i32 GPR:i32:$b, 16:i32))
    // Emits: (SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRA) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N11.getValueType() == MVT::i32) {
              SDNode *Result = Emit_245(N, ARM::SMULBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sext_inreg:i32 GPR:i32:$b, i16:Other))
    // Emits: (SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16 &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_245(N, ARM::SMULTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sra:i32 GPR:i32:$b, 16:i32))
    // Emits: (t2SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRA) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N11.getValueType() == MVT::i32) {
              SDNode *Result = Emit_245(N, ARM::t2SMULBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), (sext_inreg:i32 GPR:i32:$b, i16:Other))
    // Emits: (t2SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16 &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_245(N, ARM::t2SMULTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sext_inreg:i32 GPR:i32:$a, i16:Other))
    // Emits: (SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16 &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_252(N, ARM::SMULBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), (sra:i32 GPR:i32:$a, 16:i32))
    // Emits: (SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRA) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N11.getValueType() == MVT::i32) {
              SDNode *Result = Emit_252(N, ARM::SMULTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), (sext_inreg:i32 GPR:i32:$a, i16:Other))
    // Emits: (t2SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16 &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_252(N, ARM::t2SMULBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), (sra:i32 GPR:i32:$a, 16:i32))
    // Emits: (t2SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 14  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRA) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N11.getValueType() == MVT::i32) {
              SDNode *Result = Emit_252(N, ARM::t2SMULTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$a, (sra:i32 GPR:i32:$b, 16:i32))
    // Emits: (SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 12  cost = 1  size = 0
    if (Predicate_sext_16_node(N0.getNode())) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16) &&
              N11.getValueType() == MVT::i32) {
            SDNode *Result = Emit_249(N, ARM::SMULBT, MVT::i32);
            return Result;
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRA) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (Predicate_sext_16_node(N1.getNode()) &&
              N01.getValueType() == MVT::i32) {

            // Pattern: (mul:i32 (sra:i32 GPR:i32:$a, 16:i32), GPR:i32<<P:Predicate_sext_16_node>>:$b)
            // Emits: (SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
            // Pattern complexity = 12  cost = 1  size = 0
            {
              SDNode *Result = Emit_251(N, ARM::SMULTB, MVT::i32);
              return Result;
            }

            // Pattern: (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32<<P:Predicate_sext_16_node>>:$a)
            // Emits: (SMULBT:i32 GPR:i32:$a, GPR:i32:$b)
            // Pattern complexity = 12  cost = 1  size = 0
            SDNode *Result = Emit_256(N, ARM::SMULBT, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$b, (sra:i32 GPR:i32:$a, 16:i32))
    // Emits: (SMULTB:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 12  cost = 1  size = 0
    if (Predicate_sext_16_node(N0.getNode())) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SRA) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16) &&
              N11.getValueType() == MVT::i32) {
            SDNode *Result = Emit_258(N, ARM::SMULTB, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sext_inreg:i32 GPR:i32:$b, i16:Other))
    // Emits: (SMULBB:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 9  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_244(N, ARM::SMULBB, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (mul:i32 (sext_inreg:i32 GPR:i32:$a, i16:Other), (sext_inreg:i32 GPR:i32:$b, i16:Other))
  // Emits: (t2SMULBB:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 9  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (cast<VTSDNode>(N01.getNode())->getVT() == MVT::i16) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (cast<VTSDNode>(N11.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_244(N, ARM::t2SMULBB, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$a, GPR:i32<<P:Predicate_sext_16_node>>:$b)
  // Emits: (SMULBB:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 5  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (Predicate_sext_16_node(N0.getNode())) {
      SDValue N1 = N->getOperand(1);
      if (Predicate_sext_16_node(N1.getNode())) {
        SDNode *Result = Emit_44(N, ARM::SMULBB, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (mul:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (MUL:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_56(N, ARM::MUL, MVT::i32);
    return Result;
  }

  // Pattern: (mul:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tMUL:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_66(N, ARM::tMUL, MVT::i32);
    return Result;
  }

  // Pattern: (mul:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (t2MUL:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_44(N, ARM::t2MUL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MUL_v8i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VMULv8i8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MUL_v16i8(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VMULv16i8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MUL_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (mul:v4i16 DPR:v4i16:$src1, (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
      // Emits: (VMULslv4i16:v4i16 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 9  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N10.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_126(N, ARM::VMULslv4i16, MVT::v4i16);
            return Result;
          }
        }
      }

      // Pattern: (mul:v4i16 (NEONvduplane:v4i16 DPR_8:v4i16:$src2, (imm:i32):$lane), DPR:v4i16:$src1)
      // Emits: (VMULslv4i16:v4i16 DPR:v4i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDValue N1 = N->getOperand(1);
          if (N00.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_128(N, ARM::VMULslv4i16, MVT::v4i16);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
    // Emits: (VMULv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VMULv4i16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_259(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i16_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N10, Tmp3), 0);
  SDValue Tmp5 = Transform_SubReg_i16_lane(Tmp2.getNode());
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N0, Tmp4, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
DISABLE_INLINE SDNode *Emit_260(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_DSubReg_i16_reg(Tmp2.getNode());
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp3), 0);
  SDValue Tmp5 = Transform_SubReg_i16_lane(Tmp2.getNode());
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { N1, Tmp4, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
SDNode *Select_ISD_MUL_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:v8i16 QPR:v8i16:$src1, (NEONvduplane:v8i16 DPR_8:v4i16:$src2, (imm:i32):$lane))
    // Emits: (VMULslv8i16:v8i16 QPR:v8i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
    // Pattern complexity = 9  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            N10.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_126(N, ARM::VMULslv8i16, MVT::v8i16);
          return Result;
        }
      }
    }

    // Pattern: (mul:v8i16 (NEONvduplane:v8i16 DPR_8:v4i16:$src2, (imm:i32):$lane), QPR:v8i16:$src1)
    // Emits: (VMULslv8i16:v8i16 QPR:v8i16:$src1, DPR_8:v4i16:$src2, (imm:i32):$lane)
    // Pattern complexity = 9  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        SDValue N1 = N->getOperand(1);
        if (N00.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_128(N, ARM::VMULslv8i16, MVT::v8i16);
          return Result;
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:v8i16 QPR:v8i16:$src1, (NEONvduplane:v8i16 QPR:v8i16:$src2, (imm:i32):$lane))
    // Emits: (VMULslv8i16:v8i16 QPR:v8i16:$src1, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src2, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 9  cost = 2  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            N10.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_259(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMULslv8i16, MVT::v4i16, MVT::v8i16);
          return Result;
        }
      }
    }

    // Pattern: (mul:v8i16 (NEONvduplane:v8i16 QPR:v8i16:$src2, (imm:i32):$lane), QPR:v8i16:$src1)
    // Emits: (VMULslv8i16:v8i16 QPR:v8i16:$src1, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src2, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 9  cost = 2  size = 0
    if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        SDValue N1 = N->getOperand(1);
        if (N00.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_260(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMULslv8i16, MVT::v4i16, MVT::v8i16);
          return Result;
        }
      }
    }
  }

  // Pattern: (mul:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
  // Emits: (VMULv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VMULv8i16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MUL_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (mul:v2i32 DPR:v2i32:$src1, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
      // Emits: (VMULslv2i32:v2i32 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 9  cost = 1  size = 0
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N10.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_126(N, ARM::VMULslv2i32, MVT::v2i32);
            return Result;
          }
        }
      }

      // Pattern: (mul:v2i32 (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), DPR:v2i32:$src1)
      // Emits: (VMULslv2i32:v2i32 DPR:v2i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
      // Pattern complexity = 9  cost = 1  size = 0
      if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDValue N1 = N->getOperand(1);
          if (N00.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_128(N, ARM::VMULslv2i32, MVT::v2i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VMULv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VMULv2i32, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MUL_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:v4i32 QPR:v4i32:$src1, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane))
    // Emits: (VMULslv4i32:v4i32 QPR:v4i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
    // Pattern complexity = 9  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            N10.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_126(N, ARM::VMULslv4i32, MVT::v4i32);
          return Result;
        }
      }
    }

    // Pattern: (mul:v4i32 (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src2, (imm:i32):$lane), QPR:v4i32:$src1)
    // Emits: (VMULslv4i32:v4i32 QPR:v4i32:$src1, DPR_VFP2:v2i32:$src2, (imm:i32):$lane)
    // Pattern complexity = 9  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        SDValue N1 = N->getOperand(1);
        if (N00.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_128(N, ARM::VMULslv4i32, MVT::v4i32);
          return Result;
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (mul:v4i32 QPR:v4i32:$src1, (NEONvduplane:v4i32 QPR:v4i32:$src2, (imm:i32):$lane))
    // Emits: (VMULslv4i32:v4i32 QPR:v4i32:$src1, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 9  cost = 2  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            N10.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_210(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMULslv4i32, MVT::v2i32, MVT::v4i32);
          return Result;
        }
      }
    }

    // Pattern: (mul:v4i32 (NEONvduplane:v4i32 QPR:v4i32:$src2, (imm:i32):$lane), QPR:v4i32:$src1)
    // Emits: (VMULslv4i32:v4i32 QPR:v4i32:$src1, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src2, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
    // Pattern complexity = 9  cost = 2  size = 0
    if (N0.getNode()->getOpcode() == ARMISD::VDUPLANE) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        SDValue N1 = N->getOperand(1);
        if (N00.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_211(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMULslv4i32, MVT::v2i32, MVT::v4i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (mul:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
  // Emits: (VMULv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VMULv4i32, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MULHS_i32(SDNode *N) {

  // Pattern: (mulhs:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (SMMUL:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDNode *Result = Emit_44(N, ARM::SMMUL, MVT::i32);
    return Result;
  }

  // Pattern: (mulhs:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (t2SMMUL:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_44(N, ARM::t2SMMUL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_261(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp3 = Transform_hi16(Tmp2.getNode());
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_262(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N1100 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N11000 = N1100.getNode()->getOperand(0);
  SDValue N11001 = N1100.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N1110 = N111.getNode()->getOperand(0);
  SDValue N1111 = N111.getNode()->getOperand(1);
  SDValue N11100 = N1110.getNode()->getOperand(0);
  SDValue N11101 = N1110.getNode()->getOperand(1);
  SDValue Tmp13 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp14 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N000, Tmp13, Tmp14);
}
DISABLE_INLINE SDNode *Emit_263(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N100, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_264(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xFFFFULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_265(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0x0ULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N10, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_266(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N10, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_267(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0x10ULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N10, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_268(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N1000 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N10000 = N1000.getNode()->getOperand(0);
  SDValue N10001 = N1000.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1010 = N101.getNode()->getOperand(0);
  SDValue N1011 = N101.getNode()->getOperand(1);
  SDValue N10100 = N1010.getNode()->getOperand(0);
  SDValue N10101 = N1010.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N1100 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue Tmp13 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp14 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N000, Tmp13, Tmp14);
}
DISABLE_INLINE SDNode *Emit_269(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N00000 = N0000.getNode()->getOperand(0);
  SDValue N00001 = N0000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N0010 = N001.getNode()->getOperand(0);
  SDValue N0011 = N001.getNode()->getOperand(1);
  SDValue N00100 = N0010.getNode()->getOperand(0);
  SDValue N00101 = N0010.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Tmp13 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp14 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00000, Tmp13, Tmp14);
}
DISABLE_INLINE SDNode *Emit_270(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N01000 = N0100.getNode()->getOperand(0);
  SDValue N01001 = N0100.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N0110 = N011.getNode()->getOperand(0);
  SDValue N0111 = N011.getNode()->getOperand(1);
  SDValue N01100 = N0110.getNode()->getOperand(0);
  SDValue N01101 = N0110.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Tmp13 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp14 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0000, Tmp13, Tmp14);
}
DISABLE_INLINE SDNode *Emit_271(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N001)->getZExtValue()), MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N000, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_272(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0x0ULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N00, Tmp4, Tmp5, Tmp6 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_273(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N00, Tmp3, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_274(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp5 = CurDAG->getTargetConstant(0x10ULL, MVT::i32);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N10, N00, Tmp5, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_OR_i32(SDNode *N) {

  // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))))
  // Emits: (REV16:i32 GPR:i32:$src)
  // Pattern complexity = 73  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(255)) &&
          N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::OR) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::AND) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp3 &&
                    CheckAndMask(N100, Tmp3, INT64_C(65280)) &&
                    N100.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N1000 = N100.getNode()->getOperand(0);
                  if (N000 == N1000) {
                    SDValue N1001 = N100.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(8)) {
                        SDValue N11 = N1.getNode()->getOperand(1);
                        if (N11.getNode()->getOpcode() == ISD::OR) {
                          SDValue N110 = N11.getNode()->getOperand(0);
                          if (N110.getNode()->getOpcode() == ISD::AND) {
                            SDValue N1100 = N110.getNode()->getOperand(0);
                            SDValue N1101 = N110.getNode()->getOperand(1);
                            ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                            if (Tmp6 &&
                                CheckAndMask(N1100, Tmp6, INT64_C(16711680)) &&
                                N1100.getNode()->getOpcode() == ISD::SRL) {
                              SDValue N11000 = N1100.getNode()->getOperand(0);
                              if (N000 == N11000) {
                                SDValue N11001 = N1100.getNode()->getOperand(1);
                                ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                if (Tmp7) {
                                  int64_t CN8 = Tmp7->getSExtValue();
                                  if (CN8 == INT64_C(8)) {
                                    SDValue N111 = N11.getNode()->getOperand(1);
                                    if (N111.getNode()->getOpcode() == ISD::AND) {
                                      SDValue N1110 = N111.getNode()->getOperand(0);
                                      SDValue N1111 = N111.getNode()->getOperand(1);
                                      ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                      if (Tmp9 &&
                                          CheckAndMask(N1110, Tmp9, INT64_C(4278190080)) &&
                                          N1110.getNode()->getOpcode() == ISD::SHL) {
                                        SDValue N11100 = N1110.getNode()->getOperand(0);
                                        if (N000 == N11100) {
                                          SDValue N11101 = N1110.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                          if (Tmp10) {
                                            int64_t CN11 = Tmp10->getSExtValue();
                                            if (CN11 == INT64_C(8) &&
                                                N001.getValueType() == MVT::i32 &&
                                                N1001.getValueType() == MVT::i32 &&
                                                N11001.getValueType() == MVT::i32 &&
                                                N11101.getValueType() == MVT::i32) {
                                              SDNode *Result = Emit_262(N, ARM::REV16, MVT::i32);
                                              return Result;
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32))))
  // Emits: (tREV16:i32 tGPR:i32:$src)
  // Pattern complexity = 73  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(255)) &&
          N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::OR) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::AND) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp3 &&
                    CheckAndMask(N100, Tmp3, INT64_C(65280)) &&
                    N100.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N1000 = N100.getNode()->getOperand(0);
                  if (N000 == N1000) {
                    SDValue N1001 = N100.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(8)) {
                        SDValue N11 = N1.getNode()->getOperand(1);
                        if (N11.getNode()->getOpcode() == ISD::OR) {
                          SDValue N110 = N11.getNode()->getOperand(0);
                          if (N110.getNode()->getOpcode() == ISD::AND) {
                            SDValue N1100 = N110.getNode()->getOperand(0);
                            SDValue N1101 = N110.getNode()->getOperand(1);
                            ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                            if (Tmp6 &&
                                CheckAndMask(N1100, Tmp6, INT64_C(16711680)) &&
                                N1100.getNode()->getOpcode() == ISD::SRL) {
                              SDValue N11000 = N1100.getNode()->getOperand(0);
                              if (N000 == N11000) {
                                SDValue N11001 = N1100.getNode()->getOperand(1);
                                ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                if (Tmp7) {
                                  int64_t CN8 = Tmp7->getSExtValue();
                                  if (CN8 == INT64_C(8)) {
                                    SDValue N111 = N11.getNode()->getOperand(1);
                                    if (N111.getNode()->getOpcode() == ISD::AND) {
                                      SDValue N1110 = N111.getNode()->getOperand(0);
                                      SDValue N1111 = N111.getNode()->getOperand(1);
                                      ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                      if (Tmp9 &&
                                          CheckAndMask(N1110, Tmp9, INT64_C(4278190080)) &&
                                          N1110.getNode()->getOpcode() == ISD::SHL) {
                                        SDValue N11100 = N1110.getNode()->getOperand(0);
                                        if (N000 == N11100) {
                                          SDValue N11101 = N1110.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                          if (Tmp10) {
                                            int64_t CN11 = Tmp10->getSExtValue();
                                            if (CN11 == INT64_C(8) &&
                                                N001.getValueType() == MVT::i32 &&
                                                N1001.getValueType() == MVT::i32 &&
                                                N11001.getValueType() == MVT::i32 &&
                                                N11101.getValueType() == MVT::i32) {
                                              SDNode *Result = Emit_262(N, ARM::tREV16, MVT::i32);
                                              return Result;
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))))
  // Emits: (t2REV16:i32 GPR:i32:$src)
  // Pattern complexity = 73  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(255)) &&
          N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::OR) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::AND) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp3 &&
                    CheckAndMask(N100, Tmp3, INT64_C(65280)) &&
                    N100.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N1000 = N100.getNode()->getOperand(0);
                  if (N000 == N1000) {
                    SDValue N1001 = N100.getNode()->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(8)) {
                        SDValue N11 = N1.getNode()->getOperand(1);
                        if (N11.getNode()->getOpcode() == ISD::OR) {
                          SDValue N110 = N11.getNode()->getOperand(0);
                          if (N110.getNode()->getOpcode() == ISD::AND) {
                            SDValue N1100 = N110.getNode()->getOperand(0);
                            SDValue N1101 = N110.getNode()->getOperand(1);
                            ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                            if (Tmp6 &&
                                CheckAndMask(N1100, Tmp6, INT64_C(16711680)) &&
                                N1100.getNode()->getOpcode() == ISD::SRL) {
                              SDValue N11000 = N1100.getNode()->getOperand(0);
                              if (N000 == N11000) {
                                SDValue N11001 = N1100.getNode()->getOperand(1);
                                ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                if (Tmp7) {
                                  int64_t CN8 = Tmp7->getSExtValue();
                                  if (CN8 == INT64_C(8)) {
                                    SDValue N111 = N11.getNode()->getOperand(1);
                                    if (N111.getNode()->getOpcode() == ISD::AND) {
                                      SDValue N1110 = N111.getNode()->getOperand(0);
                                      SDValue N1111 = N111.getNode()->getOperand(1);
                                      ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                      if (Tmp9 &&
                                          CheckAndMask(N1110, Tmp9, INT64_C(4278190080)) &&
                                          N1110.getNode()->getOpcode() == ISD::SHL) {
                                        SDValue N11100 = N1110.getNode()->getOperand(0);
                                        if (N000 == N11100) {
                                          SDValue N11101 = N1110.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                          if (Tmp10) {
                                            int64_t CN11 = Tmp10->getSExtValue();
                                            if (CN11 == INT64_C(8) &&
                                                N001.getValueType() == MVT::i32 &&
                                                N1001.getValueType() == MVT::i32 &&
                                                N11001.getValueType() == MVT::i32 &&
                                                N11101.getValueType() == MVT::i32) {
                                              SDNode *Result = Emit_262(N, ARM::t2REV16, MVT::i32);
                                              return Result;
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(255)) &&
          N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::OR) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::OR) {
                SDValue N100 = N10.getNode()->getOperand(0);
                if (N100.getNode()->getOpcode() == ISD::AND) {
                  SDValue N1000 = N100.getNode()->getOperand(0);
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N1001.getNode());
                  if (Tmp3) {

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)))
                    // Emits: (REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(16711680)) &&
                        N1000.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(65280)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(4278190080)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)))
                    // Emits: (REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(65280)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(4278190080)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(16711680)) &&
                                            N110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)))
                    // Emits: (REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(4278190080)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(65280)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(16711680)) &&
                                            N110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)))
                    // Emits: (REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(16711680)) &&
                        N1000.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(4278190080)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(65280)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)))
                    // Emits: (REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(4278190080)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(16711680)) &&
                                  N1010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(65280)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::AND) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp3) {
                  if (CheckAndMask(N100, Tmp3, INT64_C(4278190080)) &&
                      N100.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6) {

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))))
                                // Emits: (REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(65280)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(16711680)) &&
                                              N1110.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))))
                                // Emits: (REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(16711680)) &&
                                    N1100.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(65280)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  if (CheckAndMask(N100, Tmp3, INT64_C(16711680)) &&
                      N100.getNode()->getOpcode() == ISD::SRL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6) {

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))))
                                // Emits: (REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(65280)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(4278190080)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))))
                                // Emits: (REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(4278190080)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(65280)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }

                  // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))))
                  // Emits: (REV16:i32 GPR:i32:$src)
                  // Pattern complexity = 73  cost = 1  size = 0
                  if (CheckAndMask(N100, Tmp3, INT64_C(65280)) &&
                      N100.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1100, Tmp6, INT64_C(4278190080)) &&
                                  N1100.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N11000 = N1100.getNode()->getOperand(0);
                                if (N000 == N11000) {
                                  SDValue N11001 = N1100.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N111 = N11.getNode()->getOperand(1);
                                      if (N111.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N1110 = N111.getNode()->getOperand(0);
                                        SDValue N1111 = N111.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N1110, Tmp9, INT64_C(16711680)) &&
                                            N1110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N11100 = N1110.getNode()->getOperand(0);
                                          if (N000 == N11100) {
                                            SDValue N11101 = N1110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N1001.getValueType() == MVT::i32 &&
                                                  N11001.getValueType() == MVT::i32 &&
                                                  N11101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_262(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::OR) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::AND) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(65280)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(16711680)) &&
                        N0010.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(4278190080)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(16711680)) &&
                N0000.getNode()->getOpcode() == ISD::SRL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(65280)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(4278190080)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(65280)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(4278190080)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(16711680)) &&
                                  N010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(4278190080)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(65280)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(16711680)) &&
                                  N010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(16711680)) &&
                N0000.getNode()->getOpcode() == ISD::SRL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(4278190080)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(65280)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(4278190080)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(16711680)) &&
                        N0010.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(65280)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N00.getNode()->getOpcode() == ISD::AND) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          if (CheckAndMask(N000, Tmp0, INT64_C(4278190080)) &&
              N000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(65280)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(16711680)) &&
                                    N0110.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(16711680)) &&
                          N0100.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(65280)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (CheckAndMask(N000, Tmp0, INT64_C(16711680)) &&
              N000.getNode()->getOpcode() == ISD::SRL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(65280)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(4278190080)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(4278190080)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(65280)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (CheckAndMask(N000, Tmp0, INT64_C(65280)) &&
              N000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(16711680)) &&
                          N0100.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(4278190080)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(4278190080)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(16711680)) &&
                                    N0110.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(255)) &&
          N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::OR) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::OR) {
                SDValue N100 = N10.getNode()->getOperand(0);
                if (N100.getNode()->getOpcode() == ISD::AND) {
                  SDValue N1000 = N100.getNode()->getOperand(0);
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N1001.getNode());
                  if (Tmp3) {

                    // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)))
                    // Emits: (tREV16:i32 tGPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(16711680)) &&
                        N1000.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(65280)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(4278190080)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)))
                    // Emits: (tREV16:i32 tGPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(65280)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(4278190080)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(16711680)) &&
                                            N110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)))
                    // Emits: (tREV16:i32 tGPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(4278190080)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(65280)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(16711680)) &&
                                            N110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)))
                    // Emits: (tREV16:i32 tGPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(16711680)) &&
                        N1000.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(4278190080)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(65280)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)))
                    // Emits: (tREV16:i32 tGPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(4278190080)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(16711680)) &&
                                  N1010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(65280)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::AND) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp3) {
                  if (CheckAndMask(N100, Tmp3, INT64_C(4278190080)) &&
                      N100.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6) {

                                // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32))))
                                // Emits: (tREV16:i32 tGPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(65280)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(16711680)) &&
                                              N1110.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }

                                // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32))))
                                // Emits: (tREV16:i32 tGPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(16711680)) &&
                                    N1100.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(65280)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  if (CheckAndMask(N100, Tmp3, INT64_C(16711680)) &&
                      N100.getNode()->getOpcode() == ISD::SRL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6) {

                                // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32))))
                                // Emits: (tREV16:i32 tGPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(65280)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(4278190080)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }

                                // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32))))
                                // Emits: (tREV16:i32 tGPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(4278190080)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(65280)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }

                  // Pattern: (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32))))
                  // Emits: (tREV16:i32 tGPR:i32:$src)
                  // Pattern complexity = 73  cost = 1  size = 0
                  if (CheckAndMask(N100, Tmp3, INT64_C(65280)) &&
                      N100.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1100, Tmp6, INT64_C(4278190080)) &&
                                  N1100.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N11000 = N1100.getNode()->getOperand(0);
                                if (N000 == N11000) {
                                  SDValue N11001 = N1100.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N111 = N11.getNode()->getOperand(1);
                                      if (N111.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N1110 = N111.getNode()->getOperand(0);
                                        SDValue N1111 = N111.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N1110, Tmp9, INT64_C(16711680)) &&
                                            N1110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N11100 = N1110.getNode()->getOperand(0);
                                          if (N000 == N11100) {
                                            SDValue N11101 = N1110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N1001.getValueType() == MVT::i32 &&
                                                  N11001.getValueType() == MVT::i32 &&
                                                  N11101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_262(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::OR) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::AND) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
            // Emits: (tREV16:i32 tGPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(65280)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(16711680)) &&
                        N0010.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(4278190080)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
            // Emits: (tREV16:i32 tGPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(16711680)) &&
                N0000.getNode()->getOpcode() == ISD::SRL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(65280)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(4278190080)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
            // Emits: (tREV16:i32 tGPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(65280)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(4278190080)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(16711680)) &&
                                  N010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
            // Emits: (tREV16:i32 tGPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(4278190080)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(65280)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(16711680)) &&
                                  N010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
            // Emits: (tREV16:i32 tGPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(16711680)) &&
                N0000.getNode()->getOpcode() == ISD::SRL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(4278190080)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(65280)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
            // Emits: (tREV16:i32 tGPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(4278190080)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(16711680)) &&
                        N0010.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(65280)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::tREV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N00.getNode()->getOpcode() == ISD::AND) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          if (CheckAndMask(N000, Tmp0, INT64_C(4278190080)) &&
              N000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32))), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (tREV16:i32 tGPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(65280)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(16711680)) &&
                                    N0110.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32))), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (tREV16:i32 tGPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(16711680)) &&
                          N0100.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(65280)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (CheckAndMask(N000, Tmp0, INT64_C(16711680)) &&
              N000.getNode()->getOpcode() == ISD::SRL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32))), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (tREV16:i32 tGPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(65280)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(4278190080)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32))), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (tREV16:i32 tGPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(4278190080)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(65280)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (CheckAndMask(N000, Tmp0, INT64_C(65280)) &&
              N000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32))), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (tREV16:i32 tGPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(16711680)) &&
                          N0100.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(4278190080)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (shl:i32 tGPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 16711680:i32))), (and:i32 (srl:i32 tGPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (tREV16:i32 tGPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(4278190080)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(16711680)) &&
                                    N0110.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::tREV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(255)) &&
          N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp1) {
          int64_t CN2 = Tmp1->getSExtValue();
          if (CN2 == INT64_C(8)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::OR) {
              SDValue N10 = N1.getNode()->getOperand(0);
              if (N10.getNode()->getOpcode() == ISD::OR) {
                SDValue N100 = N10.getNode()->getOperand(0);
                if (N100.getNode()->getOpcode() == ISD::AND) {
                  SDValue N1000 = N100.getNode()->getOperand(0);
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N1001.getNode());
                  if (Tmp3) {

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)))
                    // Emits: (t2REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(16711680)) &&
                        N1000.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(65280)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(4278190080)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)))
                    // Emits: (t2REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(65280)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(4278190080)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(16711680)) &&
                                            N110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)))
                    // Emits: (t2REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(4278190080)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(65280)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(16711680)) &&
                                            N110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)))
                    // Emits: (t2REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(16711680)) &&
                        N1000.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(4278190080)) &&
                                  N1010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(65280)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }

                    // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)))
                    // Emits: (t2REV16:i32 GPR:i32:$src)
                    // Pattern complexity = 73  cost = 1  size = 0
                    if (CheckAndMask(N1000, Tmp3, INT64_C(4278190080)) &&
                        N1000.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N10000 = N1000.getNode()->getOperand(0);
                      if (N000 == N10000) {
                        SDValue N10001 = N1000.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N10001.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N101 = N10.getNode()->getOperand(1);
                            if (N101.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1010 = N101.getNode()->getOperand(0);
                              SDValue N1011 = N101.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1010, Tmp6, INT64_C(16711680)) &&
                                  N1010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N10100 = N1010.getNode()->getOperand(0);
                                if (N000 == N10100) {
                                  SDValue N10101 = N1010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N10101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N11 = N1.getNode()->getOperand(1);
                                      if (N11.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N110 = N11.getNode()->getOperand(0);
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N110, Tmp9, INT64_C(65280)) &&
                                            N110.getNode()->getOpcode() == ISD::SHL) {
                                          SDValue N1100 = N110.getNode()->getOperand(0);
                                          if (N000 == N1100) {
                                            SDValue N1101 = N110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N1101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N10001.getValueType() == MVT::i32 &&
                                                  N10101.getValueType() == MVT::i32 &&
                                                  N1101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_268(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::AND) {
                SDValue N100 = N10.getNode()->getOperand(0);
                SDValue N101 = N10.getNode()->getOperand(1);
                ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N101.getNode());
                if (Tmp3) {
                  if (CheckAndMask(N100, Tmp3, INT64_C(4278190080)) &&
                      N100.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6) {

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))))
                                // Emits: (t2REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(65280)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(16711680)) &&
                                              N1110.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))))
                                // Emits: (t2REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(16711680)) &&
                                    N1100.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(65280)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  if (CheckAndMask(N100, Tmp3, INT64_C(16711680)) &&
                      N100.getNode()->getOpcode() == ISD::SRL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6) {

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))))
                                // Emits: (t2REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(65280)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(4278190080)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }

                                // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))))
                                // Emits: (t2REV16:i32 GPR:i32:$src)
                                // Pattern complexity = 73  cost = 1  size = 0
                                if (CheckAndMask(N1100, Tmp6, INT64_C(4278190080)) &&
                                    N1100.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N11000 = N1100.getNode()->getOperand(0);
                                  if (N000 == N11000) {
                                    SDValue N11001 = N1100.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N111 = N11.getNode()->getOperand(1);
                                        if (N111.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N1110 = N111.getNode()->getOperand(0);
                                          SDValue N1111 = N111.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N1110, Tmp9, INT64_C(65280)) &&
                                              N1110.getNode()->getOpcode() == ISD::SHL) {
                                            SDValue N11100 = N1110.getNode()->getOperand(0);
                                            if (N000 == N11100) {
                                              SDValue N11101 = N1110.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N001.getValueType() == MVT::i32 &&
                                                    N1001.getValueType() == MVT::i32 &&
                                                    N11001.getValueType() == MVT::i32 &&
                                                    N11101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_262(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }

                  // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))))
                  // Emits: (t2REV16:i32 GPR:i32:$src)
                  // Pattern complexity = 73  cost = 1  size = 0
                  if (CheckAndMask(N100, Tmp3, INT64_C(65280)) &&
                      N100.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N1000 = N100.getNode()->getOperand(0);
                    if (N000 == N1000) {
                      SDValue N1001 = N100.getNode()->getOperand(1);
                      ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1001.getNode());
                      if (Tmp4) {
                        int64_t CN5 = Tmp4->getSExtValue();
                        if (CN5 == INT64_C(8)) {
                          SDValue N11 = N1.getNode()->getOperand(1);
                          if (N11.getNode()->getOpcode() == ISD::OR) {
                            SDValue N110 = N11.getNode()->getOperand(0);
                            if (N110.getNode()->getOpcode() == ISD::AND) {
                              SDValue N1100 = N110.getNode()->getOperand(0);
                              SDValue N1101 = N110.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N1101.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N1100, Tmp6, INT64_C(4278190080)) &&
                                  N1100.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N11000 = N1100.getNode()->getOperand(0);
                                if (N000 == N11000) {
                                  SDValue N11001 = N1100.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N11001.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N111 = N11.getNode()->getOperand(1);
                                      if (N111.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N1110 = N111.getNode()->getOperand(0);
                                        SDValue N1111 = N111.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N1111.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N1110, Tmp9, INT64_C(16711680)) &&
                                            N1110.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N11100 = N1110.getNode()->getOperand(0);
                                          if (N000 == N11100) {
                                            SDValue N11101 = N1110.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N11101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N001.getValueType() == MVT::i32 &&
                                                  N1001.getValueType() == MVT::i32 &&
                                                  N11001.getValueType() == MVT::i32 &&
                                                  N11101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_262(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::OR) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::AND) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (t2REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(65280)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(16711680)) &&
                        N0010.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(4278190080)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (t2REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(16711680)) &&
                N0000.getNode()->getOpcode() == ISD::SRL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(65280)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(4278190080)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (t2REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(65280)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(4278190080)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(16711680)) &&
                                  N010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (t2REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(4278190080)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(65280)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(16711680)) &&
                                  N010.getNode()->getOpcode() == ISD::SRL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (t2REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(16711680)) &&
                N0000.getNode()->getOpcode() == ISD::SRL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(4278190080)) &&
                        N0010.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(65280)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (or:i32 (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32)), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32)), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
            // Emits: (t2REV16:i32 GPR:i32:$src)
            // Pattern complexity = 73  cost = 1  size = 0
            if (CheckAndMask(N0000, Tmp0, INT64_C(4278190080)) &&
                N0000.getNode()->getOpcode() == ISD::SHL) {
              SDValue N00000 = N0000.getNode()->getOperand(0);
              SDValue N00001 = N0000.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N00001.getNode());
              if (Tmp1) {
                int64_t CN2 = Tmp1->getSExtValue();
                if (CN2 == INT64_C(8)) {
                  SDValue N001 = N00.getNode()->getOperand(1);
                  if (N001.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0010 = N001.getNode()->getOperand(0);
                    SDValue N0011 = N001.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0011.getNode());
                    if (Tmp3 &&
                        CheckAndMask(N0010, Tmp3, INT64_C(16711680)) &&
                        N0010.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N00100 = N0010.getNode()->getOperand(0);
                      if (N00000 == N00100) {
                        SDValue N00101 = N0010.getNode()->getOperand(1);
                        ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N00101.getNode());
                        if (Tmp4) {
                          int64_t CN5 = Tmp4->getSExtValue();
                          if (CN5 == INT64_C(8)) {
                            SDValue N01 = N0.getNode()->getOperand(1);
                            if (N01.getNode()->getOpcode() == ISD::AND) {
                              SDValue N010 = N01.getNode()->getOperand(0);
                              SDValue N011 = N01.getNode()->getOperand(1);
                              ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N011.getNode());
                              if (Tmp6 &&
                                  CheckAndMask(N010, Tmp6, INT64_C(65280)) &&
                                  N010.getNode()->getOpcode() == ISD::SHL) {
                                SDValue N0100 = N010.getNode()->getOperand(0);
                                if (N00000 == N0100) {
                                  SDValue N0101 = N010.getNode()->getOperand(1);
                                  ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N0101.getNode());
                                  if (Tmp7) {
                                    int64_t CN8 = Tmp7->getSExtValue();
                                    if (CN8 == INT64_C(8)) {
                                      SDValue N1 = N->getOperand(1);
                                      if (N1.getNode()->getOpcode() == ISD::AND) {
                                        SDValue N10 = N1.getNode()->getOperand(0);
                                        SDValue N11 = N1.getNode()->getOperand(1);
                                        ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                        if (Tmp9 &&
                                            CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                            N10.getNode()->getOpcode() == ISD::SRL) {
                                          SDValue N100 = N10.getNode()->getOperand(0);
                                          if (N00000 == N100) {
                                            SDValue N101 = N10.getNode()->getOperand(1);
                                            ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                            if (Tmp10) {
                                              int64_t CN11 = Tmp10->getSExtValue();
                                              if (CN11 == INT64_C(8) &&
                                                  N00001.getValueType() == MVT::i32 &&
                                                  N00101.getValueType() == MVT::i32 &&
                                                  N0101.getValueType() == MVT::i32 &&
                                                  N101.getValueType() == MVT::i32) {
                                                SDNode *Result = Emit_269(N, ARM::t2REV16, MVT::i32);
                                                return Result;
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N00.getNode()->getOpcode() == ISD::AND) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          if (CheckAndMask(N000, Tmp0, INT64_C(4278190080)) &&
              N000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (t2REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(65280)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(16711680)) &&
                                    N0110.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (t2REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(16711680)) &&
                          N0100.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(65280)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (CheckAndMask(N000, Tmp0, INT64_C(16711680)) &&
              N000.getNode()->getOpcode() == ISD::SRL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (t2REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(65280)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(4278190080)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (t2REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(4278190080)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(65280)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (CheckAndMask(N000, Tmp0, INT64_C(65280)) &&
              N000.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0000 = N000.getNode()->getOperand(0);
            SDValue N0001 = N000.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N0001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::OR) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N010.getNode()->getOpcode() == ISD::AND) {
                    SDValue N0100 = N010.getNode()->getOperand(0);
                    SDValue N0101 = N010.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N0101.getNode());
                    if (Tmp3) {

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32), (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (t2REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(16711680)) &&
                          N0100.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(4278190080)) &&
                                    N0110.getNode()->getOpcode() == ISD::SHL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }

                      // Pattern: (or:i32 (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 65280:i32), (or:i32 (and:i32 (shl:i32 GPR:i32:$src, 8:i32), 4278190080:i32), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 16711680:i32))), (and:i32 (srl:i32 GPR:i32:$src, 8:i32), 255:i32))
                      // Emits: (t2REV16:i32 GPR:i32:$src)
                      // Pattern complexity = 73  cost = 1  size = 0
                      if (CheckAndMask(N0100, Tmp3, INT64_C(4278190080)) &&
                          N0100.getNode()->getOpcode() == ISD::SHL) {
                        SDValue N01000 = N0100.getNode()->getOperand(0);
                        if (N0000 == N01000) {
                          SDValue N01001 = N0100.getNode()->getOperand(1);
                          ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N01001.getNode());
                          if (Tmp4) {
                            int64_t CN5 = Tmp4->getSExtValue();
                            if (CN5 == INT64_C(8)) {
                              SDValue N011 = N01.getNode()->getOperand(1);
                              if (N011.getNode()->getOpcode() == ISD::AND) {
                                SDValue N0110 = N011.getNode()->getOperand(0);
                                SDValue N0111 = N011.getNode()->getOperand(1);
                                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N0111.getNode());
                                if (Tmp6 &&
                                    CheckAndMask(N0110, Tmp6, INT64_C(16711680)) &&
                                    N0110.getNode()->getOpcode() == ISD::SRL) {
                                  SDValue N01100 = N0110.getNode()->getOperand(0);
                                  if (N0000 == N01100) {
                                    SDValue N01101 = N0110.getNode()->getOperand(1);
                                    ConstantSDNode *Tmp7 = dyn_cast<ConstantSDNode>(N01101.getNode());
                                    if (Tmp7) {
                                      int64_t CN8 = Tmp7->getSExtValue();
                                      if (CN8 == INT64_C(8)) {
                                        SDValue N1 = N->getOperand(1);
                                        if (N1.getNode()->getOpcode() == ISD::AND) {
                                          SDValue N10 = N1.getNode()->getOperand(0);
                                          SDValue N11 = N1.getNode()->getOperand(1);
                                          ConstantSDNode *Tmp9 = dyn_cast<ConstantSDNode>(N11.getNode());
                                          if (Tmp9 &&
                                              CheckAndMask(N10, Tmp9, INT64_C(255)) &&
                                              N10.getNode()->getOpcode() == ISD::SRL) {
                                            SDValue N100 = N10.getNode()->getOperand(0);
                                            if (N0000 == N100) {
                                              SDValue N101 = N10.getNode()->getOperand(1);
                                              ConstantSDNode *Tmp10 = dyn_cast<ConstantSDNode>(N101.getNode());
                                              if (Tmp10) {
                                                int64_t CN11 = Tmp10->getSExtValue();
                                                if (CN11 == INT64_C(8) &&
                                                    N0001.getValueType() == MVT::i32 &&
                                                    N01001.getValueType() == MVT::i32 &&
                                                    N01101.getValueType() == MVT::i32 &&
                                                    N101.getValueType() == MVT::i32) {
                                                  SDNode *Result = Emit_270(N, ARM::t2REV16, MVT::i32);
                                                  return Result;
                                                }
                                              }
                                            }
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 4294901760:i32), (and:i32 (sra:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt), 65535:i32))
  // Emits: (PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
  // Pattern complexity = 26  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp1 &&
              CheckAndMask(N10, Tmp1, INT64_C(65535)) &&
              N10.getNode()->getOpcode() == ISD::SRA) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant &&
                Predicate_imm16_31(N101.getNode()) &&
                N101.getValueType() == MVT::i32) {
              SDNode *Result = Emit_263(N, ARM::PKHTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp1 &&
              CheckAndMask(N10, Tmp1, INT64_C(65535))) {

            // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 4294901760:i32), (and:i32 (sra:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt), 65535:i32))
            // Emits: (t2PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
            // Pattern complexity = 26  cost = 1  size = 0
            if (N10.getNode()->getOpcode() == ISD::SRA) {
              SDValue N100 = N10.getNode()->getOperand(0);
              SDValue N101 = N10.getNode()->getOperand(1);
              if (N101.getNode()->getOpcode() == ISD::Constant &&
                  Predicate_imm16_31(N101.getNode()) &&
                  N101.getValueType() == MVT::i32) {
                SDNode *Result = Emit_263(N, ARM::t2PKHTB, MVT::i32);
                return Result;
              }
            }

            // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 4294901760:i32), (and:i32 (srl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt), 65535:i32))
            // Emits: (t2PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt)
            // Pattern complexity = 26  cost = 1  size = 0
            if (N10.getNode()->getOpcode() == ISD::SRL) {
              SDValue N100 = N10.getNode()->getOperand(0);
              SDValue N101 = N10.getNode()->getOperand(1);
              if (N101.getNode()->getOpcode() == ISD::Constant &&
                  Predicate_imm1_15(N101.getNode()) &&
                  N101.getValueType() == MVT::i32) {
                SDNode *Result = Emit_263(N, ARM::t2PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 4294901760:i32), (and:i32 (srl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt), 65535:i32))
        // Emits: (PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt)
        // Pattern complexity = 26  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1 &&
                CheckAndMask(N10, Tmp1, INT64_C(65535)) &&
                N10.getNode()->getOpcode() == ISD::SRL) {
              SDValue N100 = N10.getNode()->getOperand(0);
              SDValue N101 = N10.getNode()->getOperand(1);
              if (N101.getNode()->getOpcode() == ISD::Constant &&
                  Predicate_imm1_15(N101.getNode()) &&
                  N101.getValueType() == MVT::i32) {
                SDNode *Result = Emit_263(N, ARM::PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }

        // Pattern: (or:i32 (and:i32 (sra:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt), 65535:i32), (and:i32 GPR:i32:$src1, 4294901760:i32))
        // Emits: (PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
        // Pattern complexity = 26  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535)) &&
            N00.getNode()->getOpcode() == ISD::SRA) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_imm16_31(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp1 &&
                  CheckAndMask(N10, Tmp1, INT64_C(4294901760)) &&
                  N001.getValueType() == MVT::i32) {
                SDNode *Result = Emit_271(N, ARM::PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {

        // Pattern: (or:i32 (and:i32 (sra:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt), 65535:i32), (and:i32 GPR:i32:$src1, 4294901760:i32))
        // Emits: (t2PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
        // Pattern complexity = 26  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::SRA) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_imm16_31(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp1 &&
                  CheckAndMask(N10, Tmp1, INT64_C(4294901760)) &&
                  N001.getValueType() == MVT::i32) {
                SDNode *Result = Emit_271(N, ARM::t2PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }

        // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt), 65535:i32), (and:i32 GPR:i32:$src1, 4294901760:i32))
        // Emits: (t2PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt)
        // Pattern complexity = 26  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::SRL) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_imm1_15(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp1 &&
                  CheckAndMask(N10, Tmp1, INT64_C(4294901760)) &&
                  N001.getValueType() == MVT::i32) {
                SDNode *Result = Emit_271(N, ARM::t2PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {

        // Pattern: (or:i32 (and:i32 (srl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt), 65535:i32), (and:i32 GPR:i32:$src1, 4294901760:i32))
        // Emits: (PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm1_15>>:$shamt)
        // Pattern complexity = 26  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::SRL) {
          SDValue N000 = N00.getNode()->getOperand(0);
          SDValue N001 = N00.getNode()->getOperand(1);
          if (N001.getNode()->getOpcode() == ISD::Constant &&
              Predicate_imm1_15(N001.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp1 &&
                  CheckAndMask(N10, Tmp1, INT64_C(4294901760)) &&
                  N001.getValueType() == MVT::i32) {
                SDNode *Result = Emit_271(N, ARM::PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }

        // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 65535:i32), (and:i32 (shl:i32 GPR:i32:$src2, (imm:i32):$shamt), 4294901760:i32))
        // Emits: (PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
        // Pattern complexity = 25  cost = 1  size = 0
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp1 &&
              CheckAndMask(N10, Tmp1, INT64_C(4294901760)) &&
              N10.getNode()->getOpcode() == ISD::SHL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant &&
                N101.getValueType() == MVT::i32) {
              SDNode *Result = Emit_263(N, ARM::PKHBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 65535:i32), (and:i32 (shl:i32 GPR:i32:$src2, (imm:i32):$shamt), 4294901760:i32))
  // Emits: (t2PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
  // Pattern complexity = 25  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp1 &&
              CheckAndMask(N10, Tmp1, INT64_C(4294901760)) &&
              N10.getNode()->getOpcode() == ISD::SHL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant &&
                N101.getValueType() == MVT::i32) {
              SDNode *Result = Emit_263(N, ARM::t2PKHBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 (shl:i32 GPR:i32:$src2, (imm:i32):$shamt), 4294901760:i32), (and:i32 GPR:i32:$src1, 65535:i32))
  // Emits: (PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
  // Pattern complexity = 25  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(4294901760)) &&
          N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1 &&
                CheckAndMask(N10, Tmp1, INT64_C(65535)) &&
                N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_271(N, ARM::PKHBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i32 (and:i32 (shl:i32 GPR:i32:$src2, (imm:i32):$shamt), 4294901760:i32), (and:i32 GPR:i32:$src1, 65535:i32))
    // Emits: (t2PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32):$shamt)
    // Pattern complexity = 25  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(4294901760)) &&
          N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (N001.getNode()->getOpcode() == ISD::Constant) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1 &&
                CheckAndMask(N10, Tmp1, INT64_C(65535)) &&
                N001.getValueType() == MVT::i32) {
              SDNode *Result = Emit_271(N, ARM::t2PKHBT, MVT::i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (or:i32 GPR:i32:$lhs, (xor:i32 t2_so_reg:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
    // Emits: (t2ORNrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 19  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue CPTmpN10_0;
        SDValue CPTmpN10_1;
        if (SelectT2ShifterOperandReg(N, N10, CPTmpN10_0, CPTmpN10_1)) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_immAllOnes(N11.getNode())) {
            SDNode *Result = Emit_169(N, ARM::t2ORNrs, MVT::i32, CPTmpN10_0, CPTmpN10_1);
            return Result;
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 65535:i32), (and:i32 GPR:i32:$src2, 4294901760:i32))
        // Emits: (t2PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, 0:i32)
        // Pattern complexity = 19  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535))) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1 &&
                CheckAndMask(N10, Tmp1, INT64_C(4294901760))) {
              SDNode *Result = Emit_265(N, ARM::t2PKHBT, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 4294901760:i32), (srl:i32 GPR:i32:$src2, 16:i32))
        // Emits: (t2PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, 16:i32)
        // Pattern complexity = 19  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRL) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(16) &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_267(N, ARM::t2PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {

        // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 65535:i32), (and:i32 GPR:i32:$src2, 4294901760:i32))
        // Emits: (PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, 0:i32)
        // Pattern complexity = 19  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(65535))) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1 &&
                CheckAndMask(N10, Tmp1, INT64_C(4294901760))) {
              SDNode *Result = Emit_265(N, ARM::PKHBT, MVT::i32);
              return Result;
            }
          }
        }

        // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 4294901760:i32), (srl:i32 GPR:i32:$src2, 16:i32))
        // Emits: (PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, 16:i32)
        // Pattern complexity = 19  cost = 1  size = 0
        if (CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRL) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(16) &&
                  N11.getValueType() == MVT::i32) {
                SDNode *Result = Emit_267(N, ARM::PKHTB, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i32 (xor:i32 t2_so_reg:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$lhs)
    // Emits: (t2ORNrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 19  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue CPTmpN00_0;
      SDValue CPTmpN00_1;
      if (SelectT2ShifterOperandReg(N, N00, CPTmpN00_0, CPTmpN00_1)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N01.getNode())) {
          SDNode *Result = Emit_180(N, ARM::t2ORNrs, MVT::i32, CPTmpN00_0, CPTmpN00_1);
          return Result;
        }
      }
    }

    // Pattern: (or:i32 (and:i32 GPR:i32:$src2, 4294901760:i32), (and:i32 GPR:i32:$src1, 65535:i32))
    // Emits: (t2PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, 0:i32)
    // Pattern complexity = 19  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp1 &&
              CheckAndMask(N10, Tmp1, INT64_C(65535))) {
            SDNode *Result = Emit_272(N, ARM::t2PKHBT, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i32 (srl:i32 GPR:i32:$src2, 16:i32), (and:i32 GPR:i32:$src1, 4294901760:i32))
    // Emits: (t2PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, 16:i32)
    // Pattern complexity = 19  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp2 &&
                CheckAndMask(N10, Tmp2, INT64_C(4294901760)) &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_274(N, ARM::t2PKHTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i32 (and:i32 GPR:i32:$src2, 4294901760:i32), (and:i32 GPR:i32:$src1, 65535:i32))
    // Emits: (PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, 0:i32)
    // Pattern complexity = 19  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(4294901760))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp1 &&
              CheckAndMask(N10, Tmp1, INT64_C(65535))) {
            SDNode *Result = Emit_272(N, ARM::PKHBT, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i32 (srl:i32 GPR:i32:$src2, 16:i32), (and:i32 GPR:i32:$src1, 4294901760:i32))
    // Emits: (PKHTB:i32 GPR:i32:$src1, GPR:i32:$src2, 16:i32)
    // Pattern complexity = 19  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(16)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::AND) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp2 &&
                CheckAndMask(N10, Tmp2, INT64_C(4294901760)) &&
                N01.getValueType() == MVT::i32) {
              SDNode *Result = Emit_274(N, ARM::PKHTB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 65535:i32), (shl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt))
  // Emits: (t2PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt)
  // Pattern complexity = 18  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SHL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_imm16_31(N11.getNode()) &&
              N11.getValueType() == MVT::i32) {
            SDNode *Result = Emit_266(N, ARM::t2PKHBT, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 GPR:i32:$src1, 65535:i32), (shl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt))
  // Emits: (PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt)
  // Pattern complexity = 18  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SHL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              Predicate_imm16_31(N11.getNode()) &&
              N11.getValueType() == MVT::i32) {
            SDNode *Result = Emit_266(N, ARM::PKHBT, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (shl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt), (and:i32 GPR:i32:$src1, 65535:i32))
  // Emits: (t2PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt)
  // Pattern complexity = 18  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SHL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_imm16_31(N01.getNode())) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0 &&
              CheckAndMask(N10, Tmp0, INT64_C(65535)) &&
              N01.getValueType() == MVT::i32) {
            SDNode *Result = Emit_273(N, ARM::t2PKHBT, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (shl:i32 GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt), (and:i32 GPR:i32:$src1, 65535:i32))
  // Emits: (PKHBT:i32 GPR:i32:$src1, GPR:i32:$src2, (imm:i32)<<P:Predicate_imm16_31>>:$shamt)
  // Pattern complexity = 18  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SHL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_imm16_31(N01.getNode())) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::AND) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
          if (Tmp0 &&
              CheckAndMask(N10, Tmp0, INT64_C(65535)) &&
              N01.getValueType() == MVT::i32) {
            SDNode *Result = Emit_273(N, ARM::PKHBT, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (and:i32 GPR:i32:$src, 65535:i32), (imm:i32)<<P:Predicate_lo16AllZero>><<X:hi16>>:$imm)
  // Emits: (MOVTi16:i32 GPR:i32:$src, (hi16:i32 (imm:i32):$imm))
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::Constant &&
            Predicate_lo16AllZero(N1.getNode())) {
          SDNode *Result = Emit_261(N, ARM::MOVTi16, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (or:i32 GPR:i32:$a, so_reg:i32:$b)
  // Emits: (ORRrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
      SDNode *Result = Emit_57(N, ARM::ORRrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }

  // Pattern: (or:i32 (and:i32 GPR:i32:$src, 65535:i32), (imm:i32)<<P:Predicate_lo16AllZero>><<X:hi16>>:$imm)
  // Emits: (t2MOVTi16:i32 GPR:i32:$src, (hi16:i32 (imm:i32):$imm))
  // Pattern complexity = 15  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N01.getNode());
      if (Tmp0 &&
          CheckAndMask(N00, Tmp0, INT64_C(65535))) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::Constant &&
            Predicate_lo16AllZero(N1.getNode())) {
          SDNode *Result = Emit_261(N, ARM::t2MOVTi16, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (or:i32 so_reg:i32:$b, GPR:i32:$a)
  // Emits: (ORRrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_88(N, ARM::ORRrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::Constant) {

          // Pattern: (or:i32 GPR:i32:$lhs, (xor:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
          // Emits: (t2ORNri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
          // Pattern complexity = 14  cost = 1  size = 0
          if (Predicate_t2_so_imm(N10.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::Constant &&
                Predicate_immAllOnes(N11.getNode())) {
              SDNode *Result = Emit_165(N, ARM::t2ORNri, MVT::i32);
              return Result;
            }
          }

          // Pattern: (or:i32 GPR:i32:$lhs, (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs))
          // Emits: (t2ORNri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
          // Pattern complexity = 14  cost = 1  size = 0
          if (Predicate_immAllOnes(N10.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::Constant &&
                Predicate_t2_so_imm(N11.getNode())) {
              SDNode *Result = Emit_174(N, ARM::t2ORNri, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (or:i32 (xor:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$lhs)
        // Emits: (t2ORNri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
        // Pattern complexity = 14  cost = 1  size = 0
        if (Predicate_t2_so_imm(N00.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_immAllOnes(N01.getNode())) {
            SDNode *Result = Emit_175(N, ARM::t2ORNri, MVT::i32);
            return Result;
          }
        }

        // Pattern: (or:i32 (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs), GPR:i32:$lhs)
        // Emits: (t2ORNri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
        // Pattern complexity = 14  cost = 1  size = 0
        if (Predicate_immAllOnes(N00.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::Constant &&
              Predicate_t2_so_imm(N01.getNode())) {
            SDNode *Result = Emit_176(N, ARM::t2ORNri, MVT::i32);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2ORRrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_68(N, ARM::t2ORRrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (or:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
    // Emits: (t2ORRrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue CPTmpN0_0;
      SDValue CPTmpN0_1;
      if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
        SDNode *Result = Emit_103(N, ARM::t2ORRrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
        return Result;
      }
    }

    // Pattern: (or:i32 GPR:i32:$lhs, (xor:i32 GPR:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>))
    // Emits: (t2ORNrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
    // Pattern complexity = 10  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant &&
            Predicate_immAllOnes(N11.getNode())) {
          SDNode *Result = Emit_166(N, ARM::t2ORNrr, MVT::i32);
          return Result;
        }
      }
    }

    // Pattern: (or:i32 (xor:i32 GPR:i32:$rhs, (imm:i32)<<P:Predicate_immAllOnes>>), GPR:i32:$lhs)
    // Emits: (t2ORNrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
    // Pattern complexity = 10  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N01.getNode())) {
        SDNode *Result = Emit_177(N, ARM::t2ORNrr, MVT::i32);
        return Result;
      }
    }

    // Pattern: (or:i32 GPR:i32:$src, 4294901760:i32)
    // Emits: (t2MOVTi16:i32 GPR:i32:$src, 65535:i32)
    // Pattern complexity = 8  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckOrMask(N0, Tmp0, INT64_C(4294901760))) {
      SDNode *Result = Emit_264(N, ARM::t2MOVTi16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (or:i32 GPR:i32:$src, 4294901760:i32)
  // Emits: (MOVTi16:i32 GPR:i32:$src, 65535:i32)
  // Pattern complexity = 8  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckOrMask(N0, Tmp0, INT64_C(4294901760))) {
      SDNode *Result = Emit_264(N, ARM::MOVTi16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (or:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (ORRri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_55(N, ARM::ORRri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (or:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
      // Emits: (t2ORRri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::t2ORRri, MVT::i32);
        return Result;
      }

      // Pattern: (or:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_t2_so_imm_not>><<X:t2_so_imm_not_XFORM>>:$imm)
      // Emits: (t2ORNri:i32 GPR:i32:$src, (t2_so_imm_not_XFORM:i32 (imm:i32)<<P:Predicate_t2_so_imm_not>>:$imm))
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm_not(N1.getNode())) {
        SDNode *Result = Emit_172(N, ARM::t2ORNri, MVT::i32);
        return Result;
      }

      // Pattern: (or:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_t2_so_imm2part>>:$RHS)
      // Emits: (t2ORRri:i32 (t2ORRri:i32 GPR:i32:$LHS, (t2_so_imm2part_1:i32 (imm:i32):$RHS)), (t2_so_imm2part_2:i32 (imm:i32):$RHS))
      // Pattern complexity = 7  cost = 2  size = 0
      if (Predicate_t2_so_imm2part(N1.getNode())) {
        SDNode *Result = Emit_71(N, ARM::t2ORRri, ARM::t2ORRri, MVT::i32, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {

    // Pattern: (or:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_so_imm2part>>:$RHS)
    // Emits: (ORRri:i32 (ORRri:i32 GPR:i32:$LHS, (so_imm2part_1:i32 (imm:i32):$RHS)), (so_imm2part_2:i32 (imm:i32):$RHS))
    // Pattern complexity = 7  cost = 2  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm2part(N1.getNode())) {
        SDNode *Result = Emit_74(N, ARM::ORRri, ARM::ORRri, MVT::i32, MVT::i32);
        return Result;
      }
    }

    // Pattern: (or:i32 GPR:i32:$a, GPR:i32:$b)
    // Emits: (ORRrr:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_56(N, ARM::ORRrr, MVT::i32);
    return Result;
  }

  // Pattern: (or:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tORR:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_66(N, ARM::tORR, MVT::i32);
    return Result;
  }

  // Pattern: (or:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ORRrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_56(N, ARM::t2ORRrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_275(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N00, N10, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_276(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N00, N11, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_277(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, N10, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_278(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, N11, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_279(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N010, N10, N00, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_280(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N010, N11, N00, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_281(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N011, N10, N00, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_282(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N011, N11, N00, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_283(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N10, N01, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_284(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N000, N11, N01, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_285(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N001, N10, N01, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_286(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N001, N11, N01, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_OR_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::AND) {
        SDValue N00 = N0.getNode()->getOperand(0);
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::XOR) {
                  SDValue N110 = N11.getNode()->getOperand(0);

                  // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1), (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>)))
                  // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N01 == N110) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N111.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                        Predicate_immAllOnesV_bc(N111.getNode())) {
                      SDNode *Result = Emit_275(N, ARM::VBSLd, MVT::v2i32);
                      return Result;
                    }
                  }

                  // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1), (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1)))
                  // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N110.getNode())) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N01 == N111) {
                      SDNode *Result = Emit_275(N, ARM::VBSLd, MVT::v2i32);
                      return Result;
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::XOR) {
                SDValue N100 = N10.getNode()->getOperand(0);

                // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1), (and:v2i32 (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>), DPR:v2i32:$src3))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N01 == N100) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N101.getNode())) {
                    SDNode *Result = Emit_276(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }

                // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1), (and:v2i32 (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1), DPR:v2i32:$src3))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                    Predicate_immAllOnesV_bc(N100.getNode())) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N01 == N101) {
                    SDNode *Result = Emit_276(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }
              }
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::XOR) {
                  SDValue N110 = N11.getNode()->getOperand(0);

                  // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2), (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>)))
                  // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N00 == N110) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N111.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                        Predicate_immAllOnesV_bc(N111.getNode())) {
                      SDNode *Result = Emit_277(N, ARM::VBSLd, MVT::v2i32);
                      return Result;
                    }
                  }

                  // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2), (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1)))
                  // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N110.getNode())) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N00 == N111) {
                      SDNode *Result = Emit_277(N, ARM::VBSLd, MVT::v2i32);
                      return Result;
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::XOR) {
                SDValue N100 = N10.getNode()->getOperand(0);

                // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2), (and:v2i32 (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>), DPR:v2i32:$src3))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N00 == N100) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N101.getNode())) {
                    SDNode *Result = Emit_278(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }

                // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2), (and:v2i32 (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1), DPR:v2i32:$src3))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                    Predicate_immAllOnesV_bc(N100.getNode())) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N00 == N101) {
                    SDNode *Result = Emit_278(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }
              }
            }
          }
          if (N01.getNode()->getOpcode() == ISD::XOR) {
            SDValue N010 = N01.getNode()->getOperand(0);
            {
              SDValue N011 = N01.getNode()->getOperand(1);
              if (N011.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                  Predicate_immAllOnesV_bc(N011.getNode())) {
                SDValue N1 = N->getOperand(1);
                if (N1.getNode()->getOpcode() == ISD::AND) {
                  SDValue N10 = N1.getNode()->getOperand(0);

                  // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>)), (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1))
                  // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N010 == N11) {
                      SDNode *Result = Emit_279(N, ARM::VBSLd, MVT::v2i32);
                      return Result;
                    }
                  }

                  // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>)), (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2))
                  // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N010 == N10) {
                    SDNode *Result = Emit_280(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }
              }
            }
            if (N010.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N010.getNode())) {
              SDValue N011 = N01.getNode()->getOperand(1);
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::AND) {
                SDValue N10 = N1.getNode()->getOperand(0);

                // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1)), (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                {
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N011 == N11) {
                    SDNode *Result = Emit_281(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }

                // Pattern: (or:v2i32 (and:v2i32 DPR:v2i32:$src3, (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1)), (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N011 == N10) {
                  SDNode *Result = Emit_282(N, ARM::VBSLd, MVT::v2i32);
                  return Result;
                }
              }
            }
          }
        }
        if (N00.getNode()->getOpcode() == ISD::XOR) {
          SDValue N000 = N00.getNode()->getOperand(0);
          {
            SDValue N001 = N00.getNode()->getOperand(1);
            if (N001.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N001.getNode())) {
              SDValue N01 = N0.getNode()->getOperand(1);
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::AND) {
                SDValue N10 = N1.getNode()->getOperand(0);

                // Pattern: (or:v2i32 (and:v2i32 (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>), DPR:v2i32:$src3), (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                {
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N000 == N11) {
                    SDNode *Result = Emit_283(N, ARM::VBSLd, MVT::v2i32);
                    return Result;
                  }
                }

                // Pattern: (or:v2i32 (and:v2i32 (xor:v2i32 DPR:v2i32:$src1, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>), DPR:v2i32:$src3), (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2))
                // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N000 == N10) {
                  SDNode *Result = Emit_284(N, ARM::VBSLd, MVT::v2i32);
                  return Result;
                }
              }
            }
          }
          if (N000.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N000.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);

              // Pattern: (or:v2i32 (and:v2i32 (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1), DPR:v2i32:$src3), (and:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src1))
              // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
              // Pattern complexity = 16  cost = 1  size = 0
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N001 == N11) {
                  SDNode *Result = Emit_285(N, ARM::VBSLd, MVT::v2i32);
                  return Result;
                }
              }

              // Pattern: (or:v2i32 (and:v2i32 (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src1), DPR:v2i32:$src3), (and:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2))
              // Emits: (VBSLd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
              // Pattern complexity = 16  cost = 1  size = 0
              if (N001 == N10) {
                SDNode *Result = Emit_286(N, ARM::VBSLd, MVT::v2i32);
                return Result;
              }
            }
          }
        }
      }
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::XOR) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (or:v2i32 DPR:v2i32:$src1, (xor:v2i32 DPR:v2i32:$src2, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>))
          // Emits: (VORNd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N11.getNode())) {
              SDNode *Result = Emit_51(N, ARM::VORNd, MVT::v2i32);
              return Result;
            }
          }

          // Pattern: (or:v2i32 DPR:v2i32:$src1, (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src2))
          // Emits: (VORNd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N10.getNode())) {
            SDNode *Result = Emit_181(N, ARM::VORNd, MVT::v2i32);
            return Result;
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::XOR) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (or:v2i32 (xor:v2i32 DPR:v2i32:$src2, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>), DPR:v2i32:$src1)
        // Emits: (VORNd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N01.getNode())) {
            SDNode *Result = Emit_84(N, ARM::VORNd, MVT::v2i32);
            return Result;
          }
        }

        // Pattern: (or:v2i32 (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src2), DPR:v2i32:$src1)
        // Emits: (VORNd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N00.getNode())) {
          SDNode *Result = Emit_182(N, ARM::VORNd, MVT::v2i32);
          return Result;
        }
      }
    }

    // Pattern: (or:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VORRd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VORRd, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_OR_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::AND) {
        SDValue N00 = N0.getNode()->getOperand(0);
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::XOR) {
                  SDValue N110 = N11.getNode()->getOperand(0);

                  // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1), (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>)))
                  // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N01 == N110) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N111.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                        Predicate_immAllOnesV_bc(N111.getNode())) {
                      SDNode *Result = Emit_275(N, ARM::VBSLq, MVT::v4i32);
                      return Result;
                    }
                  }

                  // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1), (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1)))
                  // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N110.getNode())) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N01 == N111) {
                      SDNode *Result = Emit_275(N, ARM::VBSLq, MVT::v4i32);
                      return Result;
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::XOR) {
                SDValue N100 = N10.getNode()->getOperand(0);

                // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1), (and:v4i32 (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>), QPR:v4i32:$src3))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N01 == N100) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N101.getNode())) {
                    SDNode *Result = Emit_276(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }

                // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1), (and:v4i32 (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1), QPR:v4i32:$src3))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                    Predicate_immAllOnesV_bc(N100.getNode())) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N01 == N101) {
                    SDNode *Result = Emit_276(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }
              }
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::XOR) {
                  SDValue N110 = N11.getNode()->getOperand(0);

                  // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2), (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>)))
                  // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N00 == N110) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N111.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                        Predicate_immAllOnesV_bc(N111.getNode())) {
                      SDNode *Result = Emit_277(N, ARM::VBSLq, MVT::v4i32);
                      return Result;
                    }
                  }

                  // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2), (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1)))
                  // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N110.getNode())) {
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N00 == N111) {
                      SDNode *Result = Emit_277(N, ARM::VBSLq, MVT::v4i32);
                      return Result;
                    }
                  }
                }
              }
              if (N10.getNode()->getOpcode() == ISD::XOR) {
                SDValue N100 = N10.getNode()->getOperand(0);

                // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2), (and:v4i32 (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>), QPR:v4i32:$src3))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N00 == N100) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                      Predicate_immAllOnesV_bc(N101.getNode())) {
                    SDNode *Result = Emit_278(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }

                // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2), (and:v4i32 (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1), QPR:v4i32:$src3))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                    Predicate_immAllOnesV_bc(N100.getNode())) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N00 == N101) {
                    SDNode *Result = Emit_278(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }
              }
            }
          }
          if (N01.getNode()->getOpcode() == ISD::XOR) {
            SDValue N010 = N01.getNode()->getOperand(0);
            {
              SDValue N011 = N01.getNode()->getOperand(1);
              if (N011.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                  Predicate_immAllOnesV_bc(N011.getNode())) {
                SDValue N1 = N->getOperand(1);
                if (N1.getNode()->getOpcode() == ISD::AND) {
                  SDValue N10 = N1.getNode()->getOperand(0);

                  // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>)), (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1))
                  // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N010 == N11) {
                      SDNode *Result = Emit_279(N, ARM::VBSLq, MVT::v4i32);
                      return Result;
                    }
                  }

                  // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>)), (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2))
                  // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                  // Pattern complexity = 16  cost = 1  size = 0
                  if (N010 == N10) {
                    SDNode *Result = Emit_280(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }
              }
            }
            if (N010.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N010.getNode())) {
              SDValue N011 = N01.getNode()->getOperand(1);
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::AND) {
                SDValue N10 = N1.getNode()->getOperand(0);

                // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1)), (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                {
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N011 == N11) {
                    SDNode *Result = Emit_281(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }

                // Pattern: (or:v4i32 (and:v4i32 QPR:v4i32:$src3, (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1)), (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N011 == N10) {
                  SDNode *Result = Emit_282(N, ARM::VBSLq, MVT::v4i32);
                  return Result;
                }
              }
            }
          }
        }
        if (N00.getNode()->getOpcode() == ISD::XOR) {
          SDValue N000 = N00.getNode()->getOperand(0);
          {
            SDValue N001 = N00.getNode()->getOperand(1);
            if (N001.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N001.getNode())) {
              SDValue N01 = N0.getNode()->getOperand(1);
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::AND) {
                SDValue N10 = N1.getNode()->getOperand(0);

                // Pattern: (or:v4i32 (and:v4i32 (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>), QPR:v4i32:$src3), (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                {
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N000 == N11) {
                    SDNode *Result = Emit_283(N, ARM::VBSLq, MVT::v4i32);
                    return Result;
                  }
                }

                // Pattern: (or:v4i32 (and:v4i32 (xor:v4i32 QPR:v4i32:$src1, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>), QPR:v4i32:$src3), (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2))
                // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
                // Pattern complexity = 16  cost = 1  size = 0
                if (N000 == N10) {
                  SDNode *Result = Emit_284(N, ARM::VBSLq, MVT::v4i32);
                  return Result;
                }
              }
            }
          }
          if (N000.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N000.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::AND) {
              SDValue N10 = N1.getNode()->getOperand(0);

              // Pattern: (or:v4i32 (and:v4i32 (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1), QPR:v4i32:$src3), (and:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src1))
              // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
              // Pattern complexity = 16  cost = 1  size = 0
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N001 == N11) {
                  SDNode *Result = Emit_285(N, ARM::VBSLq, MVT::v4i32);
                  return Result;
                }
              }

              // Pattern: (or:v4i32 (and:v4i32 (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src1), QPR:v4i32:$src3), (and:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2))
              // Emits: (VBSLq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
              // Pattern complexity = 16  cost = 1  size = 0
              if (N001 == N10) {
                SDNode *Result = Emit_286(N, ARM::VBSLq, MVT::v4i32);
                return Result;
              }
            }
          }
        }
      }
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::XOR) {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (or:v4i32 QPR:v4i32:$src1, (xor:v4i32 QPR:v4i32:$src2, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>))
          // Emits: (VORNq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N11.getNode())) {
              SDNode *Result = Emit_51(N, ARM::VORNq, MVT::v4i32);
              return Result;
            }
          }

          // Pattern: (or:v4i32 QPR:v4i32:$src1, (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src2))
          // Emits: (VORNq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
          // Pattern complexity = 10  cost = 1  size = 0
          if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N10.getNode())) {
            SDNode *Result = Emit_181(N, ARM::VORNq, MVT::v4i32);
            return Result;
          }
        }
      }
      if (N0.getNode()->getOpcode() == ISD::XOR) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (or:v4i32 (xor:v4i32 QPR:v4i32:$src2, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>), QPR:v4i32:$src1)
        // Emits: (VORNq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N01.getNode())) {
            SDNode *Result = Emit_84(N, ARM::VORNq, MVT::v4i32);
            return Result;
          }
        }

        // Pattern: (or:v4i32 (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src2), QPR:v4i32:$src1)
        // Emits: (VORNq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
        // Pattern complexity = 10  cost = 1  size = 0
        if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N00.getNode())) {
          SDNode *Result = Emit_182(N, ARM::VORNq, MVT::v4i32);
          return Result;
        }
      }
    }

    // Pattern: (or:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VORRq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VORRq, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_287(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN_0, SDValue &CPTmpN_1, SDValue &CPTmpN_2) {
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN_0, CPTmpN_1, CPTmpN_2, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
SDNode *Select_ISD_ROTR_i32(SDNode *N) {

  // Pattern: so_reg:i32:$src
  // Emits: (MOVs:i32 so_reg:i32:$src)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    if (SelectShifterOperandReg(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2)) {
      SDNode *Result = Emit_287(N, ARM::MOVs, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2);
      return Result;
    }
  }

  // Pattern: (rotr:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_imm1_31>>:$rhs)
  // Emits: (t2RORri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm1_31(N1.getNode()) &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_55(N, ARM::t2RORri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (rotr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tROR:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_66(N, ARM::tROR, MVT::i32);
      return Result;
    }
  }

  // Pattern: (rotr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2RORrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_56(N, ARM::t2RORrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_288(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x0ULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops1[] = { Tmp0, N0, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Ops1, 5);
}
SDNode *Select_ISD_SCALAR_TO_VECTOR_v8i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_288(N, TargetOpcode::IMPLICIT_DEF, ARM::VSETLNi8, MVT::v8i8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_289(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, unsigned Opc3, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2, MVT::SimpleValueType VT3) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  SDValue Tmp1(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x0ULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops2[] = { Tmp1, N0, Tmp3, Tmp4, Tmp5 };
  SDValue Tmp6(CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Ops2, 5), 0);
  SDValue Tmp7 = CurDAG->getTargetConstant(0x5ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc3, VT3, Tmp0, Tmp6, Tmp7);
}
SDNode *Select_ISD_SCALAR_TO_VECTOR_v16i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_289(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::IMPLICIT_DEF, ARM::VSETLNi8, TargetOpcode::INSERT_SUBREG, MVT::v16i8, MVT::v8i8, MVT::f64, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SCALAR_TO_VECTOR_v4i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_288(N, TargetOpcode::IMPLICIT_DEF, ARM::VSETLNi16, MVT::v4i16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SCALAR_TO_VECTOR_v8i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_289(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::IMPLICIT_DEF, ARM::VSETLNi16, TargetOpcode::INSERT_SUBREG, MVT::v8i16, MVT::v4i16, MVT::f64, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SCALAR_TO_VECTOR_v2i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_288(N, TargetOpcode::IMPLICIT_DEF, ARM::VSETLNi32, MVT::v2i32, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SCALAR_TO_VECTOR_v4i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_289(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::IMPLICIT_DEF, ARM::VSETLNi32, TargetOpcode::INSERT_SUBREG, MVT::v4i32, MVT::v2i32, MVT::f64, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_290(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp0, N0, Tmp2);
}
SDNode *Select_ISD_SCALAR_TO_VECTOR_v2f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::f32) {
    SDNode *Result = Emit_290(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, MVT::v2f32, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SCALAR_TO_VECTOR_v4f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::f32) {
    SDNode *Result = Emit_290(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, MVT::v4f32, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_291(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x5ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp0, N0, Tmp2);
}
SDNode *Select_ISD_SCALAR_TO_VECTOR_v2f64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::f64) {
    SDNode *Result = Emit_291(N, TargetOpcode::IMPLICIT_DEF, TargetOpcode::INSERT_SUBREG, MVT::v2f64, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SHL_i32(SDNode *N) {

  // Pattern: so_reg:i32:$src
  // Emits: (MOVs:i32 so_reg:i32:$src)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    if (SelectShifterOperandReg(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2)) {
      SDNode *Result = Emit_287(N, ARM::MOVs, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2);
      return Result;
    }
  }

  // Pattern: (shl:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_imm1_31>>:$rhs)
  // Emits: (t2LSLri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm1_31(N1.getNode()) &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_55(N, ARM::t2LSLri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (shl:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
    // Emits: (tLSLri:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_65(N, ARM::tLSLri, MVT::i32);
      return Result;
    }

    // Pattern: (shl:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Emits: (tLSLrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_66(N, ARM::tLSLrr, MVT::i32);
      return Result;
    }
  }

  // Pattern: (shl:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2LSLrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_56(N, ARM::t2LSLrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_292(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_293(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_294(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0000, Tmp6, Tmp7);
}
DISABLE_INLINE SDNode *Emit_295(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N000, Tmp6, Tmp7);
}
SDNode *Select_ISD_SIGN_EXTEND_INREG_i32(SDNode *N) {

  // Pattern: (sext_inreg:i32 (or:i32 (srl:i32 (and:i32 GPR:i32:$src, 65280:i32), 8:i32), (shl:i32 GPR:i32:$src, 8:i32)), i16:Other)
  // Emits: (REVSH:i32 GPR:i32:$src)
  // Pattern complexity = 30  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::AND) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0 &&
              CheckAndMask(N0000, Tmp0, INT64_C(65280))) {
            SDValue N001 = N00.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N0000 == N010) {
                    SDValue N011 = N01.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N011.getNode());
                    if (Tmp3) {
                      int64_t CN4 = Tmp3->getSExtValue();
                      if (CN4 == INT64_C(8)) {
                        SDValue N1 = N->getOperand(1);
                        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
                            N001.getValueType() == MVT::i32 &&
                            N011.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_294(N, ARM::REVSH, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sext_inreg:i32 (or:i32 (srl:i32 (and:i32 tGPR:i32:$src, 65280:i32), 8:i32), (shl:i32 tGPR:i32:$src, 8:i32)), i16:Other)
  // Emits: (tREVSH:i32 tGPR:i32:$src)
  // Pattern complexity = 30  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::AND) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0 &&
              CheckAndMask(N0000, Tmp0, INT64_C(65280))) {
            SDValue N001 = N00.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N0000 == N010) {
                    SDValue N011 = N01.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N011.getNode());
                    if (Tmp3) {
                      int64_t CN4 = Tmp3->getSExtValue();
                      if (CN4 == INT64_C(8)) {
                        SDValue N1 = N->getOperand(1);
                        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
                            N001.getValueType() == MVT::i32 &&
                            N011.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_294(N, ARM::tREVSH, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sext_inreg:i32 (or:i32 (srl:i32 (and:i32 GPR:i32:$src, 65280:i32), 8:i32), (shl:i32 GPR:i32:$src, 8:i32)), i16:Other)
  // Emits: (t2REVSH:i32 GPR:i32:$src)
  // Pattern complexity = 30  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::AND) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0 &&
              CheckAndMask(N0000, Tmp0, INT64_C(65280))) {
            SDValue N001 = N00.getNode()->getOperand(1);
            ConstantSDNode *Tmp1 = dyn_cast<ConstantSDNode>(N001.getNode());
            if (Tmp1) {
              int64_t CN2 = Tmp1->getSExtValue();
              if (CN2 == INT64_C(8)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::SHL) {
                  SDValue N010 = N01.getNode()->getOperand(0);
                  if (N0000 == N010) {
                    SDValue N011 = N01.getNode()->getOperand(1);
                    ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N011.getNode());
                    if (Tmp3) {
                      int64_t CN4 = Tmp3->getSExtValue();
                      if (CN4 == INT64_C(8)) {
                        SDValue N1 = N->getOperand(1);
                        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
                            N001.getValueType() == MVT::i32 &&
                            N011.getValueType() == MVT::i32) {
                          SDNode *Result = Emit_294(N, ARM::t2REVSH, MVT::i32);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sext_inreg:i32 (or:i32 (shl:i32 GPR:i32:$src, 8:i32), (srl:i32 (and:i32 GPR:i32:$src, 65280:i32), 8:i32)), i16:Other)
  // Emits: (REVSH:i32 GPR:i32:$src)
  // Pattern complexity = 30  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(8)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SRL) {
              SDValue N010 = N01.getNode()->getOperand(0);
              if (N010.getNode()->getOpcode() == ISD::AND) {
                SDValue N0100 = N010.getNode()->getOperand(0);
                SDValue N0101 = N010.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0101.getNode());
                if (Tmp2 &&
                    CheckAndMask(N0100, Tmp2, INT64_C(65280)) &&
                    N000 == N0100) {
                  SDValue N011 = N01.getNode()->getOperand(1);
                  ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N011.getNode());
                  if (Tmp3) {
                    int64_t CN4 = Tmp3->getSExtValue();
                    if (CN4 == INT64_C(8)) {
                      SDValue N1 = N->getOperand(1);
                      if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
                          N001.getValueType() == MVT::i32 &&
                          N011.getValueType() == MVT::i32) {
                        SDNode *Result = Emit_295(N, ARM::REVSH, MVT::i32);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sext_inreg:i32 (or:i32 (shl:i32 tGPR:i32:$src, 8:i32), (srl:i32 (and:i32 tGPR:i32:$src, 65280:i32), 8:i32)), i16:Other)
  // Emits: (tREVSH:i32 tGPR:i32:$src)
  // Pattern complexity = 30  cost = 1  size = 0
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(8)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SRL) {
              SDValue N010 = N01.getNode()->getOperand(0);
              if (N010.getNode()->getOpcode() == ISD::AND) {
                SDValue N0100 = N010.getNode()->getOperand(0);
                SDValue N0101 = N010.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0101.getNode());
                if (Tmp2 &&
                    CheckAndMask(N0100, Tmp2, INT64_C(65280)) &&
                    N000 == N0100) {
                  SDValue N011 = N01.getNode()->getOperand(1);
                  ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N011.getNode());
                  if (Tmp3) {
                    int64_t CN4 = Tmp3->getSExtValue();
                    if (CN4 == INT64_C(8)) {
                      SDValue N1 = N->getOperand(1);
                      if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
                          N001.getValueType() == MVT::i32 &&
                          N011.getValueType() == MVT::i32) {
                        SDNode *Result = Emit_295(N, ARM::tREVSH, MVT::i32);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sext_inreg:i32 (or:i32 (shl:i32 GPR:i32:$src, 8:i32), (srl:i32 (and:i32 GPR:i32:$src, 65280:i32), 8:i32)), i16:Other)
  // Emits: (t2REVSH:i32 GPR:i32:$src)
  // Pattern complexity = 30  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::OR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SHL) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(8)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            if (N01.getNode()->getOpcode() == ISD::SRL) {
              SDValue N010 = N01.getNode()->getOperand(0);
              if (N010.getNode()->getOpcode() == ISD::AND) {
                SDValue N0100 = N010.getNode()->getOperand(0);
                SDValue N0101 = N010.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N0101.getNode());
                if (Tmp2 &&
                    CheckAndMask(N0100, Tmp2, INT64_C(65280)) &&
                    N000 == N0100) {
                  SDValue N011 = N01.getNode()->getOperand(1);
                  ConstantSDNode *Tmp3 = dyn_cast<ConstantSDNode>(N011.getNode());
                  if (Tmp3) {
                    int64_t CN4 = Tmp3->getSExtValue();
                    if (CN4 == INT64_C(8)) {
                      SDValue N1 = N->getOperand(1);
                      if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
                          N001.getValueType() == MVT::i32 &&
                          N011.getValueType() == MVT::i32) {
                        SDNode *Result = Emit_295(N, ARM::t2REVSH, MVT::i32);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::ROTR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_rot_imm(N01.getNode())) {
        SDValue N1 = N->getOperand(1);

        // Pattern: (sext_inreg:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i8:Other)
        // Emits: (SXTBr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
        // Pattern complexity = 10  cost = 1  size = 0
        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8 &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_293(N, ARM::SXTBr_rot, MVT::i32);
          return Result;
        }

        // Pattern: (sext_inreg:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i16:Other)
        // Emits: (SXTHr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
        // Pattern complexity = 10  cost = 1  size = 0
        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_293(N, ARM::SXTHr_rot, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::ROTR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant &&
          Predicate_rot_imm(N01.getNode())) {
        SDValue N1 = N->getOperand(1);

        // Pattern: (sext_inreg:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i8:Other)
        // Emits: (t2SXTBr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
        // Pattern complexity = 10  cost = 1  size = 0
        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8 &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_293(N, ARM::t2SXTBr_rot, MVT::i32);
          return Result;
        }

        // Pattern: (sext_inreg:i32 (rotr:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_rot_imm>>:$rot), i16:Other)
        // Emits: (t2SXTHr_rot:i32 GPR:i32:$src, (imm:i32):$rot)
        // Pattern complexity = 10  cost = 1  size = 0
        if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16 &&
            N01.getValueType() == MVT::i32) {
          SDNode *Result = Emit_293(N, ARM::t2SXTHr_rot, MVT::i32);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sext_inreg:i32 GPR:i32:$src, i8:Other)
    // Emits: (SXTBr:i32 GPR:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_292(N, ARM::SXTBr, MVT::i32);
      return Result;
    }

    // Pattern: (sext_inreg:i32 GPR:i32:$src, i16:Other)
    // Emits: (SXTHr:i32 GPR:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
      SDNode *Result = Emit_292(N, ARM::SXTHr, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sext_inreg:i32 tGPR:i32:$src, i8:Other)
    // Emits: (tSXTB:i32 tGPR:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_292(N, ARM::tSXTB, MVT::i32);
      return Result;
    }

    // Pattern: (sext_inreg:i32 tGPR:i32:$src, i16:Other)
    // Emits: (tSXTH:i32 tGPR:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
      SDNode *Result = Emit_292(N, ARM::tSXTH, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sext_inreg:i32 GPR:i32:$src, i8:Other)
    // Emits: (t2SXTBr:i32 GPR:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_292(N, ARM::t2SXTBr, MVT::i32);
      return Result;
    }

    // Pattern: (sext_inreg:i32 GPR:i32:$src, i16:Other)
    // Emits: (t2SXTHr:i32 GPR:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
      SDNode *Result = Emit_292(N, ARM::t2SXTHr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SINT_TO_FP_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_31(N, ARM::VCVTs2fd, MVT::v2f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SINT_TO_FP_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_31(N, ARM::VCVTs2fq, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_296(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N010, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_297(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N010, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_298(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N0100 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N0100, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_299(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N00, N01, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_300(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N000, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_301(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp6 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp7 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N000, Tmp6, Tmp7 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_302(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N0000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp8 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp9 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N0000, Tmp8, Tmp9 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_303(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N01, N00, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_SRA_i32(SDNode *N) {
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32)), 16:i32)
      // Emits: (SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 27  cost = 1  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::SRA) {
          SDValue N010 = N01.getNode()->getOperand(0);
          if (N010.getNode()->getOpcode() == ISD::SHL) {
            SDValue N0100 = N010.getNode()->getOperand(0);
            SDValue N0101 = N010.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0101.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N011 = N01.getNode()->getOperand(1);
                ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N011.getNode());
                if (Tmp2) {
                  int64_t CN3 = Tmp2->getSExtValue();
                  if (CN3 == INT64_C(16)) {
                    SDValue N1 = N->getOperand(1);
                    ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1.getNode());
                    if (Tmp4) {
                      int64_t CN5 = Tmp4->getSExtValue();
                      if (CN5 == INT64_C(16) &&
                          N0101.getValueType() == MVT::i32 &&
                          N011.getValueType() == MVT::i32 &&
                          N1.getValueType() == MVT::i32) {
                        SDNode *Result = Emit_298(N, ARM::SMULWB, MVT::i32);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (sra:i32 (mul:i32 (sra:i32 (shl:i32 GPR:i32:$b, 16:i32), 16:i32), GPR:i32:$a), 16:i32)
      // Emits: (SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 27  cost = 1  size = 0
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::SHL) {
          SDValue N0000 = N000.getNode()->getOperand(0);
          SDValue N0001 = N000.getNode()->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0001.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N001 = N00.getNode()->getOperand(1);
              ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N001.getNode());
              if (Tmp2) {
                int64_t CN3 = Tmp2->getSExtValue();
                if (CN3 == INT64_C(16)) {
                  SDValue N01 = N0.getNode()->getOperand(1);
                  SDValue N1 = N->getOperand(1);
                  ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N1.getNode());
                  if (Tmp4) {
                    int64_t CN5 = Tmp4->getSExtValue();
                    if (CN5 == INT64_C(16) &&
                        N0001.getValueType() == MVT::i32 &&
                        N001.getValueType() == MVT::i32 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_302(N, ARM::SMULWB, MVT::i32);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 GPR:i32:$b, 16:i32)), 16:i32)
      // Emits: (SMULWT:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 19  cost = 1  size = 0
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SRA) {
        SDValue N010 = N01.getNode()->getOperand(0);
        SDValue N011 = N01.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N1 = N->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N011.getValueType() == MVT::i32 &&
                  N1.getValueType() == MVT::i32) {
                SDNode *Result = Emit_297(N, ARM::SMULWT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 GPR:i32:$a, (sra:i32 GPR:i32:$b, 16:i32)), 16:i32)
  // Emits: (t2SMULWT:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SRA) {
        SDValue N010 = N01.getNode()->getOperand(0);
        SDValue N011 = N01.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N011.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N1 = N->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N011.getValueType() == MVT::i32 &&
                  N1.getValueType() == MVT::i32) {
                SDNode *Result = Emit_297(N, ARM::t2SMULWT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32:$a), 16:i32)
  // Emits: (SMULWT:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N001.getValueType() == MVT::i32 &&
                  N1.getValueType() == MVT::i32) {
                SDNode *Result = Emit_301(N, ARM::SMULWT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 (sra:i32 GPR:i32:$b, 16:i32), GPR:i32:$a), 16:i32)
  // Emits: (t2SMULWT:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SRA) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N001.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N1.getNode());
            if (Tmp2) {
              int64_t CN3 = Tmp2->getSExtValue();
              if (CN3 == INT64_C(16) &&
                  N001.getValueType() == MVT::i32 &&
                  N1.getValueType() == MVT::i32) {
                SDNode *Result = Emit_301(N, ARM::t2SMULWT, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 GPR:i32:$a, (sext_inreg:i32 GPR:i32:$b, i16:Other)), 16:i32)
  // Emits: (SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 14  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N010 = N01.getNode()->getOperand(0);
        SDValue N011 = N01.getNode()->getOperand(1);
        if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
          SDValue N1 = N->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N1.getValueType() == MVT::i32) {
              SDNode *Result = Emit_296(N, ARM::SMULWB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 GPR:i32:$a, (sext_inreg:i32 GPR:i32:$b, i16:Other)), 16:i32)
  // Emits: (t2SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 14  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N010 = N01.getNode()->getOperand(0);
        SDValue N011 = N01.getNode()->getOperand(1);
        if (cast<VTSDNode>(N011.getNode())->getVT() == MVT::i16) {
          SDValue N1 = N->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N1.getValueType() == MVT::i32) {
              SDNode *Result = Emit_296(N, ARM::t2SMULWB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), GPR:i32:$a), 16:i32)
  // Emits: (SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 14  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N1.getValueType() == MVT::i32) {
              SDNode *Result = Emit_300(N, ARM::SMULWB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 (mul:i32 (sext_inreg:i32 GPR:i32:$b, i16:Other), GPR:i32:$a), 16:i32)
  // Emits: (t2SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 14  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SIGN_EXTEND_INREG) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N001 = N00.getNode()->getOperand(1);
        if (cast<VTSDNode>(N001.getNode())->getVT() == MVT::i16) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N1.getValueType() == MVT::i32) {
              SDNode *Result = Emit_300(N, ARM::t2SMULWB, MVT::i32);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: so_reg:i32:$src
  // Emits: (MOVs:i32 so_reg:i32:$src)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    if (SelectShifterOperandReg(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2)) {
      SDNode *Result = Emit_287(N, ARM::MOVs, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (Subtarget->hasV5TEOps())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::MUL) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (sra:i32 (mul:i32 GPR:i32:$a, GPR:i32<<P:Predicate_sext_16_node>>:$b), 16:i32)
      // Emits: (SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (Predicate_sext_16_node(N01.getNode())) {
          SDValue N1 = N->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16) &&
                N1.getValueType() == MVT::i32) {
              SDNode *Result = Emit_299(N, ARM::SMULWB, MVT::i32);
              return Result;
            }
          }
        }
      }

      // Pattern: (sra:i32 (mul:i32 GPR:i32<<P:Predicate_sext_16_node>>:$b, GPR:i32:$a), 16:i32)
      // Emits: (SMULWB:i32 GPR:i32:$a, GPR:i32:$b)
      // Pattern complexity = 12  cost = 1  size = 0
      if (Predicate_sext_16_node(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_303(N, ARM::SMULWB, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (sra:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_imm1_31>>:$rhs)
  // Emits: (t2ASRri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm1_31(N1.getNode()) &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_55(N, ARM::t2ASRri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sra:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
    // Emits: (tASRri:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_65(N, ARM::tASRri, MVT::i32);
      return Result;
    }

    // Pattern: (sra:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Emits: (tASRrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_66(N, ARM::tASRrr, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sra:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2ASRrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_56(N, ARM::t2ASRrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRL_i32(SDNode *N) {

  // Pattern: so_reg:i32:$src
  // Emits: (MOVs:i32 so_reg:i32:$src)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    if (SelectShifterOperandReg(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2)) {
      SDNode *Result = Emit_287(N, ARM::MOVs, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2);
      return Result;
    }
  }

  // Pattern: (srl:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_imm1_31>>:$rhs)
  // Emits: (t2LSRri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_imm1_31(N1.getNode()) &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_55(N, ARM::t2LSRri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (srl:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
    // Emits: (tLSRri:i32 tGPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_65(N, ARM::tLSRri, MVT::i32);
      return Result;
    }

    // Pattern: (srl:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Emits: (tLSRrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_66(N, ARM::tLSRrr, MVT::i32);
      return Result;
    }
  }

  // Pattern: (srl:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2LSRrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_56(N, ARM::t2LSRrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_304(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN3_0, SDValue &CPTmpN3_1) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { N1, N2, CPTmpN3_0, CPTmpN3_1, Tmp3, Tmp4, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_305(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN3_0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { N1, N2, CPTmpN3_0, Tmp3, Tmp4, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_STORE_i32(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_istore(N)) {

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)<<P:Predicate_istore>><<P:Predicate_pre_store>>
      // Emits: (STR_PRE:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_pre_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        SDValue CPTmpN3_1;
        if (SelectAddrMode2Offset(N, N3, CPTmpN3_0, CPTmpN3_1) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_304(N, ARM::STR_PRE, MVT::i32, CPTmpN3_0, CPTmpN3_1);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)<<P:Predicate_istore>><<P:Predicate_post_store>>
      // Emits: (STR_POST:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_post_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        SDValue CPTmpN3_1;
        if (SelectAddrMode2Offset(N, N3, CPTmpN3_0, CPTmpN3_1) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_304(N, ARM::STR_POST, MVT::i32, CPTmpN3_0, CPTmpN3_1);
          return Result;
        }
      }
    }
    if (Predicate_itruncstore(N)) {

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, am3offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_pre_truncst>><<P:Predicate_pre_truncsti16>>
      // Emits: (STRH_PRE:i32 GPR:i32:$src, GPR:i32:$base, am3offset:i32:$offset)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_pre_truncst(N) &&
          Predicate_pre_truncsti16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        SDValue CPTmpN3_1;
        if (SelectAddrMode3Offset(N, N3, CPTmpN3_0, CPTmpN3_1) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_304(N, ARM::STRH_PRE, MVT::i32, CPTmpN3_0, CPTmpN3_1);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, am3offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_post_truncst>><<P:Predicate_post_truncsti16>>
      // Emits: (STRH_POST:i32 GPR:i32:$src, GPR:i32:$base, am3offset:i32:$offset)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_post_truncst(N) &&
          Predicate_post_truncsti16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        SDValue CPTmpN3_1;
        if (SelectAddrMode3Offset(N, N3, CPTmpN3_0, CPTmpN3_1) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_304(N, ARM::STRH_POST, MVT::i32, CPTmpN3_0, CPTmpN3_1);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_pre_truncst>><<P:Predicate_pre_truncsti8>>
      // Emits: (STRB_PRE:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_pre_truncst(N) &&
          Predicate_pre_truncsti8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        SDValue CPTmpN3_1;
        if (SelectAddrMode2Offset(N, N3, CPTmpN3_0, CPTmpN3_1) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_304(N, ARM::STRB_PRE, MVT::i32, CPTmpN3_0, CPTmpN3_1);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_post_truncst>><<P:Predicate_post_truncsti8>>
      // Emits: (STRB_POST:i32 GPR:i32:$src, GPR:i32:$base, am2offset:i32:$offset)
      // Pattern complexity = 13  cost = 1  size = 0
      if (Predicate_post_truncst(N) &&
          Predicate_post_truncsti8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        SDValue CPTmpN3_1;
        if (SelectAddrMode2Offset(N, N3, CPTmpN3_0, CPTmpN3_1) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_304(N, ARM::STRB_POST, MVT::i32, CPTmpN3_0, CPTmpN3_1);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_istore(N)) {

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)<<P:Predicate_istore>><<P:Predicate_pre_store>>
      // Emits: (t2STR_PRE:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_pre_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        if (SelectT2AddrModeImm8Offset(N, N3, CPTmpN3_0) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_305(N, ARM::t2STR_PRE, MVT::i32, CPTmpN3_0);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)<<P:Predicate_istore>><<P:Predicate_post_store>>
      // Emits: (t2STR_POST:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_post_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        if (SelectT2AddrModeImm8Offset(N, N3, CPTmpN3_0) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_305(N, ARM::t2STR_POST, MVT::i32, CPTmpN3_0);
          return Result;
        }
      }
    }
    if (Predicate_itruncstore(N)) {

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_pre_truncst>><<P:Predicate_pre_truncsti16>>
      // Emits: (t2STRH_PRE:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_pre_truncst(N) &&
          Predicate_pre_truncsti16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        if (SelectT2AddrModeImm8Offset(N, N3, CPTmpN3_0) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_305(N, ARM::t2STRH_PRE, MVT::i32, CPTmpN3_0);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_post_truncst>><<P:Predicate_post_truncsti16>>
      // Emits: (t2STRH_POST:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_post_truncst(N) &&
          Predicate_post_truncsti16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        if (SelectT2AddrModeImm8Offset(N, N3, CPTmpN3_0) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_305(N, ARM::t2STRH_POST, MVT::i32, CPTmpN3_0);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_pre_truncst>><<P:Predicate_pre_truncsti8>>
      // Emits: (t2STRB_PRE:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_pre_truncst(N) &&
          Predicate_pre_truncsti8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        if (SelectT2AddrModeImm8Offset(N, N3, CPTmpN3_0) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_305(N, ARM::t2STRB_PRE, MVT::i32, CPTmpN3_0);
          return Result;
        }
      }

      // Pattern: (ist:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)<<P:Predicate_itruncstore>><<P:Predicate_post_truncst>><<P:Predicate_post_truncsti8>>
      // Emits: (t2STRB_POST:i32 GPR:i32:$src, GPR:i32:$base, t2am_imm8_offset:i32:$offset)
      // Pattern complexity = 10  cost = 1  size = 0
      if (Predicate_post_truncst(N) &&
          Predicate_post_truncsti8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue CPTmpN3_0;
        if (SelectT2AddrModeImm8Offset(N, N3, CPTmpN3_0) &&
            N1.getValueType() == MVT::i32 &&
            N3.getValueType() == MVT::i32) {
          SDNode *Result = Emit_305(N, ARM::t2STRB_POST, MVT::i32, CPTmpN3_0);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_306(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN2_0, CPTmpN2_1, Tmp2, Tmp3, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_307(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, Tmp2, Tmp3, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_STORE(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N)) {

      // Pattern: (st:isVoid GPR:i32:$src, addrmodepc:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (PICSTR:isVoid GPR:i32:$src, addrmodepc:i32:$addr)
      // Pattern complexity = 23  cost = 1  size = 0
      if (Predicate_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        if (SelectAddrModePC(N, N2, CPTmpN2_0, CPTmpN2_1) &&
            N1.getValueType() == MVT::i32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_306(N, ARM::PICSTR, CPTmpN2_0, CPTmpN2_1);
          return Result;
        }
      }
      if (Predicate_truncstore(N)) {

        // Pattern: (st:isVoid GPR:i32:$src, addrmodepc:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
        // Emits: (PICSTRH:isVoid GPR:i32:$src, addrmodepc:i32:$addr)
        // Pattern complexity = 23  cost = 1  size = 0
        if (Predicate_truncstorei16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          if (SelectAddrModePC(N, N2, CPTmpN2_0, CPTmpN2_1) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_306(N, ARM::PICSTRH, CPTmpN2_0, CPTmpN2_1);
            return Result;
          }
        }

        // Pattern: (st:isVoid GPR:i32:$src, addrmodepc:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei8>>
        // Emits: (PICSTRB:isVoid GPR:i32:$src, addrmodepc:i32:$addr)
        // Pattern complexity = 23  cost = 1  size = 0
        if (Predicate_truncstorei8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          if (SelectAddrModePC(N, N2, CPTmpN2_0, CPTmpN2_1) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_306(N, ARM::PICSTRB, CPTmpN2_0, CPTmpN2_1);
            return Result;
          }
        }
      }

      // Pattern: (st:isVoid GPR:i32:$src, addrmode2:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (STR:isVoid GPR:i32:$src, addrmode2:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        if (SelectAddrMode2(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
            N1.getValueType() == MVT::i32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_307(N, ARM::STR, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
          return Result;
        }
      }
      if (Predicate_truncstore(N)) {

        // Pattern: (st:isVoid GPR:i32:$src, addrmode3:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
        // Emits: (STRH:isVoid GPR:i32:$src, addrmode3:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_truncstorei16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          if (SelectAddrMode3(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_307(N, ARM::STRH, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
            return Result;
          }
        }

        // Pattern: (st:isVoid GPR:i32:$src, addrmode2:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei8>>
        // Emits: (STRB:isVoid GPR:i32:$src, addrmode2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_truncstorei8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          if (SelectAddrMode2(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_307(N, ARM::STRB, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N)) {

      // Pattern: (st:isVoid tGPR:i32:$src, t_addrmode_s4:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (tSTR:isVoid tGPR:i32:$src, t_addrmode_s4:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        if (SelectThumbAddrModeS4(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
            N1.getValueType() == MVT::i32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_307(N, ARM::tSTR, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
          return Result;
        }
      }
      if (Predicate_truncstore(N)) {

        // Pattern: (st:isVoid tGPR:i32:$src, t_addrmode_s1:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei8>>
        // Emits: (tSTRB:isVoid tGPR:i32:$src, t_addrmode_s1:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_truncstorei8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          if (SelectThumbAddrModeS1(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_307(N, ARM::tSTRB, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
            return Result;
          }
        }

        // Pattern: (st:isVoid tGPR:i32:$src, t_addrmode_s2:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
        // Emits: (tSTRH:isVoid tGPR:i32:$src, t_addrmode_s2:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_truncstorei16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          if (SelectThumbAddrModeS2(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_307(N, ARM::tSTRH, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N)) {

      // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (t2STRs:isVoid GPR:i32:$src, t2addrmode_so_reg:i32:$addr)
      // Pattern complexity = 16  cost = 1  size = 0
      if (Predicate_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        if (SelectT2AddrModeSoReg(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
            N1.getValueType() == MVT::i32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_307(N, ARM::t2STRs, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
          return Result;
        }
      }
      if (Predicate_truncstore(N)) {

        // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei8>>
        // Emits: (t2STRBs:isVoid GPR:i32:$src, t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_truncstorei8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          if (SelectT2AddrModeSoReg(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_307(N, ARM::t2STRBs, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
            return Result;
          }
        }

        // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_so_reg:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
        // Emits: (t2STRHs:isVoid GPR:i32:$src, t2addrmode_so_reg:i32:$addr)
        // Pattern complexity = 16  cost = 1  size = 0
        if (Predicate_truncstorei16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          if (SelectT2AddrModeSoReg(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_307(N, ARM::t2STRHs, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid tGPR:i32:$src, t_addrmode_sp:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (tSTRspi:isVoid tGPR:i32:$src, t_addrmode_sp:i32:$addr)
  // Pattern complexity = 13  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      if (SelectThumbAddrModeSP(N, N2, CPTmpN2_0, CPTmpN2_1) &&
          N1.getValueType() == MVT::i32 &&
          N2.getValueType() == MVT::i32) {
        SDNode *Result = Emit_306(N, ARM::tSTRspi, CPTmpN2_0, CPTmpN2_1);
        return Result;
      }
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N)) {
      if (Predicate_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;

        // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (t2STRi12:isVoid GPR:i32:$src, t2addrmode_imm12:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (SelectT2AddrModeImm12(N, N2, CPTmpN2_0, CPTmpN2_1) &&
            N1.getValueType() == MVT::i32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_306(N, ARM::t2STRi12, CPTmpN2_0, CPTmpN2_1);
          return Result;
        }

        // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (t2STRi8:isVoid GPR:i32:$src, t2addrmode_imm8:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (SelectT2AddrModeImm8(N, N2, CPTmpN2_0, CPTmpN2_1) &&
            N1.getValueType() == MVT::i32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_306(N, ARM::t2STRi8, CPTmpN2_0, CPTmpN2_1);
          return Result;
        }
      }
      if (Predicate_truncstore(N)) {
        if (Predicate_truncstorei8(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;

          // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei8>>
          // Emits: (t2STRBi12:isVoid GPR:i32:$src, t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N2, CPTmpN2_0, CPTmpN2_1) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_306(N, ARM::t2STRBi12, CPTmpN2_0, CPTmpN2_1);
            return Result;
          }

          // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei8>>
          // Emits: (t2STRBi8:isVoid GPR:i32:$src, t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N2, CPTmpN2_0, CPTmpN2_1) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_306(N, ARM::t2STRBi8, CPTmpN2_0, CPTmpN2_1);
            return Result;
          }
        }
        if (Predicate_truncstorei16(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;

          // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_imm12:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
          // Emits: (t2STRHi12:isVoid GPR:i32:$src, t2addrmode_imm12:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm12(N, N2, CPTmpN2_0, CPTmpN2_1) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_306(N, ARM::t2STRHi12, CPTmpN2_0, CPTmpN2_1);
            return Result;
          }

          // Pattern: (st:isVoid GPR:i32:$src, t2addrmode_imm8:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
          // Emits: (t2STRHi8:isVoid GPR:i32:$src, t2addrmode_imm8:i32:$addr)
          // Pattern complexity = 13  cost = 1  size = 0
          if (SelectT2AddrModeImm8(N, N2, CPTmpN2_0, CPTmpN2_1) &&
              N1.getValueType() == MVT::i32 &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_306(N, ARM::t2STRHi8, CPTmpN2_0, CPTmpN2_1);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasVFP2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      if (SelectAddrMode5(N, N2, CPTmpN2_0, CPTmpN2_1)) {

        // Pattern: (st:isVoid DPR:f64:$src, addrmode5:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (VSTRD:isVoid DPR:f64:$src, addrmode5:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (N1.getValueType() == MVT::f64 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_306(N, ARM::VSTRD, CPTmpN2_0, CPTmpN2_1);
          return Result;
        }

        // Pattern: (st:isVoid SPR:f32:$src, addrmode5:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (VSTRS:isVoid SPR:f32:$src, addrmode5:i32:$addr)
        // Pattern complexity = 13  cost = 1  size = 0
        if (N1.getValueType() == MVT::f32 &&
            N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_306(N, ARM::VSTRS, CPTmpN2_0, CPTmpN2_1);
          return Result;
        }
      }
    }
  }

  // Pattern: (st:isVoid QPR:v2f64:$src, addrmode4:i32:$addr)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (VSTRQ:isVoid QPR:v2f64:$src, addrmode4:i32:$addr)
  // Pattern complexity = 13  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      if (SelectAddrMode4(N, N2, CPTmpN2_0, CPTmpN2_1) &&
          N1.getValueType() == MVT::v2f64 &&
          N2.getValueType() == MVT::i32) {
        SDNode *Result = Emit_306(N, ARM::VSTRQ, CPTmpN2_0, CPTmpN2_1);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_308(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Tmp3, Tmp4 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
DISABLE_INLINE SDNode *Emit_309(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp4 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp5 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp2, N1, Tmp4, Tmp5 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_310(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_311(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 5);
}
SDNode *Select_ISD_SUB_i32(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (sub:i32 GPR:i32:$a, so_reg:i32:$b)
    // Emits: (SUBrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
        SDNode *Result = Emit_57(N, ARM::SUBrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
        return Result;
      }
    }

    // Pattern: (sub:i32 so_reg:i32:$b, GPR:i32:$a)
    // Emits: (RSBrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_88(N, ARM::RSBrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (sub:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2SUBrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_68(N, ARM::t2SUBrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (sub:i32 t2_so_reg:i32:$lhs, GPR:i32:$rhs)
    // Emits: (t2RSBrs:i32 GPR:i32:$rhs, t2_so_reg:i32:$lhs)
    // Pattern complexity = 12  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDNode *Result = Emit_311(N, ARM::t2RSBrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
      return Result;
    }
  }

  // Pattern: (sub:i32 0:i32, tGPR:i32:$src)
  // Emits: (tRSB:i32 tGPR:i32:$src)
  // Pattern complexity = 8  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(0)) {
        SDNode *Result = Emit_309(N, ARM::tRSB, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (sub:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
    // Emits: (SUBri:i32 GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 7  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::SUBri, MVT::i32);
        return Result;
      }
    }

    // Pattern: (sub:i32 (imm:i32)<<P:Predicate_so_imm>>:$b, GPR:i32:$a)
    // Emits: (RSBri:i32 GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 7  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N0.getNode())) {
      SDNode *Result = Emit_308(N, ARM::RSBri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (sub:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
        // Emits: (t2SUBri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
        // Pattern complexity = 7  cost = 1  size = 0
        if (Predicate_t2_so_imm(N1.getNode())) {
          SDNode *Result = Emit_55(N, ARM::t2SUBri, MVT::i32);
          return Result;
        }

        // Pattern: (sub:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_imm0_4095>>:$rhs)
        // Emits: (t2SUBri12:i32 GPR:i32:$lhs, (imm:i32):$rhs)
        // Pattern complexity = 7  cost = 1  size = 0
        if (Predicate_imm0_4095(N1.getNode())) {
          SDNode *Result = Emit_55(N, ARM::t2SUBri12, MVT::i32);
          return Result;
        }
      }
    }

    // Pattern: (sub:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$lhs, GPR:i32:$rhs)
    // Emits: (t2RSBri:i32 GPR:i32:$rhs, (imm:i32):$lhs)
    // Pattern complexity = 7  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N0.getNode())) {
      SDNode *Result = Emit_310(N, ARM::t2RSBri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sub:i32 GPR:i32:$c, (mul:i32 GPR:i32:$a, GPR:i32:$b))
  // Emits: (MLS:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6T2Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDNode *Result = Emit_77(N, ARM::MLS, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sub:i32 GPR:i32:$c, (mulhs:i32 GPR:i32:$a, GPR:i32:$b))
  // Emits: (SMMLS:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
  // Pattern complexity = 6  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (Subtarget->hasV6Ops())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MULHS) {
      SDNode *Result = Emit_77(N, ARM::SMMLS, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sub:i32 GPR:i32:$c, (mul:i32 GPR:i32:$a, GPR:i32:$b))
    // Emits: (t2MLS:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDNode *Result = Emit_77(N, ARM::t2MLS, MVT::i32);
      return Result;
    }

    // Pattern: (sub:i32 GPR:i32:$c, (mulhs:i32 GPR:i32:$a, GPR:i32:$b))
    // Emits: (t2SMMLS:i32 GPR:i32:$a, GPR:i32:$b, GPR:i32:$c)
    // Pattern complexity = 6  cost = 1  size = 0
    if (N1.getNode()->getOpcode() == ISD::MULHS) {
      SDNode *Result = Emit_77(N, ARM::t2SMMLS, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sub:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (SUBrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_56(N, ARM::SUBrr, MVT::i32);
    return Result;
  }

  // Pattern: (sub:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tSUBrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_66(N, ARM::tSUBrr, MVT::i32);
    return Result;
  }

  // Pattern: (sub:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2SUBrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_56(N, ARM::t2SUBrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_312(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, Tmp1, Tmp2);
}
SDNode *Select_ISD_SUB_v8i8(SDNode *N) {

  // Pattern: (sub:v8i8 (build_vector:v8i8)<<P:Predicate_immAllZerosV>>, DPR:v8i8:$src)
  // Emits: (VNEGs8d:v8i8 DPR:v8i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs8d, MVT::v8i8);
      return Result;
    }
  }

  // Pattern: (sub:v8i8 (bitconvert:v8i8)<<P:Predicate_immAllZerosV_bc>>, DPR:v8i8:$src)
  // Emits: (VNEGs8d:v8i8 DPR:f64:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllZerosV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs8d, MVT::v8i8);
      return Result;
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (sub:v8i8 DPR:v8i8:$src1, (mul:v8i8 DPR:v8i8:$src2, DPR:v8i8:$src3))
    // Emits: (VMLSv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2, DPR:v8i8:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSv8i8, MVT::v8i8);
        return Result;
      }
    }

    // Pattern: (sub:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
    // Emits: (VSUBv8i8:v8i8 DPR:v8i8:$src1, DPR:v8i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBv8i8, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v16i8(SDNode *N) {

  // Pattern: (sub:v16i8 (build_vector:v16i8)<<P:Predicate_immAllZerosV>>, QPR:v16i8:$src)
  // Emits: (VNEGs8q:v16i8 QPR:v16i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs8q, MVT::v16i8);
      return Result;
    }
  }

  // Pattern: (sub:v16i8 (bitconvert:v16i8)<<P:Predicate_immAllZerosV_bc>>, QPR:v16i8:$src)
  // Emits: (VNEGs8q:v16i8 QPR:v16i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllZerosV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs8q, MVT::v16i8);
      return Result;
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (sub:v16i8 QPR:v16i8:$src1, (mul:v16i8 QPR:v16i8:$src2, QPR:v16i8:$src3))
    // Emits: (VMLSv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2, QPR:v16i8:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSv16i8, MVT::v16i8);
        return Result;
      }
    }

    // Pattern: (sub:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
    // Emits: (VSUBv16i8:v16i8 QPR:v16i8:$src1, QPR:v16i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBv16i8, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v4i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (sub:v4i16 DPR:v4i16:$src1, (mul:v4i16 DPR:v4i16:$src2, (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane)))
        // Emits: (VMLSslv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_129(N, ARM::VMLSslv4i16, MVT::v4i16);
              return Result;
            }
          }
        }

        // Pattern: (sub:v4i16 DPR:v4i16:$src1, (mul:v4i16 (NEONvduplane:v4i16 DPR_8:v4i16:$src3, (imm:i32):$lane), DPR:v4i16:$src2))
        // Emits: (VMLSslv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_130(N, ARM::VMLSslv4i16, MVT::v4i16);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v4i16 (build_vector:v4i16)<<P:Predicate_immAllZerosV>>, DPR:v4i16:$src)
    // Emits: (VNEGs16d:v4i16 DPR:v4i16:$src)
    // Pattern complexity = 7  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs16d, MVT::v4i16);
      return Result;
    }
  }

  // Pattern: (sub:v4i16 (bitconvert:v4i16)<<P:Predicate_immAllZerosV_bc>>, DPR:v4i16:$src)
  // Emits: (VNEGs16d:v4i16 DPR:f64:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllZerosV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs16d, MVT::v4i16);
      return Result;
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (sub:v4i16 DPR:v4i16:$src1, (mul:v4i16 DPR:v4i16:$src2, DPR:v4i16:$src3))
    // Emits: (VMLSv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2, DPR:v4i16:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSv4i16, MVT::v4i16);
        return Result;
      }
    }

    // Pattern: (sub:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
    // Emits: (VSUBv4i16:v4i16 DPR:v4i16:$src1, DPR:v4i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBv4i16, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v8i16(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (sub:v8i16 QPR:v8i16:$src1, (mul:v8i16 QPR:v8i16:$src2, (NEONvduplane:v8i16 DPR_8:v4i16:$src3, (imm:i32):$lane)))
      // Emits: (VMLSslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          if (N111.getNode()->getOpcode() == ISD::Constant &&
              N110.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_129(N, ARM::VMLSslv8i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (sub:v8i16 QPR:v8i16:$src1, (mul:v8i16 (NEONvduplane:v8i16 DPR_8:v4i16:$src3, (imm:i32):$lane), QPR:v8i16:$src2))
      // Emits: (VMLSslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, DPR_8:v4i16:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_130(N, ARM::VMLSslv8i16, MVT::v8i16);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (sub:v8i16 QPR:v8i16:$src1, (mul:v8i16 QPR:v8i16:$src2, (NEONvduplane:v8i16 QPR:v8i16:$src3, (imm:i32):$lane)))
      // Emits: (VMLSslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src3, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          if (N111.getNode()->getOpcode() == ISD::Constant &&
              N110.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_133(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLSslv8i16, MVT::v4i16, MVT::v8i16);
            return Result;
          }
        }
      }

      // Pattern: (sub:v8i16 QPR:v8i16:$src1, (mul:v8i16 (NEONvduplane:v8i16 QPR:v8i16:$src3, (imm:i32):$lane), QPR:v8i16:$src2))
      // Emits: (VMLSslv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, (EXTRACT_SUBREG:v4i16 QPR:v16i8:$src3, (DSubReg_i16_reg:i32 (imm:i32):$lane)), (SubReg_i16_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_134(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLSslv8i16, MVT::v4i16, MVT::v8i16);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (sub:v8i16 (build_vector:v8i16)<<P:Predicate_immAllZerosV>>, QPR:v8i16:$src)
  // Emits: (VNEGs16q:v8i16 QPR:v8i16:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs16q, MVT::v8i16);
      return Result;
    }
  }

  // Pattern: (sub:v8i16 (bitconvert:v8i16)<<P:Predicate_immAllZerosV_bc>>, QPR:v8i16:$src)
  // Emits: (VNEGs16q:v8i16 QPR:v16i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllZerosV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs16q, MVT::v8i16);
      return Result;
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (sub:v8i16 QPR:v8i16:$src1, (mul:v8i16 QPR:v8i16:$src2, QPR:v8i16:$src3))
    // Emits: (VMLSv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2, QPR:v8i16:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSv8i16, MVT::v8i16);
        return Result;
      }
    }

    // Pattern: (sub:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
    // Emits: (VSUBv8i16:v8i16 QPR:v8i16:$src1, QPR:v8i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBv8i16, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v2i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (sub:v2i32 DPR:v2i32:$src1, (mul:v2i32 DPR:v2i32:$src2, (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane)))
        // Emits: (VMLSslv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            SDValue N111 = N11.getNode()->getOperand(1);
            if (N111.getNode()->getOpcode() == ISD::Constant &&
                N110.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_129(N, ARM::VMLSslv2i32, MVT::v2i32);
              return Result;
            }
          }
        }

        // Pattern: (sub:v2i32 DPR:v2i32:$src1, (mul:v2i32 (NEONvduplane:v2i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane), DPR:v2i32:$src2))
        // Emits: (VMLSslv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
        // Pattern complexity = 12  cost = 1  size = 0
        if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::Constant) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_130(N, ARM::VMLSslv2i32, MVT::v2i32);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v2i32 (build_vector:v2i32)<<P:Predicate_immAllZerosV>>, DPR:v2i32:$src)
    // Emits: (VNEGs32d:v2i32 DPR:v2i32:$src)
    // Pattern complexity = 7  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs32d, MVT::v2i32);
      return Result;
    }
  }

  // Pattern: (sub:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllZerosV_bc>>, DPR:v2i32:$src)
  // Emits: (VNEGs32d:v2i32 DPR:f64:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllZerosV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs32d, MVT::v2i32);
      return Result;
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (sub:v2i32 DPR:v2i32:$src1, (mul:v2i32 DPR:v2i32:$src2, DPR:v2i32:$src3))
    // Emits: (VMLSv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2, DPR:v2i32:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSv2i32, MVT::v2i32);
        return Result;
      }
    }

    // Pattern: (sub:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Emits: (VSUBv2i32:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBv2i32, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v4i32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (sub:v4i32 QPR:v4i32:$src1, (mul:v4i32 QPR:v4i32:$src2, (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane)))
      // Emits: (VMLSslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          if (N111.getNode()->getOpcode() == ISD::Constant &&
              N110.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_129(N, ARM::VMLSslv4i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (sub:v4i32 QPR:v4i32:$src1, (mul:v4i32 (NEONvduplane:v4i32 DPR_VFP2:v2i32:$src3, (imm:i32):$lane), QPR:v4i32:$src2))
      // Emits: (VMLSslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, DPR_VFP2:v2i32:$src3, (imm:i32):$lane)
      // Pattern complexity = 12  cost = 1  size = 0
      if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_130(N, ARM::VMLSslv4i32, MVT::v4i32);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::MUL) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (sub:v4i32 QPR:v4i32:$src1, (mul:v4i32 QPR:v4i32:$src2, (NEONvduplane:v4i32 QPR:v4i32:$src3, (imm:i32):$lane)))
      // Emits: (VMLSslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ARMISD::VDUPLANE) {
          SDValue N110 = N11.getNode()->getOperand(0);
          SDValue N111 = N11.getNode()->getOperand(1);
          if (N111.getNode()->getOpcode() == ISD::Constant &&
              N110.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_137(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLSslv4i32, MVT::v2i32, MVT::v4i32);
            return Result;
          }
        }
      }

      // Pattern: (sub:v4i32 QPR:v4i32:$src1, (mul:v4i32 (NEONvduplane:v4i32 QPR:v4i32:$src3, (imm:i32):$lane), QPR:v4i32:$src2))
      // Emits: (VMLSslv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, (EXTRACT_SUBREG:v2i32 QPR:v16i8:$src3, (DSubReg_i32_reg:i32 (imm:i32):$lane)), (SubReg_i32_lane:i32 (imm:i32):$lane))
      // Pattern complexity = 12  cost = 2  size = 0
      if (N10.getNode()->getOpcode() == ARMISD::VDUPLANE) {
        SDValue N100 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        if (N101.getNode()->getOpcode() == ISD::Constant) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_138(N, TargetOpcode::EXTRACT_SUBREG, ARM::VMLSslv4i32, MVT::v2i32, MVT::v4i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (sub:v4i32 (build_vector:v4i32)<<P:Predicate_immAllZerosV>>, QPR:v4i32:$src)
  // Emits: (VNEGs32q:v4i32 QPR:v4i32:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs32q, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (sub:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllZerosV_bc>>, QPR:v4i32:$src)
  // Emits: (VNEGs32q:v4i32 QPR:v16i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllZerosV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VNEGs32q, MVT::v4i32);
      return Result;
    }
  }
  if ((Subtarget->hasNEON())) {

    // Pattern: (sub:v4i32 QPR:v4i32:$src1, (mul:v4i32 QPR:v4i32:$src2, QPR:v4i32:$src3))
    // Emits: (VMLSv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2, QPR:v4i32:$src3)
    // Pattern complexity = 6  cost = 1  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::MUL) {
        SDNode *Result = Emit_125(N, ARM::VMLSv4i32, MVT::v4i32);
        return Result;
      }
    }

    // Pattern: (sub:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Emits: (VSUBv4i32:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_44(N, ARM::VSUBv4i32, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v1i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VSUBv1i64, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v2i64(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VSUBv2i64, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_313(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Tmp3 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_314(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N1, Tmp1, Tmp2);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_315(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN0_0, CPTmpN0_1, Tmp2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 4);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
SDNode *Select_ISD_SUBC_i32(SDNode *N) {
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (subc:i32 GPR:i32:$a, so_reg:i32:$b)
    // Emits: (SUBSrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
        SDNode *Result = Emit_143(N, ARM::SUBSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
        return Result;
      }
    }

    // Pattern: (subc:i32 so_reg:i32:$b, GPR:i32:$a)
    // Emits: (RSBSrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_148(N, ARM::RSBSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (subc:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2SUBSrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_144(N, ARM::t2SUBSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (subc:i32 t2_so_reg:i32:$lhs, GPR:i32:$rhs)
    // Emits: (t2RSBSrs:i32 GPR:i32:$rhs, t2_so_reg:i32:$lhs)
    // Pattern complexity = 12  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDNode *Result = Emit_315(N, ARM::t2RSBSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
      return Result;
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (subc:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
    // Emits: (SUBSri:i32 GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 7  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm(N1.getNode())) {
        SDNode *Result = Emit_141(N, ARM::SUBSri, MVT::i32);
        return Result;
      }
    }

    // Pattern: (subc:i32 (imm:i32)<<P:Predicate_so_imm>>:$b, GPR:i32:$a)
    // Emits: (RSBSri:i32 GPR:i32:$a, (imm:i32):$b)
    // Pattern complexity = 7  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N0.getNode())) {
      SDNode *Result = Emit_313(N, ARM::RSBSri, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (subc:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
    // Emits: (t2SUBSri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
    // Pattern complexity = 7  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_t2_so_imm(N1.getNode())) {
        SDNode *Result = Emit_141(N, ARM::t2SUBSri, MVT::i32);
        return Result;
      }
    }

    // Pattern: (subc:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$lhs, GPR:i32:$rhs)
    // Emits: (t2RSBSri:i32 GPR:i32:$rhs, (imm:i32):$lhs)
    // Pattern complexity = 7  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N0.getNode())) {
      SDNode *Result = Emit_314(N, ARM::t2RSBSri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (subc:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (SUBSrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDNode *Result = Emit_142(N, ARM::SUBSrr, MVT::i32);
    return Result;
  }

  // Pattern: (subc:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2SUBSrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_142(N, ARM::t2SUBSrr, MVT::i32);
    return Result;
  }

  // Pattern: (subc:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tSUBrr:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_146(N, ARM::tSUBrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_316(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp4 = CurDAG->getRegister(0, MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { N1, Tmp1, Tmp2, Tmp3, Tmp4, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, Ops0, 6);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_317(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue InFlag = N->getOperand(2);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N1, Tmp1, InFlag);
  InFlag = SDValue(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
SDNode *Select_ISD_SUBE_i32(SDNode *N) {

  // Pattern: (sube:i32 GPR:i32:$a, so_reg:i32:$b)
  // Emits: (SBCrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
      SDNode *Result = Emit_152(N, ARM::SBCrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$a, so_reg:i32:$b)
  // Emits: (SBCSSrs:i32 GPR:i32:$a, so_reg:i32:$b)
  // Pattern complexity = 15  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
      SDNode *Result = Emit_155(N, ARM::SBCSSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {

      // Pattern: (sube:i32 so_reg:i32:$b, GPR:i32:$a)
      // Emits: (RSCrs:i32 GPR:i32:$a, so_reg:i32:$b)
      // Pattern complexity = 15  cost = 1  size = 0
      {
        SDNode *Result = Emit_159(N, ARM::RSCrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
        return Result;
      }

      // Pattern: (sube:i32 so_reg:i32:$b, GPR:i32:$a)
      // Emits: (RSCSrs:i32 GPR:i32:$a, so_reg:i32:$b)
      // Pattern complexity = 15  cost = 1  size = 0
      SDNode *Result = Emit_160(N, ARM::RSCSrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Emits: (t2SBCrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
      SDNode *Result = Emit_157(N, ARM::t2SBCrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Emits: (t2SBCSrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
  // Pattern complexity = 12  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
      SDNode *Result = Emit_158(N, ARM::t2SBCSrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (SBCri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_150(N, ARM::SBCri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
  // Emits: (SBCSSri:i32 GPR:i32:$a, (imm:i32):$b)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N1.getNode())) {
      SDNode *Result = Emit_153(N, ARM::SBCSSri, MVT::i32);
      return Result;
    }
  }
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_so_imm(N0.getNode())) {

      // Pattern: (sube:i32 (imm:i32)<<P:Predicate_so_imm>>:$b, GPR:i32:$a)
      // Emits: (RSCri:i32 GPR:i32:$a, (imm:i32):$b)
      // Pattern complexity = 7  cost = 1  size = 0
      {
        SDNode *Result = Emit_316(N, ARM::RSCri, MVT::i32);
        return Result;
      }

      // Pattern: (sube:i32 (imm:i32)<<P:Predicate_so_imm>>:$b, GPR:i32:$a)
      // Emits: (RSCSri:i32 GPR:i32:$a, (imm:i32):$b)
      // Pattern complexity = 7  cost = 1  size = 0
      SDNode *Result = Emit_317(N, ARM::RSCSri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
  // Emits: (t2SBCri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N1.getNode())) {
      SDNode *Result = Emit_150(N, ARM::t2SBCri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
  // Emits: (t2SBCSri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N1.getNode())) {
      SDNode *Result = Emit_153(N, ARM::t2SBCSri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sube:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (SBCrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (!N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_151(N, ARM::SBCrr, MVT::i32);
    return Result;
  }

  // Pattern: (sube:i32 GPR:i32:$a, GPR:i32:$b)
  // Emits: (SBCSSrr:i32 GPR:i32:$a, GPR:i32:$b)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->isThumb()) && (N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_154(N, ARM::SBCSSrr, MVT::i32);
    return Result;
  }

  // Pattern: (sube:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tSBC:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_156(N, ARM::tSBC, MVT::i32);
    return Result;
  }

  // Pattern: (sube:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2SBCrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (!N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_151(N, ARM::t2SBCrr, MVT::i32);
    return Result;
  }

  // Pattern: (sube:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2SBCSrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2()) && (N->hasAnyUseOfValue(1))) {
    SDNode *Result = Emit_154(N, ARM::t2SBCSrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_UINT_TO_FP_v2f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_31(N, ARM::VCVTu2fd, MVT::v2f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_UINT_TO_FP_v4f32(SDNode *N) {
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_31(N, ARM::VCVTu2fq, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_318(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { N0, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_319(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1, SDValue &CPTmpN0_2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN0_0, CPTmpN0_1, CPTmpN0_2, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_320(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getRegister(ARM::CPSR, MVT::i32);
  SDValue Tmp2 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, N0, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_321(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N0)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_322(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0_0, SDValue &CPTmpN0_1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { CPTmpN0_0, CPTmpN0_1, Tmp1, Tmp2 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_323(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp1 = CurDAG->getTargetConstant(0xEULL, MVT::i32);
  SDValue Tmp2 = CurDAG->getRegister(0, MVT::i32);
  SDValue Tmp3 = CurDAG->getRegister(0, MVT::i32);
  SDValue Ops0[] = { Tmp0, Tmp1, Tmp2, Tmp3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_ISD_XOR_i32(SDNode *N) {

  // Pattern: (xor:i32 so_reg:i32:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
  // Emits: (MVNs:i32 so_reg:i32:$src)
  // Pattern complexity = 19  cost = 1  size = 0
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_319(N, ARM::MVNs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
        return Result;
      }
    }
  }

  // Pattern: (xor:i32 t2_so_reg:i32:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
  // Emits: (t2MVNs:i32 t2_so_reg:i32:$src)
  // Pattern complexity = 17  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_322(N, ARM::t2MVNs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:i32 GPR:i32:$a, so_reg:i32:$b)
    // Emits: (EORrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      if (SelectShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2)) {
        SDNode *Result = Emit_57(N, ARM::EORrs, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2);
        return Result;
      }
    }

    // Pattern: (xor:i32 so_reg:i32:$b, GPR:i32:$a)
    // Emits: (EORrs:i32 GPR:i32:$a, so_reg:i32:$b)
    // Pattern complexity = 15  cost = 1  size = 0
    SDValue CPTmpN0_0;
    SDValue CPTmpN0_1;
    SDValue CPTmpN0_2;
    if (SelectShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2)) {
      SDNode *Result = Emit_88(N, ARM::EORrs, MVT::i32, CPTmpN0_0, CPTmpN0_1, CPTmpN0_2);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Emits: (t2EORrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      if (SelectT2ShifterOperandReg(N, N1, CPTmpN1_0, CPTmpN1_1)) {
        SDNode *Result = Emit_68(N, ARM::t2EORrs, MVT::i32, CPTmpN1_0, CPTmpN1_1);
        return Result;
      }
    }

    // Pattern: (xor:i32 (imm:i32)<<P:Predicate_t2_so_imm>>:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
    // Emits: (t2MVNi:i32 (imm:i32):$src)
    // Pattern complexity = 12  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_t2_so_imm(N0.getNode())) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_321(N, ARM::t2MVNi, MVT::i32);
        return Result;
      }
    }

    // Pattern: (xor:i32 t2_so_reg:i32:$rhs, GPR:i32:$lhs)
    // Emits: (t2EORrs:i32 GPR:i32:$lhs, t2_so_reg:i32:$rhs)
    // Pattern complexity = 12  cost = 1  size = 0
    {
      SDValue CPTmpN0_0;
      SDValue CPTmpN0_1;
      if (SelectT2ShifterOperandReg(N, N0, CPTmpN0_0, CPTmpN0_1)) {
        SDNode *Result = Emit_103(N, ARM::t2EORrs, MVT::i32, CPTmpN0_0, CPTmpN0_1);
        return Result;
      }
    }

    // Pattern: (xor:i32 (imm:i32)<<P:Predicate_immAllOnes>>, (imm:i32)<<P:Predicate_t2_so_imm>>:$src)
    // Emits: (t2MVNi:i32 (imm:i32):$src)
    // Pattern complexity = 12  cost = 1  size = 0
    if (N0.getNode()->getOpcode() == ISD::Constant &&
        Predicate_immAllOnes(N0.getNode())) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_t2_so_imm(N1.getNode())) {
        SDNode *Result = Emit_323(N, ARM::t2MVNi, MVT::i32);
        return Result;
      }
    }

    // Pattern: (xor:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
    // Emits: (t2MVNr:i32 GPR:i32:$src)
    // Pattern complexity = 8  cost = 1  size = 0
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_immAllOnes(N1.getNode())) {
      SDNode *Result = Emit_292(N, ARM::t2MVNr, MVT::i32);
      return Result;
    }
  }
  if ((!Subtarget->isThumb())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (xor:i32 GPR:i32:$a, (imm:i32)<<P:Predicate_so_imm>>:$b)
      // Emits: (EORri:i32 GPR:i32:$a, (imm:i32):$b)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_so_imm(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::EORri, MVT::i32);
        return Result;
      }

      // Pattern: (xor:i32 GPR:i32:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
      // Emits: (MVNr:i32 GPR:i32:$src)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_318(N, ARM::MVNr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (xor:i32 tGPR:i32:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
  // Emits: (tMVN:i32 tGPR:i32:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_immAllOnes(N1.getNode())) {
      SDNode *Result = Emit_320(N, ARM::tMVN, MVT::i32);
      return Result;
    }
  }
  if ((Subtarget->isThumb2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (xor:i32 GPR:i32:$lhs, (imm:i32)<<P:Predicate_t2_so_imm>>:$rhs)
      // Emits: (t2EORri:i32 GPR:i32:$lhs, (imm:i32):$rhs)
      // Pattern complexity = 7  cost = 1  size = 0
      if (Predicate_t2_so_imm(N1.getNode())) {
        SDNode *Result = Emit_55(N, ARM::t2EORri, MVT::i32);
        return Result;
      }

      // Pattern: (xor:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_t2_so_imm2part>>:$RHS)
      // Emits: (t2EORri:i32 (t2EORri:i32 GPR:i32:$LHS, (t2_so_imm2part_1:i32 (imm:i32):$RHS)), (t2_so_imm2part_2:i32 (imm:i32):$RHS))
      // Pattern complexity = 7  cost = 2  size = 0
      if (Predicate_t2_so_imm2part(N1.getNode())) {
        SDNode *Result = Emit_71(N, ARM::t2EORri, ARM::t2EORri, MVT::i32, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->isThumb())) {

    // Pattern: (xor:i32 GPR:i32:$LHS, (imm:i32)<<P:Predicate_so_imm2part>>:$RHS)
    // Emits: (EORri:i32 (EORri:i32 GPR:i32:$LHS, (so_imm2part_1:i32 (imm:i32):$RHS)), (so_imm2part_2:i32 (imm:i32):$RHS))
    // Pattern complexity = 7  cost = 2  size = 0
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          Predicate_so_imm2part(N1.getNode())) {
        SDNode *Result = Emit_74(N, ARM::EORri, ARM::EORri, MVT::i32, MVT::i32);
        return Result;
      }
    }

    // Pattern: (xor:i32 GPR:i32:$a, GPR:i32:$b)
    // Emits: (EORrr:i32 GPR:i32:$a, GPR:i32:$b)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_56(N, ARM::EORrr, MVT::i32);
    return Result;
  }

  // Pattern: (xor:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Emits: (tEOR:i32 tGPR:i32:$lhs, tGPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb1Only())) {
    SDNode *Result = Emit_66(N, ARM::tEOR, MVT::i32);
    return Result;
  }

  // Pattern: (xor:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Emits: (t2EORrr:i32 GPR:i32:$lhs, GPR:i32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->isThumb2())) {
    SDNode *Result = Emit_56(N, ARM::t2EORrr, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_XOR_v2i32(SDNode *N) {

  // Pattern: (xor:v2i32 DPR:v2i32:$src, (build_vector:v2i32)<<P:Predicate_immAllOnesV>>)
  // Emits: (VMVNd:v2i32 DPR:v2i32:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllOnesV(N1.getNode())) {
      SDNode *Result = Emit_292(N, ARM::VMVNd, MVT::v2i32);
      return Result;
    }
  }

  // Pattern: (xor:v2i32 DPR:v2i32:$src, (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>)
  // Emits: (VMVNd:v2i32 DPR:f64:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllOnesV_bc(N1.getNode())) {
      SDNode *Result = Emit_292(N, ARM::VMVNd, MVT::v2i32);
      return Result;
    }
  }

  // Pattern: (xor:v2i32 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>, DPR:v2i32:$src)
  // Emits: (VMVNd:v2i32 DPR:v2i32:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllOnesV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VMVNd, MVT::v2i32);
      return Result;
    }
  }

  // Pattern: (xor:v2i32 (bitconvert:v2i32)<<P:Predicate_immAllOnesV_bc>>, DPR:v2i32:$src)
  // Emits: (VMVNd:v2i32 DPR:f64:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllOnesV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VMVNd, MVT::v2i32);
      return Result;
    }
  }

  // Pattern: (xor:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
  // Emits: (VEORd:v2i32 DPR:v2i32:$src1, DPR:v2i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VEORd, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_XOR_v4i32(SDNode *N) {

  // Pattern: (xor:v4i32 QPR:v4i32:$src, (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)
  // Emits: (VMVNq:v4i32 QPR:v4i32:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllOnesV(N1.getNode())) {
      SDNode *Result = Emit_292(N, ARM::VMVNq, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (xor:v4i32 QPR:v4i32:$src, (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>)
  // Emits: (VMVNq:v4i32 QPR:v16i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllOnesV_bc(N1.getNode())) {
      SDNode *Result = Emit_292(N, ARM::VMVNq, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (xor:v4i32 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>, QPR:v4i32:$src)
  // Emits: (VMVNq:v4i32 QPR:v4i32:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllOnesV(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VMVNq, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (xor:v4i32 (bitconvert:v4i32)<<P:Predicate_immAllOnesV_bc>>, QPR:v4i32:$src)
  // Emits: (VMVNq:v4i32 QPR:v16i8:$src)
  // Pattern complexity = 7  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        Predicate_immAllOnesV_bc(N0.getNode())) {
      SDNode *Result = Emit_312(N, ARM::VMVNq, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (xor:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
  // Emits: (VEORq:v4i32 QPR:v4i32:$src1, QPR:v4i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((Subtarget->hasNEON())) {
    SDNode *Result = Emit_44(N, ARM::VEORq, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

// The main instruction selector code.
SDNode *SelectCode(SDNode *N) {
  MVT::SimpleValueType NVT = N->getValueType(0).getSimpleVT().SimpleTy;
  switch (N->getOpcode()) {
  default:
    assert(!N->isMachineOpcode() && "Node already selected!");
    break;
  case ISD::EntryToken:       // These nodes remain the same.
  case ISD::BasicBlock:
  case ISD::Register:
  case ISD::HANDLENODE:
  case ISD::TargetConstant:
  case ISD::TargetConstantFP:
  case ISD::TargetConstantPool:
  case ISD::TargetFrameIndex:
  case ISD::TargetExternalSymbol:
  case ISD::TargetBlockAddress:
  case ISD::TargetJumpTable:
  case ISD::TargetGlobalTLSAddress:
  case ISD::TargetGlobalAddress:
  case ISD::TokenFactor:
  case ISD::CopyFromReg:
  case ISD::CopyToReg: {
    return NULL;
  }
  case ISD::AssertSext:
  case ISD::AssertZext: {
    ReplaceUses(SDValue(N, 0), N->getOperand(0));
    return NULL;
  }
  case ISD::INLINEASM: return Select_INLINEASM(N);
  case ISD::EH_LABEL: return Select_EH_LABEL(N);
  case ISD::UNDEF: return Select_UNDEF(N);
  case ARMISD::BR2_JT: {
    return Select_ARMISD_BR2_JT(N);
    break;
  }
  case ARMISD::BR_JT: {
    return Select_ARMISD_BR_JT(N);
    break;
  }
  case ARMISD::CALL: {
    return Select_ARMISD_CALL(N);
    break;
  }
  case ARMISD::CALL_NOLINK: {
    return Select_ARMISD_CALL_NOLINK(N);
    break;
  }
  case ARMISD::CALL_PRED: {
    return Select_ARMISD_CALL_PRED(N);
    break;
  }
  case ARMISD::CMP: {
    return Select_ARMISD_CMP(N);
    break;
  }
  case ARMISD::CMPFP: {
    return Select_ARMISD_CMPFP(N);
    break;
  }
  case ARMISD::CMPFPw0: {
    return Select_ARMISD_CMPFPw0(N);
    break;
  }
  case ARMISD::CMPZ: {
    return Select_ARMISD_CMPZ(N);
    break;
  }
  case ARMISD::EH_SJLJ_SETJMP: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_EH_SJLJ_SETJMP_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::FMSTAT: {
    return Select_ARMISD_FMSTAT(N);
    break;
  }
  case ARMISD::FTOSI: {
    switch (NVT) {
    case MVT::f32:
      return Select_ARMISD_FTOSI_f32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::FTOUI: {
    switch (NVT) {
    case MVT::f32:
      return Select_ARMISD_FTOUI_f32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::MEMBARRIER: {
    return Select_ARMISD_MEMBARRIER(N);
    break;
  }
  case ARMISD::PIC_ADD: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_PIC_ADD_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::RBIT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_RBIT_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::RET_FLAG: {
    return Select_ARMISD_RET_FLAG(N);
    break;
  }
  case ARMISD::RRX: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_RRX_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::SITOF: {
    switch (NVT) {
    case MVT::f32:
      return Select_ARMISD_SITOF_f32(N);
    case MVT::f64:
      return Select_ARMISD_SITOF_f64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::SRA_FLAG: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_SRA_FLAG_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::SRL_FLAG: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_SRL_FLAG_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::SYNCBARRIER: {
    return Select_ARMISD_SYNCBARRIER(N);
    break;
  }
  case ARMISD::THREAD_POINTER: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_THREAD_POINTER_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::UITOF: {
    switch (NVT) {
    case MVT::f32:
      return Select_ARMISD_UITOF_f32(N);
    case MVT::f64:
      return Select_ARMISD_UITOF_f64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VCEQ: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VCEQ_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VCEQ_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VCEQ_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VCEQ_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VCEQ_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VCEQ_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VCGE: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VCGE_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VCGE_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VCGE_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VCGE_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VCGE_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VCGE_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VCGEU: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VCGEU_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VCGEU_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VCGEU_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VCGEU_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VCGEU_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VCGEU_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VCGT: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VCGT_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VCGT_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VCGT_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VCGT_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VCGT_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VCGT_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VCGTU: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VCGTU_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VCGTU_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VCGTU_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VCGTU_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VCGTU_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VCGTU_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VDUP: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VDUP_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VDUP_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VDUP_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VDUP_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VDUP_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VDUP_v4i32(N);
    case MVT::v2f32:
      return Select_ARMISD_VDUP_v2f32(N);
    case MVT::v4f32:
      return Select_ARMISD_VDUP_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VDUPLANE: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VDUPLANE_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VDUPLANE_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VDUPLANE_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VDUPLANE_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VDUPLANE_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VDUPLANE_v4i32(N);
    case MVT::v2i64:
      return Select_ARMISD_VDUPLANE_v2i64(N);
    case MVT::v2f32:
      return Select_ARMISD_VDUPLANE_v2f32(N);
    case MVT::v4f32:
      return Select_ARMISD_VDUPLANE_v4f32(N);
    case MVT::v2f64:
      return Select_ARMISD_VDUPLANE_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VEXT: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VEXT_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VEXT_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VEXT_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VEXT_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VEXT_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VEXT_v4i32(N);
    case MVT::v2f32:
      return Select_ARMISD_VEXT_v2f32(N);
    case MVT::v4f32:
      return Select_ARMISD_VEXT_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VGETLANEs: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_VGETLANEs_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VGETLANEu: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_VGETLANEu_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VMOVDRR: {
    switch (NVT) {
    case MVT::f64:
      return Select_ARMISD_VMOVDRR_f64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQRSHRNs: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQRSHRNs_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQRSHRNs_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQRSHRNs_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQRSHRNsu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQRSHRNsu_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQRSHRNsu_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQRSHRNsu_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQRSHRNu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQRSHRNu_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQRSHRNu_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQRSHRNu_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQSHLs: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQSHLs_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VQSHLs_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQSHLs_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VQSHLs_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQSHLs_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VQSHLs_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VQSHLs_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VQSHLs_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQSHLsu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQSHLsu_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VQSHLsu_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQSHLsu_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VQSHLsu_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQSHLsu_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VQSHLsu_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VQSHLsu_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VQSHLsu_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQSHLu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQSHLu_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VQSHLu_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQSHLu_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VQSHLu_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQSHLu_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VQSHLu_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VQSHLu_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VQSHLu_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQSHRNs: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQSHRNs_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQSHRNs_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQSHRNs_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQSHRNsu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQSHRNsu_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQSHRNsu_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQSHRNsu_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VQSHRNu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VQSHRNu_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VQSHRNu_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VQSHRNu_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VREV16: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VREV16_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VREV16_v16i8(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VREV32: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VREV32_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VREV32_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VREV32_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VREV32_v8i16(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VREV64: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VREV64_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VREV64_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VREV64_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VREV64_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VREV64_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VREV64_v4i32(N);
    case MVT::v2f32:
      return Select_ARMISD_VREV64_v2f32(N);
    case MVT::v4f32:
      return Select_ARMISD_VREV64_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VRSHRN: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VRSHRN_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VRSHRN_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VRSHRN_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VRSHRs: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VRSHRs_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VRSHRs_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VRSHRs_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VRSHRs_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VRSHRs_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VRSHRs_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VRSHRs_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VRSHRs_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VRSHRu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VRSHRu_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VRSHRu_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VRSHRu_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VRSHRu_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VRSHRu_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VRSHRu_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VRSHRu_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VRSHRu_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHL: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VSHL_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VSHL_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VSHL_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VSHL_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VSHL_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VSHL_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VSHL_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VSHL_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHLLi: {
    switch (NVT) {
    case MVT::v8i16:
      return Select_ARMISD_VSHLLi_v8i16(N);
    case MVT::v4i32:
      return Select_ARMISD_VSHLLi_v4i32(N);
    case MVT::v2i64:
      return Select_ARMISD_VSHLLi_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHLLs: {
    switch (NVT) {
    case MVT::v8i16:
      return Select_ARMISD_VSHLLs_v8i16(N);
    case MVT::v4i32:
      return Select_ARMISD_VSHLLs_v4i32(N);
    case MVT::v2i64:
      return Select_ARMISD_VSHLLs_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHLLu: {
    switch (NVT) {
    case MVT::v8i16:
      return Select_ARMISD_VSHLLu_v8i16(N);
    case MVT::v4i32:
      return Select_ARMISD_VSHLLu_v4i32(N);
    case MVT::v2i64:
      return Select_ARMISD_VSHLLu_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHRN: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VSHRN_v8i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VSHRN_v4i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VSHRN_v2i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHRs: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VSHRs_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VSHRs_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VSHRs_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VSHRs_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VSHRs_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VSHRs_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VSHRs_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VSHRs_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSHRu: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VSHRu_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VSHRu_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VSHRu_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VSHRu_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VSHRu_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VSHRu_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VSHRu_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VSHRu_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSLI: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VSLI_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VSLI_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VSLI_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VSLI_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VSLI_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VSLI_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VSLI_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VSLI_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VSRI: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VSRI_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VSRI_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VSRI_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VSRI_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VSRI_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VSRI_v4i32(N);
    case MVT::v1i64:
      return Select_ARMISD_VSRI_v1i64(N);
    case MVT::v2i64:
      return Select_ARMISD_VSRI_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::VTST: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ARMISD_VTST_v8i8(N);
    case MVT::v16i8:
      return Select_ARMISD_VTST_v16i8(N);
    case MVT::v4i16:
      return Select_ARMISD_VTST_v4i16(N);
    case MVT::v8i16:
      return Select_ARMISD_VTST_v8i16(N);
    case MVT::v2i32:
      return Select_ARMISD_VTST_v2i32(N);
    case MVT::v4i32:
      return Select_ARMISD_VTST_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::Wrapper: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_Wrapper_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::WrapperJT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ARMISD_WrapperJT_i32(N);
    default:
      break;
    }
    break;
  }
  case ARMISD::tCALL: {
    return Select_ARMISD_tCALL(N);
    break;
  }
  case ISD::ADD: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ADD_i32(N);
    case MVT::v8i8:
      return Select_ISD_ADD_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_ADD_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_ADD_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_ADD_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_ADD_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_ADD_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_ADD_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_ADD_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ADDC: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ADDC_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ADDE: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ADDE_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::AND: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_AND_i32(N);
    case MVT::v2i32:
      return Select_ISD_AND_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_AND_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_CMP_SWAP: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_CMP_SWAP_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_ADD: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_ADD_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_AND: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_AND_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_NAND: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_NAND_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_OR: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_OR_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_SUB: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_SUB_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_XOR: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_XOR_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_SWAP: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ATOMIC_SWAP_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::BIT_CONVERT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_BIT_CONVERT_i32(N);
    case MVT::f32:
      return Select_ISD_BIT_CONVERT_f32(N);
    case MVT::f64:
      return Select_ISD_BIT_CONVERT_f64(N);
    case MVT::v8i8:
      return Select_ISD_BIT_CONVERT_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_BIT_CONVERT_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_BIT_CONVERT_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_BIT_CONVERT_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_BIT_CONVERT_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_BIT_CONVERT_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_BIT_CONVERT_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_BIT_CONVERT_v2i64(N);
    case MVT::v2f32:
      return Select_ISD_BIT_CONVERT_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_BIT_CONVERT_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_BIT_CONVERT_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::BR: {
    return Select_ISD_BR(N);
    break;
  }
  case ISD::BRIND: {
    return Select_ISD_BRIND(N);
    break;
  }
  case ISD::BSWAP: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_BSWAP_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::BUILD_VECTOR: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ISD_BUILD_VECTOR_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_BUILD_VECTOR_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_BUILD_VECTOR_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_BUILD_VECTOR_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_BUILD_VECTOR_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_BUILD_VECTOR_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_BUILD_VECTOR_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_BUILD_VECTOR_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::CALLSEQ_END: {
    return Select_ISD_CALLSEQ_END(N);
    break;
  }
  case ISD::CALLSEQ_START: {
    return Select_ISD_CALLSEQ_START(N);
    break;
  }
  case ISD::CTLZ: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_CTLZ_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::Constant: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_Constant_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ConstantFP: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_ConstantFP_f32(N);
    case MVT::f64:
      return Select_ISD_ConstantFP_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::EXTRACT_VECTOR_ELT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_EXTRACT_VECTOR_ELT_i32(N);
    case MVT::f32:
      return Select_ISD_EXTRACT_VECTOR_ELT_f32(N);
    case MVT::f64:
      return Select_ISD_EXTRACT_VECTOR_ELT_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FABS: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FABS_f32(N);
    case MVT::f64:
      return Select_ISD_FABS_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FADD: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FADD_f32(N);
    case MVT::f64:
      return Select_ISD_FADD_f64(N);
    case MVT::v2f32:
      return Select_ISD_FADD_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_FADD_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::FDIV: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FDIV_f32(N);
    case MVT::f64:
      return Select_ISD_FDIV_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FMUL: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FMUL_f32(N);
    case MVT::f64:
      return Select_ISD_FMUL_f64(N);
    case MVT::v2f32:
      return Select_ISD_FMUL_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_FMUL_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::FNEG: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FNEG_f32(N);
    case MVT::f64:
      return Select_ISD_FNEG_f64(N);
    case MVT::v2f32:
      return Select_ISD_FNEG_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_FNEG_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_EXTEND: {
    switch (NVT) {
    case MVT::f64:
      return Select_ISD_FP_EXTEND_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_ROUND: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FP_ROUND_f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_TO_SINT: {
    switch (NVT) {
    case MVT::v2i32:
      return Select_ISD_FP_TO_SINT_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_FP_TO_SINT_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_TO_UINT: {
    switch (NVT) {
    case MVT::v2i32:
      return Select_ISD_FP_TO_UINT_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_FP_TO_UINT_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::FSQRT: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FSQRT_f32(N);
    case MVT::f64:
      return Select_ISD_FSQRT_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FSUB: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FSUB_f32(N);
    case MVT::f64:
      return Select_ISD_FSUB_f64(N);
    case MVT::v2f32:
      return Select_ISD_FSUB_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_FSUB_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::INSERT_VECTOR_ELT: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ISD_INSERT_VECTOR_ELT_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_INSERT_VECTOR_ELT_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_INSERT_VECTOR_ELT_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_INSERT_VECTOR_ELT_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_INSERT_VECTOR_ELT_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_INSERT_VECTOR_ELT_v4i32(N);
    case MVT::v2f32:
      return Select_ISD_INSERT_VECTOR_ELT_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_INSERT_VECTOR_ELT_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_INSERT_VECTOR_ELT_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::INTRINSIC_VOID: {
    return Select_ISD_INTRINSIC_VOID(N);
    break;
  }
  case ISD::INTRINSIC_WO_CHAIN: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ISD_INTRINSIC_WO_CHAIN_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_INTRINSIC_WO_CHAIN_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_INTRINSIC_WO_CHAIN_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_INTRINSIC_WO_CHAIN_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_INTRINSIC_WO_CHAIN_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_INTRINSIC_WO_CHAIN_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_INTRINSIC_WO_CHAIN_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_INTRINSIC_WO_CHAIN_v2i64(N);
    case MVT::v2f32:
      return Select_ISD_INTRINSIC_WO_CHAIN_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_INTRINSIC_WO_CHAIN_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::INTRINSIC_W_CHAIN: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ISD_INTRINSIC_W_CHAIN_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_INTRINSIC_W_CHAIN_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_INTRINSIC_W_CHAIN_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_INTRINSIC_W_CHAIN_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_INTRINSIC_W_CHAIN_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_INTRINSIC_W_CHAIN_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_INTRINSIC_W_CHAIN_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_INTRINSIC_W_CHAIN_v2i64(N);
    case MVT::v2f32:
      return Select_ISD_INTRINSIC_W_CHAIN_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_INTRINSIC_W_CHAIN_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::LOAD: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_LOAD_i32(N);
    case MVT::f32:
      return Select_ISD_LOAD_f32(N);
    case MVT::f64:
      return Select_ISD_LOAD_f64(N);
    case MVT::v2f64:
      return Select_ISD_LOAD_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::MUL: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_MUL_i32(N);
    case MVT::v8i8:
      return Select_ISD_MUL_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_MUL_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_MUL_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_MUL_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_MUL_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_MUL_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::MULHS: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_MULHS_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::OR: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_OR_i32(N);
    case MVT::v2i32:
      return Select_ISD_OR_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_OR_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::ROTR: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_ROTR_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::SCALAR_TO_VECTOR: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ISD_SCALAR_TO_VECTOR_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_SCALAR_TO_VECTOR_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_SCALAR_TO_VECTOR_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_SCALAR_TO_VECTOR_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_SCALAR_TO_VECTOR_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_SCALAR_TO_VECTOR_v4i32(N);
    case MVT::v2f32:
      return Select_ISD_SCALAR_TO_VECTOR_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_SCALAR_TO_VECTOR_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_SCALAR_TO_VECTOR_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SHL: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SHL_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::SIGN_EXTEND_INREG: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SIGN_EXTEND_INREG_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::SINT_TO_FP: {
    switch (NVT) {
    case MVT::v2f32:
      return Select_ISD_SINT_TO_FP_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_SINT_TO_FP_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::SRA: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SRA_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::SRL: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SRL_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::STORE: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_STORE_i32(N);
    default:
      return Select_ISD_STORE(N);
      break;
    }
    break;
  }
  case ISD::SUB: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SUB_i32(N);
    case MVT::v8i8:
      return Select_ISD_SUB_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_SUB_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_SUB_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_SUB_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_SUB_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_SUB_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_SUB_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_SUB_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SUBC: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SUBC_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::SUBE: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_SUBE_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::UINT_TO_FP: {
    switch (NVT) {
    case MVT::v2f32:
      return Select_ISD_UINT_TO_FP_v2f32(N);
    case MVT::v4f32:
      return Select_ISD_UINT_TO_FP_v4f32(N);
    default:
      break;
    }
    break;
  }
  case ISD::XOR: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_XOR_i32(N);
    case MVT::v2i32:
      return Select_ISD_XOR_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_XOR_v4i32(N);
    default:
      break;
    }
    break;
  }
  } // end of big switch.

  if (N->getOpcode() != ISD::INTRINSIC_W_CHAIN &&
      N->getOpcode() != ISD::INTRINSIC_WO_CHAIN &&
      N->getOpcode() != ISD::INTRINSIC_VOID) {
    CannotYetSelect(N);
  } else {
    CannotYetSelectIntrinsic(N);
  }
  return NULL;
}