//===- TableGen'erated file -------------------------------------*- C++ -*-===//
//
// DAG Instruction Selector for the X86 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_BYTE_imm(SDNode *inN) {
  ConstantSDNode *N = cast<ConstantSDNode>(inN);

  // Transformation function: imm >> 3
  return getI32Imm(N->getZExtValue() >> 3);

}
inline SDValue Transform_MMX_SHUFFLE_get_shuf_imm(SDNode *N) {

  return getI8Imm(X86::getShuffleSHUFImmediate(N));

}
inline SDValue Transform_SHUFFLE_get_palign_imm(SDNode *N) {

  return getI8Imm(X86::getShufflePALIGNRImmediate(N));

}
inline SDValue Transform_SHUFFLE_get_pshufhw_imm(SDNode *N) {

  return getI8Imm(X86::getShufflePSHUFHWImmediate(N));

}
inline SDValue Transform_SHUFFLE_get_pshuflw_imm(SDNode *N) {

  return getI8Imm(X86::getShufflePSHUFLWImmediate(N));

}
inline SDValue Transform_SHUFFLE_get_shuf_imm(SDNode *N) {

  return getI8Imm(X86::getShuffleSHUFImmediate(N));

}

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

  return cast<LoadSDNode>(N)->getAlignment() >= 16;

}
inline bool Predicate_alignedstore(SDNode *N) {

  return cast<StoreSDNode>(N)->getAlignment() >= 16;

}
inline bool Predicate_and_su(SDNode *N) {

  return N->hasOneUse();

}
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_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_def32(SDNode *N) {

  return N->getOpcode() != ISD::TRUNCATE &&
         N->getOpcode() != TargetOpcode::EXTRACT_SUBREG &&
         N->getOpcode() != ISD::CopyFromReg &&
         N->getOpcode() != X86ISD::CMOV;

}
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_fp32imm0(SDNode *inN) {
  ConstantFPSDNode *N = cast<ConstantFPSDNode>(inN);

  return N->isExactlyValue(+0.0);

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

  return N->isExactlyValue(+0.0);

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

  return N->isExactlyValue(+1.0);

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

  return N->isExactlyValue(-0.0);

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

  return N->isExactlyValue(-1.0);

}
inline bool Predicate_fsload(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      return PT->getAddressSpace() == 257;
  return false;

}
inline bool Predicate_gsload(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      return PT->getAddressSpace() == 256;
  return false;

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

  // i16immSExt8 predicate - True if the 16-bit immediate fits in a 8-bit
  // sign extended field.
  return (int16_t)N->getZExtValue() == (int8_t)N->getZExtValue();

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

  // i32immSExt8 predicate - True if the 32-bit immediate fits in a 8-bit
  // sign extended field.
  return (int32_t)N->getZExtValue() == (int8_t)N->getZExtValue();

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

  // i64immSExt32 predicate - True if the 64-bit immediate fits in a 32-bit
  // sign extended field.
  return (int64_t)N->getZExtValue() == (int32_t)N->getZExtValue();

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

  // i64immSExt8 predicate - True if the 64-bit immediate fits in a 8-bit
  // sign extended field.
  return (int64_t)N->getZExtValue() == (int8_t)N->getZExtValue();

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

  // i64immZExt32 predicate - True if the 64-bit immediate fits in a 32-bit
  // unsignedsign extended field.
  return (uint64_t)N->getZExtValue() == (uint32_t)N->getZExtValue();

}
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_load(SDNode *N) {

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

}
inline bool Predicate_loadf32(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  return true;

}
inline bool Predicate_loadf64(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  return true;

}
inline bool Predicate_loadf80(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  return true;

}
inline bool Predicate_loadi16(SDNode *N) {

  LoadSDNode *LD = cast<LoadSDNode>(N);
  if (const Value *Src = LD->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  ISD::LoadExtType ExtType = LD->getExtensionType();
  if (ExtType == ISD::NON_EXTLOAD)
    return true;
  if (ExtType == ISD::EXTLOAD)
    return LD->getAlignment() >= 2 && !LD->isVolatile();
  return false;

}
inline bool Predicate_loadi16_anyext(SDNode *N) {

  LoadSDNode *LD = cast<LoadSDNode>(N);
  if (const Value *Src = LD->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  ISD::LoadExtType ExtType = LD->getExtensionType();
  if (ExtType == ISD::EXTLOAD)
    return LD->getAlignment() >= 2 && !LD->isVolatile();
  return false;

}
inline bool Predicate_loadi32(SDNode *N) {

  LoadSDNode *LD = cast<LoadSDNode>(N);
  if (const Value *Src = LD->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  ISD::LoadExtType ExtType = LD->getExtensionType();
  if (ExtType == ISD::NON_EXTLOAD)
    return true;
  if (ExtType == ISD::EXTLOAD)
    return LD->getAlignment() >= 4 && !LD->isVolatile();
  return false;

}
inline bool Predicate_loadi64(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  return true;

}
inline bool Predicate_loadi8(SDNode *N) {

  if (const Value *Src = cast<LoadSDNode>(N)->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  return true;

}
inline bool Predicate_memop(SDNode *N) {

  return    Subtarget->hasVectorUAMem()
         || cast<LoadSDNode>(N)->getAlignment() >= 16;

}
inline bool Predicate_memop64(SDNode *N) {

  return cast<LoadSDNode>(N)->getAlignment() >= 8;

}
inline bool Predicate_mmx_pshufw(SDNode *N) {

  return X86::isPSHUFDMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_mmx_unpckh(SDNode *N) {

  return X86::isUNPCKHMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_mmx_unpckh_undef(SDNode *N) {

  return X86::isUNPCKH_v_undef_Mask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_mmx_unpckl(SDNode *N) {

  return X86::isUNPCKLMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_mmx_unpckl_undef(SDNode *N) {

  return X86::isUNPCKL_v_undef_Mask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movddup(SDNode *N) {

  return X86::isMOVDDUPMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movhlps(SDNode *N) {

  return X86::isMOVHLPSMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movhlps_undef(SDNode *N) {

  return X86::isMOVHLPS_v_undef_Mask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movl(SDNode *N) {

  return X86::isMOVLMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movlhps(SDNode *N) {

  return X86::isMOVLHPSMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movlp(SDNode *N) {

  return X86::isMOVLPMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movshdup(SDNode *N) {

  return X86::isMOVSHDUPMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_movsldup(SDNode *N) {

  return X86::isMOVSLDUPMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_nvloadi32(SDNode *N) {

  LoadSDNode *LD = cast<LoadSDNode>(N);
  if (const Value *Src = LD->getSrcValue())
    if (const PointerType *PT = dyn_cast<PointerType>(Src->getType()))
      if (PT->getAddressSpace() > 255)
        return false;
  if (LD->isVolatile())
    return false;
  ISD::LoadExtType ExtType = LD->getExtensionType();
  if (ExtType == ISD::NON_EXTLOAD)
    return true;
  if (ExtType == ISD::EXTLOAD)
    return LD->getAlignment() >= 4;
  return false;

}
inline bool Predicate_or_is_add(SDNode *N) {

  if (ConstantSDNode *CN = dyn_cast<ConstantSDNode>(N->getOperand(1)))
    return CurDAG->MaskedValueIsZero(N->getOperand(0), CN->getAPIntValue());
  else {
    unsigned BitWidth = N->getValueType(0).getScalarType().getSizeInBits();
    APInt Mask = APInt::getAllOnesValue(BitWidth);
    APInt KnownZero0, KnownOne0;
    CurDAG->ComputeMaskedBits(N->getOperand(0), Mask, KnownZero0, KnownOne0, 0);
    APInt KnownZero1, KnownOne1;
    CurDAG->ComputeMaskedBits(N->getOperand(1), Mask, KnownZero1, KnownOne1, 0);
    return (~KnownZero0 & ~KnownZero1) == 0;
  }

}
inline bool Predicate_palign(SDNode *N) {

  return X86::isPALIGNRMask(cast<ShuffleVectorSDNode>(N));

}
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_pshufd(SDNode *N) {

  return X86::isPSHUFDMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_pshufhw(SDNode *N) {

  return X86::isPSHUFHWMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_pshuflw(SDNode *N) {

  return X86::isPSHUFLWMask(cast<ShuffleVectorSDNode>(N));

}
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_shld(SDNode *N) {

  assert(N->getOpcode() == ISD::OR);
  return N->getOperand(0).getOpcode() == ISD::SHL &&
         N->getOperand(1).getOpcode() == ISD::SRL &&
         isa<ConstantSDNode>(N->getOperand(0).getOperand(1)) &&
         isa<ConstantSDNode>(N->getOperand(1).getOperand(1)) &&
         N->getOperand(0).getConstantOperandVal(1) ==
         N->getValueSizeInBits(0) - N->getOperand(1).getConstantOperandVal(1);

}
inline bool Predicate_shrd(SDNode *N) {

  assert(N->getOpcode() == ISD::OR);
  return N->getOperand(0).getOpcode() == ISD::SRL &&
         N->getOperand(1).getOpcode() == ISD::SHL &&
         isa<ConstantSDNode>(N->getOperand(0).getOperand(1)) &&
         isa<ConstantSDNode>(N->getOperand(1).getOperand(1)) &&
         N->getOperand(0).getConstantOperandVal(1) ==
         N->getValueSizeInBits(0) - N->getOperand(1).getConstantOperandVal(1);

}
inline bool Predicate_shufp(SDNode *N) {

  return X86::isSHUFPMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_splat_lo(SDNode *N) {

  ShuffleVectorSDNode *SVOp = cast<ShuffleVectorSDNode>(N);
  return SVOp->isSplat() && SVOp->getSplatIndex() == 0;

}
inline bool Predicate_srl_su(SDNode *N) {

  return N->hasOneUse();

}
inline bool Predicate_store(SDNode *N) {

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

}
inline bool Predicate_trunc_su(SDNode *N) {

  return N->hasOneUse();

}
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_unpckh(SDNode *N) {

  return X86::isUNPCKHMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_unpckh_undef(SDNode *N) {

  return X86::isUNPCKH_v_undef_Mask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_unpckl(SDNode *N) {

  return X86::isUNPCKLMask(cast<ShuffleVectorSDNode>(N));

}
inline bool Predicate_unpckl_undef(SDNode *N) {

  return X86::isUNPCKL_v_undef_Mask(cast<ShuffleVectorSDNode>(N));

}
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, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0);
}
DISABLE_INLINE SDNode *Emit_1(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0, N1);
}
DISABLE_INLINE SDNode *Emit_2(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_3(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_4(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_ISD_ADD_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADD8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (add:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src1)
    // Emits: (ADD8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();

        // Pattern: (add:i8 GR8:i8:$src, 1:i8)
        // Emits: (INC8r:i8 GR8:i8:$src)
        // Pattern complexity = 8  cost = 1  size = 2
        if (CN1 == INT64_C(1)) {
          SDNode *Result = Emit_0(N, X86::INC8r, MVT::i8);
          return Result;
        }

        // Pattern: (add:i8 GR8:i8:$src, -1:i8)
        // Emits: (DEC8r:i8 GR8:i8:$src)
        // Pattern complexity = 8  cost = 1  size = 2
        if (CN1 == INT64_C(-1)) {
          SDNode *Result = Emit_0(N, X86::DEC8r, MVT::i8);
          return Result;
        }
      }
    }

    // Pattern: (add:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (ADD8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::ADD8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (add:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (ADD8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD8rr, MVT::i8);
  return Result;
}

DISABLE_INLINE SDNode *Emit_5(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_6(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFFFFFFFF80ULL, MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp3);
}
SDNode *Select_ISD_ADD_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADD16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (add:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src1)
    // Emits: (ADD16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (add:i16 GR16:i16:$src, 1:i16)
      // Emits: (INC16r:i16 GR16:i16:$src)
      // Pattern complexity = 8  cost = 1  size = 1
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_0(N, X86::INC16r, MVT::i16);
        return Result;
      }

      // Pattern: (add:i16 GR16:i16:$src, -1:i16)
      // Emits: (DEC16r:i16 GR16:i16:$src)
      // Pattern complexity = 8  cost = 1  size = 1
      if (CN1 == INT64_C(-1)) {
        SDNode *Result = Emit_0(N, X86::DEC16r, MVT::i16);
        return Result;
      }
    }
  }
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (add:i16 GR16:i16:$src, 1:i16)
      // Emits: (INC64_16r:i16 GR16:i16:$src)
      // Pattern complexity = 8  cost = 1  size = 2
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_0(N, X86::INC64_16r, MVT::i16);
        return Result;
      }

      // Pattern: (add:i16 GR16:i16:$src, -1:i16)
      // Emits: (DEC64_16r:i16 GR16:i16:$src)
      // Pattern complexity = 8  cost = 1  size = 2
      if (CN1 == INT64_C(-1)) {
        SDNode *Result = Emit_0(N, X86::DEC64_16r, MVT::i16);
        return Result;
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (add:i16 GR16:i16:$src1, 128:i16)
    // Emits: (SUB16ri8:i16 GR16:i16:$src1, -128:i16)
    // Pattern complexity = 8  cost = 1  size = 3
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(128)) {
          SDNode *Result = Emit_6(N, X86::SUB16ri8, MVT::i16);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (ADD16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::ADD16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (add:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (ADD16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::ADD16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (add:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (ADD16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD16rr, MVT::i16);
  return Result;
}

DISABLE_INLINE SDNode *Emit_7(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN_0, SDValue &CPTmpN_1, SDValue &CPTmpN_2, SDValue &CPTmpN_3) {
  SDValue Ops0[] = { CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3 };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_8(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, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_9(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFFFFFFFF80ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp3);
}
DISABLE_INLINE SDNode *Emit_10(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N10);
}
DISABLE_INLINE SDNode *Emit_11(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N00);
}
SDNode *Select_ISD_ADD_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADD32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (add:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src1)
    // Emits: (ADD32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::Wrapper) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (add:i32 GR32:i32:$src1, (X86Wrapper:i32 (tconstpool:i32):$src2))
        // Emits: (ADD32ri:i32 GR32:i32:$src1, (tconstpool:i32):$src2)
        // Pattern complexity = 9  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
          SDNode *Result = Emit_10(N, X86::ADD32ri, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GR32:i32:$src1, (X86Wrapper:i32 (tjumptable:i32):$src2))
        // Emits: (ADD32ri:i32 GR32:i32:$src1, (tjumptable:i32):$src2)
        // Pattern complexity = 9  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetJumpTable) {
          SDNode *Result = Emit_10(N, X86::ADD32ri, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GR32:i32:$src1, (X86Wrapper:i32 (tglobaladdr:i32):$src2))
        // Emits: (ADD32ri:i32 GR32:i32:$src1, (tglobaladdr:i32):$src2)
        // Pattern complexity = 9  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
          SDNode *Result = Emit_10(N, X86::ADD32ri, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GR32:i32:$src1, (X86Wrapper:i32 (texternalsym:i32):$src2))
        // Emits: (ADD32ri:i32 GR32:i32:$src1, (texternalsym:i32):$src2)
        // Pattern complexity = 9  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
          SDNode *Result = Emit_10(N, X86::ADD32ri, MVT::i32);
          return Result;
        }

        // Pattern: (add:i32 GR32:i32:$src1, (X86Wrapper:i32 (tblockaddress:i32):$src2))
        // Emits: (ADD32ri:i32 GR32:i32:$src1, (tblockaddress:i32):$src2)
        // Pattern complexity = 9  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetBlockAddress) {
          SDNode *Result = Emit_10(N, X86::ADD32ri, MVT::i32);
          return Result;
        }
      }
    }
    if (N0.getNode()->getOpcode() == X86ISD::Wrapper) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (add:i32 (X86Wrapper:i32 (tconstpool:i32):$src2), GR32:i32:$src1)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (tconstpool:i32):$src2)
      // Pattern complexity = 9  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::TargetConstantPool) {
        SDNode *Result = Emit_11(N, X86::ADD32ri, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 (X86Wrapper:i32 (tjumptable:i32):$src2), GR32:i32:$src1)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (tjumptable:i32):$src2)
      // Pattern complexity = 9  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::TargetJumpTable) {
        SDNode *Result = Emit_11(N, X86::ADD32ri, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 (X86Wrapper:i32 (tglobaladdr:i32):$src2), GR32:i32:$src1)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (tglobaladdr:i32):$src2)
      // Pattern complexity = 9  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
        SDNode *Result = Emit_11(N, X86::ADD32ri, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 (X86Wrapper:i32 (texternalsym:i32):$src2), GR32:i32:$src1)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (texternalsym:i32):$src2)
      // Pattern complexity = 9  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
        SDNode *Result = Emit_11(N, X86::ADD32ri, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 (X86Wrapper:i32 (tblockaddress:i32):$src2), GR32:i32:$src1)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (tblockaddress:i32):$src2)
      // Pattern complexity = 9  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::TargetBlockAddress) {
        SDNode *Result = Emit_11(N, X86::ADD32ri, MVT::i32);
        return Result;
      }
    }
  }
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (add:i32 GR32:i32:$src, 1:i32)
      // Emits: (INC32r:i32 GR32:i32:$src)
      // Pattern complexity = 8  cost = 1  size = 1
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_0(N, X86::INC32r, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GR32:i32:$src, -1:i32)
      // Emits: (DEC32r:i32 GR32:i32:$src)
      // Pattern complexity = 8  cost = 1  size = 1
      if (CN1 == INT64_C(-1)) {
        SDNode *Result = Emit_0(N, X86::DEC32r, MVT::i32);
        return Result;
      }
    }
  }
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (add:i32 GR32:i32:$src, 1:i32)
      // Emits: (INC64_32r:i32 GR32:i32:$src)
      // Pattern complexity = 8  cost = 1  size = 2
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_0(N, X86::INC64_32r, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GR32:i32:$src, -1:i32)
      // Emits: (DEC64_32r:i32 GR32:i32:$src)
      // Pattern complexity = 8  cost = 1  size = 2
      if (CN1 == INT64_C(-1)) {
        SDNode *Result = Emit_0(N, X86::DEC64_32r, MVT::i32);
        return Result;
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (add:i32 GR32:i32:$src1, 128:i32)
    // Emits: (SUB32ri8:i32 GR32:i32:$src1, -128:i32)
    // Pattern complexity = 8  cost = 1  size = 3
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(128)) {
          SDNode *Result = Emit_9(N, X86::SUB32ri8, MVT::i32);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (ADD32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::ADD32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (add:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::ADD32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (add:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (ADD32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD32rr, MVT::i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_12(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_13(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFFFFFFFF80ULL, MVT::i64);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp3);
}
DISABLE_INLINE SDNode *Emit_14(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFF80000000ULL, MVT::i64);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp3);
}
SDNode *Select_ISD_ADD_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (add:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADD64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (add:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (ADD64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: lea64addr:i64:$src
  // Emits: (LEA64r:i64 lea64addr:i64:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();

        // Pattern: (add:i64 GR64:i64:$src, 1:i64)
        // Emits: (INC64r:i64 GR64:i64:$src)
        // Pattern complexity = 8  cost = 1  size = 2
        if (CN1 == INT64_C(1)) {
          SDNode *Result = Emit_0(N, X86::INC64r, MVT::i64);
          return Result;
        }

        // Pattern: (add:i64 GR64:i64:$src, -1:i64)
        // Emits: (DEC64r:i64 GR64:i64:$src)
        // Pattern complexity = 8  cost = 1  size = 2
        if (CN1 == INT64_C(-1)) {
          SDNode *Result = Emit_0(N, X86::DEC64r, MVT::i64);
          return Result;
        }

        // Pattern: (add:i64 GR64:i64:$src1, 128:i64)
        // Emits: (SUB64ri8:i64 GR64:i64:$src1, -128:i64)
        // Pattern complexity = 8  cost = 1  size = 3
        if (CN1 == INT64_C(128)) {
          SDNode *Result = Emit_13(N, X86::SUB64ri8, MVT::i64);
          return Result;
        }

        // Pattern: (add:i64 GR64:i64:$src1, 2147483648:i64)
        // Emits: (SUB64ri32:i64 GR64:i64:$src1, -2147483648:i64)
        // Pattern complexity = 8  cost = 1  size = 3
        if (CN1 == INT64_C(2147483648)) {
          SDNode *Result = Emit_14(N, X86::SUB64ri32, MVT::i64);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (add:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (ADD64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::ADD64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (add:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (ADD64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::ADD64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (add:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (ADD64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_15(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1);
}
DISABLE_INLINE SDNode *Emit_16(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_17(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_ADD_v8i8(SDNode *N) {
  if ((Subtarget->hasMMX())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (add:v8i8 VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_16(N, X86::MMX_PADDBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v8i8 (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PADDBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_17(N, X86::MMX_PADDBrm, MVT::v8i8, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Emits: (MMX_PADDBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PADDBrr, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (add:v16i8 VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_16(N, X86::PADDBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v16i8 (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PADDBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_17(N, X86::PADDBrm, MVT::v16i8, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Emits: (PADDBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PADDBrr, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (add:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_16(N, X86::MMX_PADDWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v4i16 (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PADDWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_17(N, X86::MMX_PADDWrm, MVT::v4i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Emits: (MMX_PADDWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PADDWrr, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (add:v8i16 VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_16(N, X86::PADDWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v8i16 (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PADDWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_17(N, X86::PADDWrm, MVT::v8i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Emits: (PADDWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PADDWrr, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (add:v2i32 VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_16(N, X86::MMX_PADDDrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v2i32 (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v2i32:$src1)
      // Emits: (MMX_PADDDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_17(N, X86::MMX_PADDDrm, MVT::v2i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
    // Emits: (MMX_PADDDrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PADDDrr, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (add:v4i32 VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_16(N, X86::PADDDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PADDDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_17(N, X86::PADDDrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
    // Emits: (PADDDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PADDDrr, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (add:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDQrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_16(N, X86::MMX_PADDQrm, MVT::v1i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (add:v1i64 (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v1i64:$src1)
      // Emits: (MMX_PADDQrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_17(N, X86::MMX_PADDQrm, MVT::v1i64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (add:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Emits: (MMX_PADDQrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PADDQrr, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_18(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_19(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_ADD_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    {
      SDValue N0 = N->getOperand(0);

      // Pattern: (add:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (PADDQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::PADDQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (add:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2i64:$src1)
      // Emits: (PADDQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::PADDQrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (add:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Emits: (PADDQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PADDQrr, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_20(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0, N1);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_21(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, MVT::Flag, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  SDValue InFlag(ResNode, 2);
  const SDValue Froms[] = {
    SDValue(N1.getNode(), 1),
    SDValue(N, 1)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    InFlag
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_22(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);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0, Tmp1);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_23(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, MVT::Flag, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  SDValue InFlag(ResNode, 2);
  const SDValue Froms[] = {
    SDValue(N0.getNode(), 1),
    SDValue(N, 1)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    InFlag
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ISD_ADDC_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (addc:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADD32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_21(N, X86::ADD32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (addc:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src1)
    // Emits: (ADD32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_23(N, X86::ADD32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (addc:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (ADD32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_22(N, X86::ADD32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (addc:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_22(N, X86::ADD32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (addc:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (ADD32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_20(N, X86::ADD32rr, MVT::i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_24(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Flag, N0, Tmp1);
  SDValue InFlag(ResNode, 1);
  ReplaceUses(SDValue(N, 1), InFlag);
  return ResNode;
}
SDNode *Select_ISD_ADDC_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (addc:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADD64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_21(N, X86::ADD64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (addc:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (ADD64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_23(N, X86::ADD64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (addc:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (ADD64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_24(N, X86::ADD64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (addc:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (ADD64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_24(N, X86::ADD64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (addc:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (ADD64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_20(N, X86::ADD64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_25(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_26(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, MVT::Flag, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  InFlag = SDValue(ResNode, 2);
  const SDValue Froms[] = {
    SDValue(N1.getNode(), 1),
    SDValue(N, 1)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    InFlag
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_27(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i8);
  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_28(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, MVT::Flag, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  InFlag = SDValue(ResNode, 2);
  const SDValue Froms[] = {
    SDValue(N0.getNode(), 1),
    SDValue(N, 1)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    InFlag
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ISD_ADDE_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (adde:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADC8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_26(N, X86::ADC8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (adde:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src1)
    // Emits: (ADC8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_28(N, X86::ADC8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (adde:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (ADC8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_27(N, X86::ADC8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (adde:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (ADC8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::ADC8rr, MVT::i8);
  return Result;
}

DISABLE_INLINE SDNode *Emit_29(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  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;
}
SDNode *Select_ISD_ADDE_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (adde:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADC16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_26(N, X86::ADC16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (adde:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src1)
    // Emits: (ADC16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_28(N, X86::ADC16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (adde:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (ADC16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_29(N, X86::ADC16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (adde:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (ADC16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_29(N, X86::ADC16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (adde:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (ADC16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::ADC16rr, MVT::i16);
  return Result;
}

DISABLE_INLINE SDNode *Emit_30(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;
}
SDNode *Select_ISD_ADDE_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (adde:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADC32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_26(N, X86::ADC32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (adde:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src1)
    // Emits: (ADC32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_28(N, X86::ADC32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (adde:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (ADC32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_30(N, X86::ADC32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (adde:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (ADC32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_30(N, X86::ADC32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (adde:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (ADC32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::ADC32rr, MVT::i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_31(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  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;
}
SDNode *Select_ISD_ADDE_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (adde:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADC64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_26(N, X86::ADC64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (adde:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (ADC64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_28(N, X86::ADC64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (adde:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (ADC64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_31(N, X86::ADC64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (adde:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (ADC64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_31(N, X86::ADC64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (adde:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (ADC64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::ADC64rr, MVT::i64);
  return Result;
}

SDNode *Select_ISD_AND_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
    // Emits: (AND8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi8(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src1)
    // Emits: (AND8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi8(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (and:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (AND8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::AND8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (and:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (AND8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND8rr, MVT::i8);
  return Result;
}

DISABLE_INLINE SDNode *Emit_32(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 Tmp2 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  SDValue Tmp4 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp3, Tmp4), 0);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp5);
}
DISABLE_INLINE SDNode *Emit_33(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(0x1ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp3);
}
SDNode *Select_ISD_AND_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (AND16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi16(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1)
    // Emits: (AND16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (and:i16 GR16:i16:$src1, 255:i16)
  // Emits: (MOVZX16rr8:i16 (EXTRACT_SUBREG:i8 GR16:i16:$src1, 1:i32))
  // Pattern complexity = 8  cost = 2  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(255))) {
      SDNode *Result = Emit_33(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX16rr8, MVT::i8, MVT::i16);
      return Result;
    }
  }

  // Pattern: (and:i16 GR16:i16:$src1, 255:i16)
  // Emits: (MOVZX16rr8:i16 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src1, GR16_ABCD:i16), 1:i32))
  // Pattern complexity = 8  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(255))) {
      SDNode *Result = Emit_32(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX16rr8, MVT::i16, MVT::i8, MVT::i16);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (and:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (AND16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::AND16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (and:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (AND16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::AND16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (and:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (AND16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND16rr, MVT::i16);
  return Result;
}

DISABLE_INLINE SDNode *Emit_34(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_35(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(0x3ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp3);
}
DISABLE_INLINE SDNode *Emit_36(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 Tmp2 = CurDAG->getTargetConstant(X86::GR32_ABCDRegClassID, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  SDValue Tmp4 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp3, Tmp4), 0);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp5);
}
DISABLE_INLINE SDNode *Emit_37(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 N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp4 = CurDAG->getTargetConstant(X86::GR32_ABCDRegClassID, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp4), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp7(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp5, Tmp6), 0);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp7);
}
SDNode *Select_ISD_AND_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      {
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
        if (Tmp0) {

          // Pattern: (and:i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_nvloadi32>>, 255:i32)
          // Emits: (MOVZX32rm8:i32 addr:iPTR:$src)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CheckAndMask(N0, Tmp0, INT64_C(255)) &&
              N0.getNode()->getOpcode() == ISD::LOAD &&
              N0.hasOneUse() &&
              IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
            SDValue Chain0 = N0.getNode()->getOperand(0);
            if (Predicate_unindexedload(N0.getNode()) &&
                Predicate_nvloadi32(N0.getNode())) {
              SDValue N01 = N0.getNode()->getOperand(1);
              SDValue CPTmpN01_0;
              SDValue CPTmpN01_1;
              SDValue CPTmpN01_2;
              SDValue CPTmpN01_3;
              SDValue CPTmpN01_4;
              if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
                SDNode *Result = Emit_34(N, X86::MOVZX32rm8, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                return Result;
              }
            }
          }

          // Pattern: (and:i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_nvloadi32>>, 65535:i32)
          // Emits: (MOVZX32rm16:i32 addr:iPTR:$src)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CheckAndMask(N0, Tmp0, INT64_C(65535)) &&
              N0.getNode()->getOpcode() == ISD::LOAD &&
              N0.hasOneUse() &&
              IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
            SDValue Chain0 = N0.getNode()->getOperand(0);
            if (Predicate_unindexedload(N0.getNode()) &&
                Predicate_nvloadi32(N0.getNode())) {
              SDValue N01 = N0.getNode()->getOperand(1);
              SDValue CPTmpN01_0;
              SDValue CPTmpN01_1;
              SDValue CPTmpN01_2;
              SDValue CPTmpN01_3;
              SDValue CPTmpN01_4;
              if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
                SDNode *Result = Emit_34(N, X86::MOVZX32rm16, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (and:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
      // Emits: (AND32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1)
    // Emits: (AND32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (and:i32 (srl:i32 GR32:i32:$src, 8:i8)<<P:Predicate_srl_su>>, 255:i32)
  // Emits: (MOVZX32rr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR32:i32:$src, GR32_ABCD:i32), 2:i32))
  // Pattern complexity = 17  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(255)) &&
        N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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::i8) {
          SDNode *Result = Emit_37(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr8, MVT::i32, MVT::i8, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (and:i32 (srl:i32 GR32:i32:$src, 8:i8)<<P:Predicate_srl_su>>, 255:i32)
  // Emits: (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR32:i32:$src, GR32_ABCD:i32), 2:i32))
  // Pattern complexity = 17  cost = 3  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(255)) &&
        N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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::i8) {
          SDNode *Result = Emit_37(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, MVT::i32, MVT::i8, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (and:i32 GR32:i32:$src1, 65535:i32)
  // Emits: (MOVZX32rr16:i32 (EXTRACT_SUBREG:i16 GR32:i32:$src1, 3:i32))
  // Pattern complexity = 8  cost = 2  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(65535))) {
      SDNode *Result = Emit_35(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr16, MVT::i16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (and:i32 GR32:i32:$src1, 255:i32)
  // Emits: (MOVZX32rr8:i32 (EXTRACT_SUBREG:i8 GR32:i32:$src1, 1:i32))
  // Pattern complexity = 8  cost = 2  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(255))) {
      SDNode *Result = Emit_33(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr8, MVT::i8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (and:i32 GR32:i32:$src1, 255:i32)
  // Emits: (MOVZX32rr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR32:i32:$src1, GR32_ABCD:i32), 1:i32))
  // Pattern complexity = 8  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0 &&
        CheckAndMask(N0, Tmp0, INT64_C(255))) {
      SDNode *Result = Emit_36(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr8, MVT::i32, MVT::i8, MVT::i32);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (and:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (AND32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::AND32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (and:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (AND32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::AND32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (and:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (AND32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND32rr, MVT::i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_38(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 Tmp0 = CurDAG->getTargetConstant(0x0ULL, MVT::i64);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp3, Tmp4), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp0, Tmp5, Tmp6);
}
DISABLE_INLINE SDNode *Emit_39(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(0x4ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp2), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp3);
}
DISABLE_INLINE SDNode *Emit_40(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 N1 = N->getOperand(1);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x0ULL, MVT::i64);
  SDValue Tmp5 = CurDAG->getTargetConstant(X86::GR64_ABCDRegClassID, MVT::i32);
  SDValue Tmp6(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp5), 0);
  SDValue Tmp7 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp8(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp6, Tmp7), 0);
  SDValue Tmp9(CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Tmp8), 0);
  SDValue Tmp10 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc3, VT3, Tmp3, Tmp9, Tmp10);
}
SDNode *Select_ISD_AND_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (AND64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (AND64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {

        // Pattern: (and:i64 (srl:i64 GR64:i64:$src, 8:i8)<<P:Predicate_srl_su>>, 255:i64)
        // Emits: (SUBREG_TO_REG:i64 0:i64, (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i64 GR64:i64:$src, GR64_ABCD:i64), 2:i32)), 4:i32)
        // Pattern complexity = 17  cost = 4  size = 3
        if (CheckAndMask(N0, Tmp0, INT64_C(255)) &&
            N0.getNode()->getOpcode() == ISD::SRL &&
            Predicate_srl_su(N0.getNode())) {
          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::i8) {
              SDNode *Result = Emit_40(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, TargetOpcode::SUBREG_TO_REG, MVT::i64, MVT::i8, MVT::i32, MVT::i64);
              return Result;
            }
          }
        }

        // Pattern: (and:i64 GR64:i64:$src, 4294967295:i64)
        // Emits: (MOVZX64rr32:i64 (EXTRACT_SUBREG:i32 GR64:i64:$src, 4:i32))
        // Pattern complexity = 8  cost = 2  size = 3
        if (CheckAndMask(N0, Tmp0, INT64_C(4294967295))) {
          SDNode *Result = Emit_39(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX64rr32, MVT::i32, MVT::i64);
          return Result;
        }

        // Pattern: (and:i64 GR64:i64:$src, 65535:i64)
        // Emits: (MOVZX64rr16:i64 (EXTRACT_SUBREG:i16 GR64:i64:$src, 3:i32))
        // Pattern complexity = 8  cost = 2  size = 3
        if (CheckAndMask(N0, Tmp0, INT64_C(65535))) {
          SDNode *Result = Emit_35(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX64rr16, MVT::i16, MVT::i64);
          return Result;
        }

        // Pattern: (and:i64 GR64:i64:$src, 255:i64)
        // Emits: (MOVZX64rr8:i64 (EXTRACT_SUBREG:i8 GR64:i64:$src, 1:i32))
        // Pattern complexity = 8  cost = 2  size = 3
        if (CheckAndMask(N0, Tmp0, INT64_C(255))) {
          SDNode *Result = Emit_33(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX64rr8, MVT::i8, MVT::i64);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (and:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (AND64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::AND64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (and:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (AND64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::AND64ri32, MVT::i64);
        return Result;
      }

      // Pattern: (and:i64 GR64:i64:$src, (imm:i64)<<P:Predicate_i64immZExt32>>:$imm)
      // Emits: (SUBREG_TO_REG:i64 0:i64, (AND32ri:i32 (EXTRACT_SUBREG:i32 GR64:i64:$src, 4:i32), (imm:i32):$imm), 4:i32)
      // Pattern complexity = 7  cost = 3  size = 3
      if (Predicate_i64immZExt32(N1.getNode())) {
        SDNode *Result = Emit_38(N, TargetOpcode::EXTRACT_SUBREG, X86::AND32ri, TargetOpcode::SUBREG_TO_REG, MVT::i32, MVT::i32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (and:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (AND64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_41(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N1);
}
DISABLE_INLINE SDNode *Emit_42(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N00, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_43(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 N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N1);
}
DISABLE_INLINE SDNode *Emit_44(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N00, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_45(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N01, N1);
}
DISABLE_INLINE SDNode *Emit_46(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N10, N0);
}
DISABLE_INLINE SDNode *Emit_47(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N11, N0);
}
DISABLE_INLINE SDNode *Emit_48(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N01, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_49(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N10, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_50(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N11, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_51(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 N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N01, N1);
}
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 N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N10, N0);
}
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 N100 = N10.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N11, N0);
}
DISABLE_INLINE SDNode *Emit_54(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N01, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_55(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N10, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_56(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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 N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N11, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_AND_v1i64(SDNode *N) {
  {
    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::BIT_CONVERT) {
          SDValue N010 = N01.getNode()->getOperand(0);

          // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>)), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
          // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
          // Pattern complexity = 35  cost = 1  size = 3
          if (N010.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N010.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::LOAD &&
                N1.hasOneUse() &&
                IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
              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;
                SDValue CPTmpN11_3;
                SDValue CPTmpN11_4;
                if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                    N010.getValueType() == MVT::v2i32) {
                  SDNode *Result = Emit_44(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                  return Result;
                }
              }
            }
          }
          if (N010.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N010.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::LOAD &&
                N1.hasOneUse() &&
                IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
              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;
                SDValue CPTmpN11_3;
                SDValue CPTmpN11_4;
                if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {

                  // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>)), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
                  // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
                  // Pattern complexity = 35  cost = 1  size = 3
                  if (N010.getValueType() == MVT::v4i16) {
                    SDNode *Result = Emit_44(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                    return Result;
                  }

                  // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>)), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
                  // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
                  // Pattern complexity = 35  cost = 1  size = 3
                  if (N010.getValueType() == MVT::v8i8) {
                    SDNode *Result = Emit_44(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (and:v1i64 (xor:v1i64 (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>), VR64:v1i64:$src1), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 35  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            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;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_54(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>)))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                    Predicate_immAllOnesV(N110.getNode()) &&
                    N110.getValueType() == MVT::v2i32) {
                  SDNode *Result = Emit_55(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>), VR64:v1i64:$src1))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N100.getValueType() == MVT::v2i32) {
                  SDNode *Result = Emit_56(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (and:v1i64 (xor:v1i64 (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 35  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            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;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_54(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>)))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                    Predicate_immAllOnesV_bc(N110.getNode()) &&
                    N110.getValueType() == MVT::v4i16) {
                  SDNode *Result = Emit_55(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                  Predicate_immAllOnesV_bc(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N100.getValueType() == MVT::v4i16) {
                  SDNode *Result = Emit_56(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (and:v1i64 (xor:v1i64 (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 35  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            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;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v8i8) {
                SDNode *Result = Emit_54(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>)))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                    Predicate_immAllOnesV_bc(N110.getNode()) &&
                    N110.getValueType() == MVT::v8i8) {
                  SDNode *Result = Emit_55(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                  Predicate_immAllOnesV_bc(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N100.getValueType() == MVT::v8i8) {
                  SDNode *Result = Emit_56(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (build_vector:v1i64)<<P:Predicate_immAllOnesV>>), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (MMX_PANDNrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 32  cost = 1  size = 3
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N01.getNode())) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            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;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
                SDNode *Result = Emit_42(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (and:v1i64 (xor:v1i64 (build_vector:v1i64)<<P:Predicate_immAllOnesV>>, VR64:v1i64:$src1), (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (MMX_PANDNrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 32  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
          Predicate_immAllOnesV(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_48(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 VR64:v1i64:$src1, (build_vector:v1i64)<<P:Predicate_immAllOnesV>>))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 32  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N11.getNode())) {
                SDNode *Result = Emit_49(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                return Result;
              }
            }

            // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (xor:v1i64 (build_vector:v1i64)<<P:Predicate_immAllOnesV>>, VR64:v1i64:$src1))
            // Emits: (MMX_PANDNrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 32  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N10.getNode())) {
              SDNode *Result = Emit_50(N, X86::MMX_PANDNrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (and:v1i64 VR64:v1i64:$src1, (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MMX_PANDrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MMX_PANDrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, VR64:v1i64:$src1)
    // Emits: (MMX_PANDrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::MMX_PANDrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  {
    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::BIT_CONVERT) {
          SDValue N010 = N01.getNode()->getOperand(0);

          // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>)), VR64:v1i64:$src2)
          // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
          // Pattern complexity = 13  cost = 1  size = 3
          if (N010.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N010.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N010.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_43(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }
          }
          if (N010.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N010.getNode())) {
            SDValue N1 = N->getOperand(1);

            // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>)), VR64:v1i64:$src2)
            // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
            // Pattern complexity = 13  cost = 1  size = 3
            if (N010.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_43(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }

            // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>)), VR64:v1i64:$src2)
            // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
            // Pattern complexity = 13  cost = 1  size = 3
            if (N010.getValueType() == MVT::v8i8) {
              SDNode *Result = Emit_43(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }
          }
        }
      }

      // Pattern: (and:v1i64 (xor:v1i64 (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>), VR64:v1i64:$src1), VR64:v1i64:$src2)
      // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 13  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v2i32) {
            SDNode *Result = Emit_51(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>)))
        // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N110.getNode()) &&
                N110.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_52(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }
          }
        }

        // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 (bitconvert:v1i64 (build_vector:v2i32)<<P:Predicate_immAllOnesV>>), VR64:v1i64:$src1))
        // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N100.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v2i32) {
              SDNode *Result = Emit_53(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (and:v1i64 (xor:v1i64 (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1), VR64:v1i64:$src2)
    // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Pattern complexity = 13  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v4i16) {
            SDNode *Result = Emit_51(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>)))
        // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
                Predicate_immAllOnesV_bc(N110.getNode()) &&
                N110.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_52(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }
          }
        }

        // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 (bitconvert:v1i64 (bitconvert:v4i16)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1))
        // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N100.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v4i16) {
              SDNode *Result = Emit_53(N, X86::MMX_PANDNrr, MVT::v1i64);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (and:v1i64 (xor:v1i64 (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1), VR64:v1i64:$src2)
    // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Pattern complexity = 13  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v8i8) {
            SDNode *Result = Emit_51(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>)))
      // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 13  cost = 1  size = 3
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N110 = N11.getNode()->getOperand(0);
          if (N110.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              Predicate_immAllOnesV_bc(N110.getNode()) &&
              N110.getValueType() == MVT::v8i8) {
            SDNode *Result = Emit_52(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }
      }

      // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 (bitconvert:v1i64 (bitconvert:v8i8)<<P:Predicate_immAllOnesV_bc>>), VR64:v1i64:$src1))
      // Emits: (MMX_PANDNrr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 13  cost = 1  size = 3
      if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N100 = N10.getNode()->getOperand(0);
        if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllOnesV_bc(N100.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v8i8) {
            SDNode *Result = Emit_53(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::XOR) {
        SDValue N00 = N0.getNode()->getOperand(0);

        // Pattern: (and:v1i64 (xor:v1i64 VR64:v1i64:$src1, (build_vector:v1i64)<<P:Predicate_immAllOnesV>>), VR64:v1i64:$src2)
        // Emits: (MMX_PANDNrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
        // Pattern complexity = 10  cost = 1  size = 3
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N01.getNode())) {
            SDNode *Result = Emit_41(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }

        // Pattern: (and:v1i64 (xor:v1i64 (build_vector:v1i64)<<P:Predicate_immAllOnesV>>, VR64:v1i64:$src1), VR64:v1i64:$src2)
        // Emits: (MMX_PANDNrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
        // Pattern complexity = 10  cost = 1  size = 3
        if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N00.getNode())) {
          SDNode *Result = Emit_45(N, X86::MMX_PANDNrr, MVT::v1i64);
          return Result;
        }
      }
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 VR64:v1i64:$src1, (build_vector:v1i64)<<P:Predicate_immAllOnesV>>))
        // Emits: (MMX_PANDNrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
        // Pattern complexity = 10  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N11.getNode())) {
            SDNode *Result = Emit_46(N, X86::MMX_PANDNrr, MVT::v1i64);
            return Result;
          }
        }

        // Pattern: (and:v1i64 VR64:v1i64:$src2, (xor:v1i64 (build_vector:v1i64)<<P:Predicate_immAllOnesV>>, VR64:v1i64:$src1))
        // Emits: (MMX_PANDNrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
        // Pattern complexity = 10  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N10.getNode())) {
          SDNode *Result = Emit_47(N, X86::MMX_PANDNrr, MVT::v1i64);
          return Result;
        }
      }
    }

    // Pattern: (and:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Emits: (MMX_PANDrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PANDrr, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_57(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N00, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_58(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N000, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_59(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N10);
}
DISABLE_INLINE SDNode *Emit_60(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 N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N000, N10);
}
DISABLE_INLINE SDNode *Emit_61(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N000, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_62(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N10, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_63(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N010, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_64(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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 N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N100, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_65(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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 N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N110, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_66(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 N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N010, N10);
}
DISABLE_INLINE SDNode *Emit_67(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N100, N00);
}
DISABLE_INLINE SDNode *Emit_68(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N110, N00);
}
DISABLE_INLINE SDNode *Emit_69(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N010, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_70(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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 N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N100, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_71(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = 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);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N110, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_AND_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);

        // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 VR128:v4f32:$src1), (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
        // Emits: (ANDNPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
        // Pattern complexity = 38  cost = 1  size = 3
        {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N010 = N01.getNode()->getOperand(0);
            if (N010.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N010.getNode())) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::LOAD &&
                  N1.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
                SDValue Chain1 = N1.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1.getNode()) &&
                    Predicate_load(N1.getNode()) &&
                    Predicate_memop(N1.getNode())) {
                  SDValue N11 = N1.getNode()->getOperand(1);
                  SDValue CPTmpN11_0;
                  SDValue CPTmpN11_1;
                  SDValue CPTmpN11_2;
                  SDValue CPTmpN11_3;
                  SDValue CPTmpN11_4;
                  if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                      N000.getValueType() == MVT::v4f32 &&
                      N010.getValueType() == MVT::v4i32) {
                    SDNode *Result = Emit_58(N, X86::ANDNPSrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                    return Result;
                  }
                }
              }
            }
          }
        }

        // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), (bitconvert:v2i64 VR128:v4f32:$src1)), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
        // Emits: (ANDNPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
        // Pattern complexity = 38  cost = 1  size = 3
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N010 = N01.getNode()->getOperand(0);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::LOAD &&
                N1.hasOneUse() &&
                IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
              SDValue Chain1 = N1.getNode()->getOperand(0);
              if (Predicate_unindexedload(N1.getNode()) &&
                  Predicate_load(N1.getNode()) &&
                  Predicate_memop(N1.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue CPTmpN11_0;
                SDValue CPTmpN11_1;
                SDValue CPTmpN11_2;
                SDValue CPTmpN11_3;
                SDValue CPTmpN11_4;
                if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                    N000.getValueType() == MVT::v4i32 &&
                    N010.getValueType() == MVT::v4f32) {
                  SDNode *Result = Emit_63(N, X86::ANDNPSrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);

              // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (bitconvert:v2i64 VR128:v4f32:$src1), (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)))
              // Emits: (ANDNPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
              // Pattern complexity = 38  cost = 1  size = 3
              {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                  SDValue N110 = N11.getNode()->getOperand(0);
                  if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                      Predicate_immAllOnesV(N110.getNode()) &&
                      N100.getValueType() == MVT::v4f32 &&
                      N110.getValueType() == MVT::v4i32) {
                    SDNode *Result = Emit_64(N, X86::ANDNPSrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                    return Result;
                  }
                }
              }

              // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), (bitconvert:v2i64 VR128:v4f32:$src1)))
              // Emits: (ANDNPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
              // Pattern complexity = 38  cost = 1  size = 3
              if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                  SDValue N110 = N11.getNode()->getOperand(0);
                  if (N100.getValueType() == MVT::v4i32 &&
                      N110.getValueType() == MVT::v4f32) {
                    SDNode *Result = Emit_65(N, X86::ANDNPSrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (build_vector:v2i64)<<P:Predicate_immAllOnesV>>), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (ANDNPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 35  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N01.getNode())) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            SDValue Chain1 = N1.getNode()->getOperand(0);
            if (Predicate_unindexedload(N1.getNode()) &&
                Predicate_load(N1.getNode()) &&
                Predicate_memop(N1.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue CPTmpN11_0;
              SDValue CPTmpN11_1;
              SDValue CPTmpN11_2;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v2f64) {
                SDNode *Result = Emit_61(N, X86::ANDNPDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N010 = N01.getNode()->getOperand(0);
          if (N010.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N010.getNode())) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::LOAD &&
                N1.hasOneUse() &&
                IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
              SDValue Chain1 = N1.getNode()->getOperand(0);
              if (Predicate_unindexedload(N1.getNode()) &&
                  Predicate_load(N1.getNode()) &&
                  Predicate_memop(N1.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue CPTmpN11_0;
                SDValue CPTmpN11_1;
                SDValue CPTmpN11_2;
                SDValue CPTmpN11_3;
                SDValue CPTmpN11_4;
                if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {

                  // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
                  // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
                  // Pattern complexity = 35  cost = 1  size = 3
                  if (N010.getValueType() == MVT::v4i32) {
                    SDNode *Result = Emit_44(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                    return Result;
                  }

                  // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>)), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
                  // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
                  // Pattern complexity = 35  cost = 1  size = 3
                  if (N010.getValueType() == MVT::v8i16) {
                    SDNode *Result = Emit_44(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                    return Result;
                  }

                  // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>)), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
                  // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
                  // Pattern complexity = 35  cost = 1  size = 3
                  if (N010.getValueType() == MVT::v16i8) {
                    SDNode *Result = Emit_44(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (and:v2i64 (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, (bitconvert:v2i64 VR128:v2f64:$src1)), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (ANDNPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 35  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
          Predicate_immAllOnesV(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            SDValue Chain1 = N1.getNode()->getOperand(0);
            if (Predicate_unindexedload(N1.getNode()) &&
                Predicate_load(N1.getNode()) &&
                Predicate_memop(N1.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue CPTmpN11_0;
              SDValue CPTmpN11_1;
              SDValue CPTmpN11_2;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N010.getValueType() == MVT::v2f64) {
                SDNode *Result = Emit_69(N, X86::ANDNPDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (build_vector:v2i64)<<P:Predicate_immAllOnesV>>))
            // Emits: (ANDNPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N11.getNode()) &&
                  N100.getValueType() == MVT::v2f64) {
                SDNode *Result = Emit_70(N, X86::ANDNPDrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                return Result;
              }
            }

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, (bitconvert:v2i64 VR128:v2f64:$src1)))
            // Emits: (ANDNPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N10.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getValueType() == MVT::v2f64) {
                  SDNode *Result = Emit_71(N, X86::ANDNPDrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 35  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            SDValue Chain1 = N1.getNode()->getOperand(0);
            if (Predicate_unindexedload(N1.getNode()) &&
                Predicate_load(N1.getNode()) &&
                Predicate_memop(N1.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue CPTmpN11_0;
              SDValue CPTmpN11_1;
              SDValue CPTmpN11_2;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v4i32) {
                SDNode *Result = Emit_54(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)))
            // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                    Predicate_immAllOnesV(N110.getNode()) &&
                    N110.getValueType() == MVT::v4i32) {
                  SDNode *Result = Emit_55(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
            // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N100.getValueType() == MVT::v4i32) {
                  SDNode *Result = Emit_56(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 35  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            SDValue Chain1 = N1.getNode()->getOperand(0);
            if (Predicate_unindexedload(N1.getNode()) &&
                Predicate_load(N1.getNode()) &&
                Predicate_memop(N1.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue CPTmpN11_0;
              SDValue CPTmpN11_1;
              SDValue CPTmpN11_2;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_54(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>)))
            // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                    Predicate_immAllOnesV(N110.getNode()) &&
                    N110.getValueType() == MVT::v8i16) {
                  SDNode *Result = Emit_55(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
            // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N100.getValueType() == MVT::v8i16) {
                  SDNode *Result = Emit_56(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 35  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            SDValue Chain1 = N1.getNode()->getOperand(0);
            if (Predicate_unindexedload(N1.getNode()) &&
                Predicate_load(N1.getNode()) &&
                Predicate_memop(N1.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue CPTmpN11_0;
              SDValue CPTmpN11_1;
              SDValue CPTmpN11_2;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                  N000.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_54(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }
    }
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>)))
            // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                    Predicate_immAllOnesV(N110.getNode()) &&
                    N110.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_55(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
            // Emits: (PANDNrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 35  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N100.getNode())) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N100.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_56(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (build_vector:v2i64)<<P:Predicate_immAllOnesV>>), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (PANDNrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 32  cost = 1  size = 3
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N01.getNode())) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::LOAD &&
              N1.hasOneUse() &&
              IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
            SDValue Chain1 = N1.getNode()->getOperand(0);
            if (Predicate_unindexedload(N1.getNode()) &&
                Predicate_load(N1.getNode()) &&
                Predicate_memop(N1.getNode())) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue CPTmpN11_0;
              SDValue CPTmpN11_1;
              SDValue CPTmpN11_2;
              SDValue CPTmpN11_3;
              SDValue CPTmpN11_4;
              if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
                SDNode *Result = Emit_42(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (and:v2i64 (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, VR128:v2i64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (PANDNrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 32  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
          Predicate_immAllOnesV(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_48(N, X86::PANDNrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::XOR) {
            SDValue N10 = N1.getNode()->getOperand(0);

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 VR128:v2i64:$src1, (build_vector:v2i64)<<P:Predicate_immAllOnesV>>))
            // Emits: (PANDNrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 32  cost = 1  size = 3
            {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                  Predicate_immAllOnesV(N11.getNode())) {
                SDNode *Result = Emit_49(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                return Result;
              }
            }

            // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, VR128:v2i64:$src1))
            // Emits: (PANDNrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 32  cost = 1  size = 3
            if (N10.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N10.getNode())) {
              SDNode *Result = Emit_50(N, X86::PANDNrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (and:v2i64 (bitconvert:v2i64 VR128:v4f32:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (ANDPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
              N00.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_57(N, X86::ANDPSrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (and:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (ANDPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
              N00.getValueType() == MVT::v2f64) {
            SDNode *Result = Emit_57(N, X86::ANDPDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (bitconvert:v2i64 VR128:v4f32:$src1))
  // Emits: (ANDPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_62(N, X86::ANDPSrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (bitconvert:v2i64 VR128:v2f64:$src1))
    // Emits: (ANDPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_62(N, X86::ANDPDrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (and:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PANDrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PANDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (and:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2i64:$src1)
    // Emits: (PANDrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PANDrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (build_vector:v2i64)<<P:Predicate_immAllOnesV>>), (bitconvert:v2i64 VR128:v2f64:$src2))
      // Emits: (ANDNPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 16  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N01.getNode())) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N000.getValueType() == MVT::v2f64 &&
                N10.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_60(N, X86::ANDNPDrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }

      // Pattern: (and:v2i64 (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, (bitconvert:v2i64 VR128:v2f64:$src1)), (bitconvert:v2i64 VR128:v2f64:$src2))
      // Emits: (ANDNPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 16  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
          Predicate_immAllOnesV(N00.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N010 = N01.getNode()->getOperand(0);
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N010.getValueType() == MVT::v2f64 &&
                N10.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_66(N, X86::ANDNPDrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v2i64 (bitconvert:v2i64 VR128:v2f64:$src2), (xor:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (build_vector:v2i64)<<P:Predicate_immAllOnesV>>))
        // Emits: (ANDNPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
        // Pattern complexity = 16  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N11.getNode()) &&
              N00.getValueType() == MVT::v2f64 &&
              N100.getValueType() == MVT::v2f64) {
            SDNode *Result = Emit_67(N, X86::ANDNPDrr, MVT::v2i64);
            return Result;
          }
        }

        // Pattern: (and:v2i64 (bitconvert:v2i64 VR128:v2f64:$src2), (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, (bitconvert:v2i64 VR128:v2f64:$src1)))
        // Emits: (ANDNPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
        // Pattern complexity = 16  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N10.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N00.getValueType() == MVT::v2f64 &&
                N110.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_68(N, X86::ANDNPDrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)), VR128:v2i64:$src2)
  // Emits: (ANDNPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 13  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    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::BIT_CONVERT) {
        SDValue N010 = N01.getNode()->getOperand(0);
        if (N010.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N010.getNode())) {
          SDValue N1 = N->getOperand(1);
          if (N010.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_43(N, X86::ANDNPSrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    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::BIT_CONVERT) {
        SDValue N010 = N01.getNode()->getOperand(0);
        if (N010.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N010.getNode())) {
          SDValue N1 = N->getOperand(1);

          // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)), VR128:v2i64:$src2)
          // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
          // Pattern complexity = 13  cost = 1  size = 3
          if (N010.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_43(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }

          // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>)), VR128:v2i64:$src2)
          // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
          // Pattern complexity = 13  cost = 1  size = 3
          if (N010.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_43(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }

          // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>)), VR128:v2i64:$src2)
          // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
          // Pattern complexity = 13  cost = 1  size = 3
          if (N010.getValueType() == MVT::v16i8) {
            SDNode *Result = Emit_43(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), VR128:v2i64:$src2)
    // Emits: (ANDNPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Pattern complexity = 13  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_51(N, X86::ANDNPSrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::XOR) {
      SDValue N10 = N1.getNode()->getOperand(0);

      // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)))
      // Emits: (ANDNPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 13  cost = 1  size = 3
      {
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N110 = N11.getNode()->getOperand(0);
          if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N110.getNode()) &&
              N110.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_52(N, X86::ANDNPSrr, MVT::v2i64);
            return Result;
          }
        }
      }

      // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
      // Emits: (ANDNPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 13  cost = 1  size = 3
      if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N100 = N10.getNode()->getOperand(0);
        if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N100.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N100.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_53(N, X86::ANDNPSrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), VR128:v2i64:$src2)
    // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 13  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_51(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>)))
        // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N110.getNode()) &&
                N110.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_52(N, X86::PANDNrr, MVT::v2i64);
              return Result;
            }
          }
        }

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 (bitconvert:v2i64 (build_vector:v4i32)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
        // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N100.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_53(N, X86::PANDNrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), VR128:v2i64:$src2)
    // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 13  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_51(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>)))
        // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N110.getNode()) &&
                N110.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_52(N, X86::PANDNrr, MVT::v2i64);
              return Result;
            }
          }
        }

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 (bitconvert:v2i64 (build_vector:v8i16)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
        // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N100.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v8i16) {
              SDNode *Result = Emit_53(N, X86::PANDNrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (and:v2i64 (xor:v2i64 (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1), VR128:v2i64:$src2)
    // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 13  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N000.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue N1 = N->getOperand(1);
          if (N000.getValueType() == MVT::v16i8) {
            SDNode *Result = Emit_51(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 VR128:v2i64:$src1, (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>)))
        // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
                Predicate_immAllOnesV(N110.getNode()) &&
                N110.getValueType() == MVT::v16i8) {
              SDNode *Result = Emit_52(N, X86::PANDNrr, MVT::v2i64);
              return Result;
            }
          }
        }

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 (bitconvert:v2i64 (build_vector:v16i8)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src1))
        // Emits: (PANDNrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N100.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N100.getValueType() == MVT::v16i8) {
              SDNode *Result = Emit_53(N, X86::PANDNrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::XOR) {
      SDValue N00 = N0.getNode()->getOperand(0);

      // Pattern: (and:v2i64 (xor:v2i64 VR128:v2i64:$src1, (build_vector:v2i64)<<P:Predicate_immAllOnesV>>), VR128:v2i64:$src2)
      // Emits: (PANDNrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 10  cost = 1  size = 3
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N01.getNode())) {
          SDNode *Result = Emit_41(N, X86::PANDNrr, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (and:v2i64 (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, VR128:v2i64:$src1), VR128:v2i64:$src2)
      // Emits: (PANDNrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 10  cost = 1  size = 3
      if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
          Predicate_immAllOnesV(N00.getNode())) {
        SDNode *Result = Emit_45(N, X86::PANDNrr, MVT::v2i64);
        return Result;
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::XOR) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 VR128:v2i64:$src1, (build_vector:v2i64)<<P:Predicate_immAllOnesV>>))
        // Emits: (PANDNrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
        // Pattern complexity = 10  cost = 1  size = 3
        {
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
              Predicate_immAllOnesV(N11.getNode())) {
            SDNode *Result = Emit_46(N, X86::PANDNrr, MVT::v2i64);
            return Result;
          }
        }

        // Pattern: (and:v2i64 VR128:v2i64:$src2, (xor:v2i64 (build_vector:v2i64)<<P:Predicate_immAllOnesV>>, VR128:v2i64:$src1))
        // Emits: (PANDNrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
        // Pattern complexity = 10  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
            Predicate_immAllOnesV(N10.getNode())) {
          SDNode *Result = Emit_47(N, X86::PANDNrr, MVT::v2i64);
          return Result;
        }
      }
    }

    // Pattern: (and:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (bitconvert:v2i64 VR128:v2f64:$src2))
    // Emits: (ANDPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 9  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N00.getValueType() == MVT::v2f64 &&
            N10.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_59(N, X86::ANDPDrr, MVT::v2i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (and:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (ANDPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::ANDPSrr, MVT::v2i64);
    return Result;
  }

  // Pattern: (and:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (PANDrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::PANDrr, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_72(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0);
}
DISABLE_INLINE SDNode *Emit_73(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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N0.getNode()->getDebugLoc(), X86::EFLAGS, N01, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, InFlag);
}
SDNode *Select_ISD_ANY_EXTEND_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (anyext:i16 (X86setcc_c:i8 2:i8, EFLAGS:i32))
  // Emits: (SETB_C16r:i16)
  // Pattern complexity = 11  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == X86ISD::SETCC_CARRY) {
    SDValue N00 = N0.getNode()->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(2)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N0.getValueType() == MVT::i8) {
          SDNode *Result = Emit_73(N, X86::SETB_C16r, MVT::i16);
          return Result;
        }
      }
    }
  }

  // Pattern: (anyext:i16 GR8:i8:$src)
  // Emits: (MOVZX16rr8:i16 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVZX16rr8, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_74(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, MVT::SimpleValueType VT2) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp3), 0);
  SDValue Tmp5 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp6(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp4, Tmp5), 0);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp6);
}
SDNode *Select_ISD_ANY_EXTEND_i32(SDNode *N) {

  // Pattern: (anyext:i32 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
  // Emits: (MOVZX32rr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32))
  // Pattern complexity = 12  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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(8) &&
            N0.getValueType() == MVT::i16 &&
            N01.getValueType() == MVT::i8) {
          SDNode *Result = Emit_74(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr8, MVT::i16, MVT::i8, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (anyext:i32 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
  // Emits: (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32))
  // Pattern complexity = 12  cost = 3  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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(8) &&
            N0.getValueType() == MVT::i16 &&
            N01.getValueType() == MVT::i8) {
          SDNode *Result = Emit_74(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, MVT::i16, MVT::i8, MVT::i32);
          return Result;
        }
      }
    }
  }
  SDValue N0 = N->getOperand(0);

  // Pattern: (anyext:i32 (X86setcc_c:i8 2:i8, EFLAGS:i32))
  // Emits: (SETB_C32r:i32)
  // Pattern complexity = 11  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == X86ISD::SETCC_CARRY) {
    SDValue N00 = N0.getNode()->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(2)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N0.getValueType() == MVT::i8) {
          SDNode *Result = Emit_73(N, X86::SETB_C32r, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (anyext:i32 GR8:i8:$src)
  // Emits: (MOVZX32rr8:i32 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVZX32rr8, MVT::i32);
    return Result;
  }

  // Pattern: (anyext:i32 GR16:i16:$src)
  // Emits: (MOVZX32rr16:i32 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_72(N, X86::MOVZX32rr16, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_75(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp0 = CurDAG->getTargetConstant(0x0ULL, MVT::i64);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0, N0, Tmp2);
}
DISABLE_INLINE SDNode *Emit_76(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 N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x0ULL, MVT::i64);
  SDValue Tmp4 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp4), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp7(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp5, Tmp6), 0);
  SDValue Tmp8(CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Tmp7), 0);
  SDValue Tmp9 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc3, VT3, Tmp2, Tmp8, Tmp9);
}
SDNode *Select_ISD_ANY_EXTEND_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (anyext:i64 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
  // Emits: (SUBREG_TO_REG:i64 0:i64, (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32)), 4:i32)
  // Pattern complexity = 12  cost = 4  size = 3
  if (N0.getNode()->getOpcode() == ISD::SRL &&
      Predicate_srl_su(N0.getNode())) {
    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(8) &&
          N0.getValueType() == MVT::i16 &&
          N01.getValueType() == MVT::i8) {
        SDNode *Result = Emit_76(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, TargetOpcode::SUBREG_TO_REG, MVT::i16, MVT::i8, MVT::i32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (anyext:i64 (X86setcc_c:i8 2:i8, EFLAGS:i32))
  // Emits: (SETB_C64r:i64)
  // Pattern complexity = 11  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == X86ISD::SETCC_CARRY) {
    SDValue N00 = N0.getNode()->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N00.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(2)) {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N0.getValueType() == MVT::i8) {
          SDNode *Result = Emit_73(N, X86::SETB_C64r, MVT::i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (anyext:i64 GR32:i32:$src)
  // Emits: (SUBREG_TO_REG:i64 0:i64, GR32:i32:$src, 4:i32)
  // Pattern complexity = 3  cost = 1  size = 0
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_75(N, TargetOpcode::SUBREG_TO_REG, MVT::i64);
    return Result;
  }

  // Pattern: (anyext:i64 GR8:i8:$src)
  // Emits: (MOVZX64rr8:i64 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVZX64rr8, MVT::i64);
    return Result;
  }

  // Pattern: (anyext:i64 GR16:i16:$src)
  // Emits: (MOVZX64rr16:i64 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_72(N, X86::MOVZX64rr16, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_77(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  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();
  SDValue Ops0[] = { N2, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_ATOMIC_LOAD_ADD_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_add_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::LXADD8, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_ADD_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_add_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::LXADD16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_ADD_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_add_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::LXADD32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_ADD_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_add_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::LXADD64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_78(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  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();
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, N2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_ATOMIC_LOAD_AND_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_and_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMAND8, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_AND_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_and_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMAND16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_AND_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_and_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMAND32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_AND_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_and_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMAND64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_MAX_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_max_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMMAX16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_MAX_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_max_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMMAX32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_MAX_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_max_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMMAX64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_MIN_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_min_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMMIN16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_MIN_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_min_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMMIN32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_MIN_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_min_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMMIN64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_NAND_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_nand_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMNAND8, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_NAND_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_nand_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMNAND16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_NAND_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_nand_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMNAND32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_NAND_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_nand_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMNAND64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_OR_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_or_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMOR8, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_OR_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_or_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMOR16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_OR_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_or_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMOR32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_OR_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_or_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMOR64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_UMAX_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_umax_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMUMAX16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_UMAX_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_umax_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMUMAX32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_UMAX_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_umax_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMUMAX64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_UMIN_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_umin_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMUMIN16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_UMIN_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_umin_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMUMIN32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_UMIN_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_umin_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMUMIN64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_XOR_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_xor_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMXOR8, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_XOR_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_xor_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMXOR16, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_XOR_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_xor_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMXOR32, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_LOAD_XOR_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_load_xor_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_78(N, X86::ATOMXOR64, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_SWAP_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_swap_8(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::XCHG8rm, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_SWAP_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_swap_16(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::XCHG16rm, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_SWAP_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_swap_32(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::XCHG32rm, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ATOMIC_SWAP_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_atomic_swap_64(N)) {
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDNode *Result = Emit_77(N, X86::XCHG64rm, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_i32(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::MOVSS2DIrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_i64(SDNode *N) {

  // Pattern: (bitconvert:i64 FR64:f64:$src)
  // Emits: (MOVSDto64rr:i64 FR64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::MOVSDto64rr, MVT::i64);
      return Result;
    }
  }
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:i64 VR64:v1i64:$src)
  // Emits: (MMX_MOVD64from64rr:i64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64from64rr, MVT::i64);
    return Result;
  }

  // Pattern: (bitconvert:i64 VR64:v2i32:$src)
  // Emits: (MMX_MOVD64from64rr:i64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64from64rr, MVT::i64);
    return Result;
  }

  // Pattern: (bitconvert:i64 VR64:v2f32:$src)
  // Emits: (MMX_MOVD64from64rr:i64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64from64rr, MVT::i64);
    return Result;
  }

  // Pattern: (bitconvert:i64 VR64:v4i16:$src)
  // Emits: (MMX_MOVD64from64rr:i64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64from64rr, MVT::i64);
    return Result;
  }

  // Pattern: (bitconvert:i64 VR64:v8i8:$src)
  // Emits: (MMX_MOVD64from64rr:i64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64from64rr, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_79(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_BIT_CONVERT_f32(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (bitconvert:f32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (MOVDI2SSrm:f32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_79(N, X86::MOVDI2SSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (bitconvert:f32 GR32:i32:$src)
    // Emits: (MOVDI2SSrr:f32 GR32:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_72(N, X86::MOVDI2SSrr, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:f64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (MOV64toSDrm:f64 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::i64) {
          SDNode *Result = Emit_79(N, X86::MOV64toSDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (bitconvert:f64 GR64:i64:$src)
    // Emits: (MOV64toSDrr:f64 GR64:i64:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_72(N, X86::MOV64toSDrr, MVT::f64);
      return Result;
    }
  }
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:f64 VR64:v1i64:$src)
  // Emits: (MMX_MOVQ2FR64rr:f64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVQ2FR64rr, MVT::f64);
    return Result;
  }

  // Pattern: (bitconvert:f64 VR64:v2i32:$src)
  // Emits: (MMX_MOVQ2FR64rr:f64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVQ2FR64rr, MVT::f64);
    return Result;
  }

  // Pattern: (bitconvert:f64 VR64:v4i16:$src)
  // Emits: (MMX_MOVQ2FR64rr:f64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVQ2FR64rr, MVT::f64);
    return Result;
  }

  // Pattern: (bitconvert:f64 VR64:v8i8:$src)
  // Emits: (MMX_MOVQ2FR64rr:f64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVQ2FR64rr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_80(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ReplaceUses(SDValue(N, 0), N0);
  return NULL;
}
DISABLE_INLINE SDNode *Emit_81(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00);
}
SDNode *Select_ISD_BIT_CONVERT_v8i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v8i8 (vector_extract:i64 VR128:v2i64:$src, 0:iPTR))
  // Emits: (MMX_MOVDQ2Qrr:v8i8 VR128:v16i8:$src)
  // Pattern complexity = 11  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
    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(0) &&
          N0.getValueType() == MVT::i64 &&
          N00.getValueType() == MVT::v2i64) {
        SDNode *Result = Emit_81(N, X86::MMX_MOVDQ2Qrr, MVT::v8i8);
        return Result;
      }
    }
  }

  // Pattern: (bitconvert:v8i8 VR64:v1i64:$src)
  // Emits: VR64:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 VR64:v2i32:$src)
  // Emits: VR64:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 VR64:v2f32:$src)
  // Emits: VR64:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 VR64:v4i16:$src)
  // Emits: VR64:v8i8:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v8i8 GR64:i64:$src)
  // Emits: (MMX_MOVD64to64rr:v8i8 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64to64rr, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:v16i8 VR128:v2i64:$src)
    // Emits: VR128:v16i8:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v16i8 VR128:v4i32:$src)
    // Emits: VR128:v16i8:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v16i8 VR128:v8i16:$src)
    // Emits: VR128:v16i8:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v16i8 VR128:v2f64:$src)
    // Emits: VR128:v16i8:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v16i8 VR128:v4f32:$src)
    // Emits: VR128:v16i8:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v4i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v4i16 (vector_extract:i64 VR128:v2i64:$src, 0:iPTR))
  // Emits: (MMX_MOVDQ2Qrr:v4i16 VR128:v16i8:$src)
  // Pattern complexity = 11  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
    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(0) &&
          N0.getValueType() == MVT::i64 &&
          N00.getValueType() == MVT::v2i64) {
        SDNode *Result = Emit_81(N, X86::MMX_MOVDQ2Qrr, MVT::v4i16);
        return Result;
      }
    }
  }

  // Pattern: (bitconvert:v4i16 VR64:v1i64:$src)
  // Emits: VR64:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 VR64:v2i32:$src)
  // Emits: VR64:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 VR64:v2f32:$src)
  // Emits: VR64:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 VR64:v8i8:$src)
  // Emits: VR64:v4i16:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v4i16 GR64:i64:$src)
  // Emits: (MMX_MOVD64to64rr:v4i16 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64to64rr, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:v8i16 VR128:v2i64:$src)
    // Emits: VR128:v8i16:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v8i16 VR128:v4i32:$src)
    // Emits: VR128:v8i16:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v8i16 VR128:v16i8:$src)
    // Emits: VR128:v8i16:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v8i16 VR128:v2f64:$src)
    // Emits: VR128:v8i16:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v8i16 VR128:v4f32:$src)
    // Emits: VR128:v8i16:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_82(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0101_0, SDValue &CPTmpN0101_1, SDValue &CPTmpN0101_2, SDValue &CPTmpN0101_3, SDValue &CPTmpN0101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N010 = N01.getNode()->getOperand(0);
  SDValue Chain010 = N010.getNode()->getOperand(0);
  SDValue N0101 = N010.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N010.getNode())->getMemOperand();
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, N0101, N0101, Chain010);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N010.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_BIT_CONVERT_v2i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v2i32 (vector_shuffle:v2i32 (build_vector:v2i32)<<P:Predicate_immAllZerosV>>, (scalar_to_vector:v2i32 (ld:v1i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckl>>)
  // Emits: (MMX_PUNPCKLDQrm:v2i32 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 56  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::VECTOR_SHUFFLE &&
      N0.hasOneUse() &&
      Predicate_mmx_unpckl(N0.getNode())) {
    SDValue N00 = N0.getNode()->getOperand(0);
    if (N00.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
        Predicate_immAllZerosV(N00.getNode())) {
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
          N01.hasOneUse()) {
        SDValue N010 = N01.getNode()->getOperand(0);
        if (N010.getNode()->getOpcode() == ISD::LOAD &&
            N010.hasOneUse() &&
            IsLegalAndProfitableToFold(N010.getNode(), N01.getNode(), N)) {
          SDValue Chain010 = N010.getNode()->getOperand(0);
          if (Predicate_unindexedload(N010.getNode()) &&
              Predicate_load(N010.getNode())) {
            SDValue N0101 = N010.getNode()->getOperand(1);
            SDValue CPTmpN0101_0;
            SDValue CPTmpN0101_1;
            SDValue CPTmpN0101_2;
            SDValue CPTmpN0101_3;
            SDValue CPTmpN0101_4;
            if (SelectAddr(N, N0101, CPTmpN0101_0, CPTmpN0101_1, CPTmpN0101_2, CPTmpN0101_3, CPTmpN0101_4) &&
                N0.getValueType() == MVT::v2i32 &&
                N010.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_82(N, X86::MMX_PUNPCKLDQrm, MVT::v2i32, CPTmpN0101_0, CPTmpN0101_1, CPTmpN0101_2, CPTmpN0101_3, CPTmpN0101_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (bitconvert:v2i32 (vector_extract:i64 VR128:v2i64:$src, 0:iPTR))
  // Emits: (MMX_MOVDQ2Qrr:v2i32 VR128:v16i8:$src)
  // Pattern complexity = 11  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
    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(0) &&
          N0.getValueType() == MVT::i64 &&
          N00.getValueType() == MVT::v2i64) {
        SDNode *Result = Emit_81(N, X86::MMX_MOVDQ2Qrr, MVT::v2i32);
        return Result;
      }
    }
  }

  // Pattern: (bitconvert:v2i32 VR64:v1i64:$src)
  // Emits: VR64:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 VR64:v2f32:$src)
  // Emits: VR64:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 VR64:v4i16:$src)
  // Emits: VR64:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 VR64:v8i8:$src)
  // Emits: VR64:v2i32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2i32 GR64:i64:$src)
  // Emits: (MMX_MOVD64to64rr:v2i32 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64to64rr, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:v4i32 VR128:v2i64:$src)
    // Emits: VR128:v4i32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4i32 VR128:v8i16:$src)
    // Emits: VR128:v4i32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4i32 VR128:v16i8:$src)
    // Emits: VR128:v4i32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4i32 VR128:v2f64:$src)
    // Emits: VR128:v4i32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4i32 VR128:v4f32:$src)
    // Emits: VR128:v4i32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v1i64(SDNode *N) {

  // Pattern: (bitconvert:v1i64 (vector_extract:i64 VR128:v2i64:$src, 0:iPTR))
  // Emits: (MMX_MOVDQ2Qrr:v1i64 VR128:v2i64:$src)
  // Pattern complexity = 11  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
      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(0) &&
            N0.getValueType() == MVT::i64 &&
            N00.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_81(N, X86::MMX_MOVDQ2Qrr, MVT::v1i64);
          return Result;
        }
      }
    }
  }
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v1i64 VR64:v2i32:$src)
  // Emits: VR64:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 VR64:v2f32:$src)
  // Emits: VR64:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2f32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 VR64:v4i16:$src)
  // Emits: VR64:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 VR64:v8i8:$src)
  // Emits: VR64:v1i64:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v1i64 GR64:i64:$src)
  // Emits: (MMX_MOVD64to64rr:v1i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64to64rr, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:v2i64 VR128:v4i32:$src)
    // Emits: VR128:v2i64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2i64 VR128:v8i16:$src)
    // Emits: VR128:v2i64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2i64 VR128:v16i8:$src)
    // Emits: VR128:v2i64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2i64 VR128:v2f64:$src)
    // Emits: VR128:v2i64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2i64 VR128:v4f32:$src)
    // Emits: VR128:v2i64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BIT_CONVERT_v2f32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (bitconvert:v2f32 VR64:v1i64:$src)
  // Emits: VR64:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v1i64) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 VR64:v2i32:$src)
  // Emits: VR64:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v2i32) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 VR64:v4i16:$src)
  // Emits: VR64:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v4i16) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 VR64:v8i8:$src)
  // Emits: VR64:v2f32:$src
  // Pattern complexity = 3  cost = 0  size = 0
  if (N0.getValueType() == MVT::v8i8) {
    SDNode *Result = Emit_80(N);
    return Result;
  }

  // Pattern: (bitconvert:v2f32 GR64:i64:$src)
  // Emits: (MMX_MOVD64to64rr:v2f32 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_72(N, X86::MMX_MOVD64to64rr, MVT::v2f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:v4f32 VR128:v2i64:$src)
    // Emits: VR128:v4f32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4f32 VR128:v4i32:$src)
    // Emits: VR128:v4f32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4f32 VR128:v8i16:$src)
    // Emits: VR128:v4f32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4f32 VR128:v16i8:$src)
    // Emits: VR128:v4f32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v4f32 VR128:v2f64:$src)
    // Emits: VR128:v4f32:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (bitconvert:v2f64 VR128:v2i64:$src)
    // Emits: VR128:v2f64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2f64 VR128:v4i32:$src)
    // Emits: VR128:v2f64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2f64 VR128:v8i16:$src)
    // Emits: VR128:v2f64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2f64 VR128:v16i8:$src)
    // Emits: VR128:v2f64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_80(N);
      return Result;
    }

    // Pattern: (bitconvert:v2f64 VR128:v4f32:$src)
    // Emits: VR128:v2f64:$src
    // Pattern complexity = 3  cost = 0  size = 0
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_80(N);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_83(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_ISD_BR(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::BasicBlock) {
    SDNode *Result = Emit_83(N, X86::JMP_4);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_84(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  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());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, 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;
}
SDNode *Select_ISD_BRIND(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  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())) {

      // Pattern: (brind:isVoid (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
      // Emits: (JMP32m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 25  cost = 1  size = 3
      if (Predicate_loadi32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_84(N, X86::JMP32m, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }

      // Pattern: (brind:isVoid (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
      // Emits: (JMP64m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 25  cost = 1  size = 3
      if (Predicate_load(N1.getNode()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N1.getValueType() == MVT::i64) {
          SDNode *Result = Emit_84(N, X86::JMP64m, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (brind:isVoid GR32:i32:$dst)
  // Emits: (JMP32r:isVoid GR32:i32:$dst)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i32) {
    SDNode *Result = Emit_83(N, X86::JMP32r);
    return Result;
  }

  // Pattern: (brind:isVoid GR64:i64:$dst)
  // Emits: (JMP64r:isVoid GR64:i64:$dst)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i64) {
    SDNode *Result = Emit_83(N, X86::JMP64r);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BSWAP_i32(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::BSWAP32r, MVT::i32);
  return Result;
}

SDNode *Select_ISD_BSWAP_i64(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::BSWAP64r, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_85(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  return CurDAG->SelectNodeTo(N, Opc0, VT0);
}
SDNode *Select_ISD_BUILD_VECTOR_v8i8(SDNode *N) {
  if ((Subtarget->hasMMX()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::MMX_V_SET0, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v16i8(SDNode *N) {
  if ((Subtarget->hasSSE1()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SET0, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v4i16(SDNode *N) {
  if ((Subtarget->hasMMX()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::MMX_V_SET0, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v8i16(SDNode *N) {
  if ((Subtarget->hasSSE1()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SET0, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v2i32(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (build_vector:v2i32)<<P:Predicate_immAllZerosV>>
    // Emits: (MMX_V_SET0:v2i32)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_immAllZerosV(N)) {
      SDNode *Result = Emit_85(N, X86::MMX_V_SET0, MVT::v2i32);
      return Result;
    }

    // Pattern: (build_vector:v2i32)<<P:Predicate_immAllOnesV>>
    // Emits: (MMX_V_SETALLONES:v2i32)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_immAllOnesV(N)) {
      SDNode *Result = Emit_85(N, X86::MMX_V_SETALLONES, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v4i32(SDNode *N) {

  // Pattern: (build_vector:v4i32)<<P:Predicate_immAllZerosV>>
  // Emits: (V_SET0:v4i32)
  // Pattern complexity = 4  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SET0, MVT::v4i32);
    return Result;
  }

  // Pattern: (build_vector:v4i32)<<P:Predicate_immAllOnesV>>
  // Emits: (V_SETALLONES:v4i32)
  // Pattern complexity = 4  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) &&
      Predicate_immAllOnesV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SETALLONES, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v1i64(SDNode *N) {
  if ((Subtarget->hasMMX()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::MMX_V_SET0, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE1()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SET0, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SET0, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_BUILD_VECTOR_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE1()) &&
      Predicate_immAllZerosV(N)) {
    SDNode *Result = Emit_85(N, X86::V_SET0, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_86(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 InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  SDValue Ops0[] = { N1, N2, 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: (X86callseq_end:isVoid (timm:i32):$amt1, (timm:i32):$amt2)
  // Emits: (ADJCALLSTACKUP32:isVoid (timm:i32):$amt1, (timm:i32):$amt2)
  // Pattern complexity = 9  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    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_86(N, X86::ADJCALLSTACKUP32);
        return Result;
      }
    }
  }

  // Pattern: (X86callseq_end:isVoid (timm:i32):$amt1, (timm:i32):$amt2)
  // Emits: (ADJCALLSTACKUP64:isVoid (timm:i32):$amt1, (timm:i32):$amt2)
  // Pattern complexity = 9  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    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_86(N, X86::ADJCALLSTACKUP64);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_87(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, N1, 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: (X86callseq_start:isVoid (timm:i32):$amt)
  // Emits: (ADJCALLSTACKDOWN32:isVoid (timm:i32):$amt)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetConstant) {
      SDNode *Result = Emit_87(N, X86::ADJCALLSTACKDOWN32);
      return Result;
    }
  }

  // Pattern: (X86callseq_start:isVoid (timm:i32):$amt)
  // Emits: (ADJCALLSTACKDOWN64:isVoid (timm:i32):$amt)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::TargetConstant) {
      SDNode *Result = Emit_87(N, X86::ADJCALLSTACKDOWN64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_88(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0);
}
SDNode *Select_ISD_Constant_i8(SDNode *N) {

  // Pattern: 0:i8
  // Emits: (MOV8r0:i8)
  // Pattern complexity = 5  cost = 1  size = 3
  if (cast<ConstantSDNode>(N)->getSExtValue() == INT64_C(0)) {
    SDNode *Result = Emit_85(N, X86::MOV8r0, MVT::i8);
    return Result;
  }

  // Pattern: (imm:i8):$src
  // Emits: (MOV8ri:i8 (imm:i8):$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_88(N, X86::MOV8ri, MVT::i8);
  return Result;
}

DISABLE_INLINE SDNode *Emit_89(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0);
}
SDNode *Select_ISD_Constant_i16(SDNode *N) {

  // Pattern: 0:i16
  // Emits: (MOV16r0:i16)
  // Pattern complexity = 5  cost = 1  size = 3
  if (cast<ConstantSDNode>(N)->getSExtValue() == INT64_C(0)) {
    SDNode *Result = Emit_85(N, X86::MOV16r0, MVT::i16);
    return Result;
  }

  // Pattern: (imm:i16):$src
  // Emits: (MOV16ri:i16 (imm:i16):$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_89(N, X86::MOV16ri, MVT::i16);
  return Result;
}

DISABLE_INLINE SDNode *Emit_90(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0);
}
SDNode *Select_ISD_Constant_i32(SDNode *N) {

  // Pattern: 0:i32
  // Emits: (MOV32r0:i32)
  // Pattern complexity = 5  cost = 1  size = 3
  if (cast<ConstantSDNode>(N)->getSExtValue() == INT64_C(0)) {
    SDNode *Result = Emit_85(N, X86::MOV32r0, MVT::i32);
    return Result;
  }

  // Pattern: (imm:i32):$src
  // Emits: (MOV32ri:i32 (imm:i32):$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_90(N, X86::MOV32ri, MVT::i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_91(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue Tmp0 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N)->getZExtValue()), MVT::i64);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Tmp0);
}
SDNode *Select_ISD_Constant_i64(SDNode *N) {

  // Pattern: 0:i64
  // Emits: (MOV64r0:i64)
  // Pattern complexity = 6  cost = 1  size = 3
  if (cast<ConstantSDNode>(N)->getSExtValue() == INT64_C(0)) {
    SDNode *Result = Emit_85(N, X86::MOV64r0, MVT::i64);
    return Result;
  }

  // Pattern: (imm:i64)<<P:Predicate_i64immZExt32>>:$src
  // Emits: (MOV64ri64i32:i64 (imm:i64):$src)
  // Pattern complexity = 5  cost = 1  size = 3
  if (Predicate_i64immZExt32(N)) {
    SDNode *Result = Emit_91(N, X86::MOV64ri64i32, MVT::i64);
    return Result;
  }

  // Pattern: (imm:i64)<<P:Predicate_i64immSExt32>>:$src
  // Emits: (MOV64ri32:i64 (imm:i64):$src)
  // Pattern complexity = 4  cost = 1  size = 3
  if (Predicate_i64immSExt32(N)) {
    SDNode *Result = Emit_91(N, X86::MOV64ri32, MVT::i64);
    return Result;
  }

  // Pattern: (imm:i64):$src
  // Emits: (MOV64ri:i64 (imm:i64):$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_91(N, X86::MOV64ri, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_92(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp0);
}
SDNode *Select_ISD_ConstantFP_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {

    // Pattern: (fpimm:f32)<<P:Predicate_fpimm0>>
    // Emits: (LD_Fp032:f32)
    // Pattern complexity = 4  cost = 1  size = 0
    if (Predicate_fpimm0(N)) {
      SDNode *Result = Emit_85(N, X86::LD_Fp032, MVT::f32);
      return Result;
    }

    // Pattern: (fpimm:f32)<<P:Predicate_fpimm1>>
    // Emits: (LD_Fp132:f32)
    // Pattern complexity = 4  cost = 1  size = 0
    if (Predicate_fpimm1(N)) {
      SDNode *Result = Emit_85(N, X86::LD_Fp132, MVT::f32);
      return Result;
    }
  }

  // Pattern: (fpimm:f32)<<P:Predicate_fp32imm0>>
  // Emits: (FsFLD0SS:f32)
  // Pattern complexity = 4  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) &&
      Predicate_fp32imm0(N)) {
    SDNode *Result = Emit_85(N, X86::FsFLD0SS, MVT::f32);
    return Result;
  }
  if ((!Subtarget->hasSSE1())) {

    // Pattern: (fpimm:f32)<<P:Predicate_fpimmneg0>>
    // Emits: (CHS_Fp32:f32 (LD_Fp032:f32))
    // Pattern complexity = 4  cost = 2  size = 0
    if (Predicate_fpimmneg0(N)) {
      SDNode *Result = Emit_92(N, X86::LD_Fp032, X86::CHS_Fp32, MVT::f32, MVT::f32);
      return Result;
    }

    // Pattern: (fpimm:f32)<<P:Predicate_fpimmneg1>>
    // Emits: (CHS_Fp32:f32 (LD_Fp132:f32))
    // Pattern complexity = 4  cost = 2  size = 0
    if (Predicate_fpimmneg1(N)) {
      SDNode *Result = Emit_92(N, X86::LD_Fp132, X86::CHS_Fp32, MVT::f32, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ConstantFP_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {

    // Pattern: (fpimm:f64)<<P:Predicate_fpimm0>>
    // Emits: (LD_Fp064:f64)
    // Pattern complexity = 4  cost = 1  size = 0
    if (Predicate_fpimm0(N)) {
      SDNode *Result = Emit_85(N, X86::LD_Fp064, MVT::f64);
      return Result;
    }

    // Pattern: (fpimm:f64)<<P:Predicate_fpimm1>>
    // Emits: (LD_Fp164:f64)
    // Pattern complexity = 4  cost = 1  size = 0
    if (Predicate_fpimm1(N)) {
      SDNode *Result = Emit_85(N, X86::LD_Fp164, MVT::f64);
      return Result;
    }
  }

  // Pattern: (fpimm:f64)<<P:Predicate_fpimm0>>
  // Emits: (FsFLD0SD:f64)
  // Pattern complexity = 4  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) &&
      Predicate_fpimm0(N)) {
    SDNode *Result = Emit_85(N, X86::FsFLD0SD, MVT::f64);
    return Result;
  }
  if ((!Subtarget->hasSSE2())) {

    // Pattern: (fpimm:f64)<<P:Predicate_fpimmneg0>>
    // Emits: (CHS_Fp64:f64 (LD_Fp064:f64))
    // Pattern complexity = 4  cost = 2  size = 0
    if (Predicate_fpimmneg0(N)) {
      SDNode *Result = Emit_92(N, X86::LD_Fp064, X86::CHS_Fp64, MVT::f64, MVT::f64);
      return Result;
    }

    // Pattern: (fpimm:f64)<<P:Predicate_fpimmneg1>>
    // Emits: (CHS_Fp64:f64 (LD_Fp164:f64))
    // Pattern complexity = 4  cost = 2  size = 0
    if (Predicate_fpimmneg1(N)) {
      SDNode *Result = Emit_92(N, X86::LD_Fp164, X86::CHS_Fp64, MVT::f64, MVT::f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ConstantFP_f80(SDNode *N) {

  // Pattern: (fpimm:f80)<<P:Predicate_fpimm0>>
  // Emits: (LD_Fp080:f80)
  // Pattern complexity = 4  cost = 1  size = 0
  if (Predicate_fpimm0(N)) {
    SDNode *Result = Emit_85(N, X86::LD_Fp080, MVT::f80);
    return Result;
  }

  // Pattern: (fpimm:f80)<<P:Predicate_fpimm1>>
  // Emits: (LD_Fp180:f80)
  // Pattern complexity = 4  cost = 1  size = 0
  if (Predicate_fpimm1(N)) {
    SDNode *Result = Emit_85(N, X86::LD_Fp180, MVT::f80);
    return Result;
  }

  // Pattern: (fpimm:f80)<<P:Predicate_fpimmneg0>>
  // Emits: (CHS_Fp80:f80 (LD_Fp080:f80))
  // Pattern complexity = 4  cost = 2  size = 0
  if (Predicate_fpimmneg0(N)) {
    SDNode *Result = Emit_92(N, X86::LD_Fp080, X86::CHS_Fp80, MVT::f80, MVT::f80);
    return Result;
  }

  // Pattern: (fpimm:f80)<<P:Predicate_fpimmneg1>>
  // Emits: (CHS_Fp80:f80 (LD_Fp180:f80))
  // Pattern complexity = 4  cost = 2  size = 0
  if (Predicate_fpimmneg1(N)) {
    SDNode *Result = Emit_92(N, X86::LD_Fp180, X86::CHS_Fp80, MVT::f80, MVT::f80);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_93(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0);
}
DISABLE_INLINE SDNode *Emit_94(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_95(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, Tmp1);
}
SDNode *Select_ISD_EXTRACT_VECTOR_ELT_i32(SDNode *N) {

  // Pattern: (extractelt:i32 (bitconvert:v4i32 VR128:v4f32:$src1), (imm:iPTR):$src2)
  // Emits: (EXTRACTPSrr:i32 VR128:v4f32:$src1, (imm:i32):$src2)
  // Pattern complexity = 9  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant &&
          N0.getValueType() == MVT::v4i32 &&
          N00.getValueType() == MVT::v4f32) {
        SDNode *Result = Emit_95(N, X86::EXTRACTPSrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (vector_extract:i32 VR128:v4i32:$src, 0:iPTR)
  // Emits: (MOVPDI2DIrr:i32 VR128:v4i32:$src)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = 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(0) &&
          N0.getValueType() == MVT::v4i32) {
        SDNode *Result = Emit_93(N, X86::MOVPDI2DIrr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (extractelt:i32 VR128:v4i32:$src1, (imm:iPTR):$src2)
  // Emits: (PEXTRDrr:i32 VR128:v4i32:$src1, (imm:i32):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_94(N, X86::PEXTRDrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_EXTRACT_VECTOR_ELT_i64(SDNode *N) {

  // Pattern: (vector_extract:i64 VR128:v2i64:$src, 0:iPTR)
  // Emits: (MOVPQIto64rr:i64 VR128:v2i64:$src)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = 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(0) &&
          N0.getValueType() == MVT::v2i64) {
        SDNode *Result = Emit_93(N, X86::MOVPQIto64rr, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (extractelt:i64 VR128:v2i64:$src1, (imm:iPTR):$src2)
  // Emits: (PEXTRQrr:i64 VR128:v2i64:$src1, (imm:i32):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v2i64) {
      SDNode *Result = Emit_94(N, X86::PEXTRQrr, MVT::i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_EXTRACT_VECTOR_ELT_f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = 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(0) &&
          N0.getValueType() == MVT::v4f32) {
        SDNode *Result = Emit_93(N, X86::MOVPS2SSrr, MVT::f32);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_EXTRACT_VECTOR_ELT_f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = 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(0) &&
          N0.getValueType() == MVT::v2f64) {
        SDNode *Result = Emit_93(N, X86::MOVPD2SDrr, MVT::f64);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FABS_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::ABS_Fp32, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FABS_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDNode *Result = Emit_72(N, X86::ABS_Fp64, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FABS_f80(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::ABS_Fp80, MVT::f80);
  return Result;
}

DISABLE_INLINE SDNode *Emit_96(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N12 = N1.getNode()->getOperand(2);
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_97(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N02 = N0.getNode()->getOperand(2);
  SDValue N1 = N->getOperand(1);
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_FADD_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fadd:f32 RFP32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
    // Emits: (ADD_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::ADD_Fp32m, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>, RFP32:f32:$src1)
    // Emits: (ADD_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 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()) &&
          Predicate_loadf32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::ADD_Fp32m, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fadd:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADDSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::ADDSSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, FR32:f32:$src1)
    // Emits: (ADDSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::ADDSSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE1())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == X86ISD::FILD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDValue N12 = N1.getNode()->getOperand(2);

            // Pattern: (fadd:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i16:Other))
            // Emits: (ADD_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_96(N, X86::ADD_FpI16m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (fadd:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i32:Other))
            // Emits: (ADD_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
              SDNode *Result = Emit_96(N, X86::ADD_FpI32m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == X86ISD::FILD &&
          N0.hasOneUse() &&
          IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N02 = N0.getNode()->getOperand(2);

          // Pattern: (fadd:f32 (X86fild:f32 addr:iPTR:$src2, i16:Other), RFP32:f32:$src1)
          // Emits: (ADD_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_97(N, X86::ADD_FpI16m32, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (fadd:f32 (X86fild:f32 addr:iPTR:$src2, i32:Other), RFP32:f32:$src1)
          // Emits: (ADD_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_97(N, X86::ADD_FpI32m32, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Emits: (ADD_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::ADD_Fp32, MVT::f32);
    return Result;
  }

  // Pattern: (fadd:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Emits: (ADDSSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::ADDSSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FADD_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode())) {

          // Pattern: (fadd:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
          // Emits: (ADD_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_load(N1.getNode()) &&
              Predicate_loadf64(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::ADD_Fp64m, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }

          // Pattern: (fadd:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
          // Emits: (ADD_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_extload(N1.getNode()) &&
              Predicate_extloadf32(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::ADD_Fp64m32, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode())) {

        // Pattern: (fadd:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>, RFP64:f64:$src1)
        // Emits: (ADD_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_load(N0.getNode()) &&
            Predicate_loadf64(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::ADD_Fp64m, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }

        // Pattern: (fadd:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>, RFP64:f64:$src1)
        // Emits: (ADD_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extload(N0.getNode()) &&
            Predicate_extloadf32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::ADD_Fp64m32, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fadd:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (ADDSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::ADDSDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, FR64:f64:$src1)
    // Emits: (ADDSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::ADDSDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE2())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == X86ISD::FILD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDValue N12 = N1.getNode()->getOperand(2);

            // Pattern: (fadd:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i16:Other))
            // Emits: (ADD_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_96(N, X86::ADD_FpI16m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (fadd:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i32:Other))
            // Emits: (ADD_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
              SDNode *Result = Emit_96(N, X86::ADD_FpI32m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == X86ISD::FILD &&
          N0.hasOneUse() &&
          IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N02 = N0.getNode()->getOperand(2);

          // Pattern: (fadd:f64 (X86fild:f64 addr:iPTR:$src2, i16:Other), RFP64:f64:$src1)
          // Emits: (ADD_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_97(N, X86::ADD_FpI16m64, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (fadd:f64 (X86fild:f64 addr:iPTR:$src2, i32:Other), RFP64:f64:$src1)
          // Emits: (ADD_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_97(N, X86::ADD_FpI32m64, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Emits: (ADD_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::ADD_Fp64, MVT::f64);
    return Result;
  }

  // Pattern: (fadd:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Emits: (ADDSDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::ADDSDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FADD_f80(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_extload(N1.getNode())) {

          // Pattern: (fadd:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
          // Emits: (ADD_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_extloadf32(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::ADD_Fp80m32, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }

          // Pattern: (fadd:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>)
          // Emits: (ADD_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_extloadf64(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::ADD_Fp80m64, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
    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_extload(N0.getNode())) {

        // Pattern: (fadd:f80 (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>, RFP80:f80:$src1)
        // Emits: (ADD_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::ADD_Fp80m32, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }

        // Pattern: (fadd:f80 (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>, RFP80:f80:$src1)
        // Emits: (ADD_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf64(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::ADD_Fp80m64, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::FILD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N12 = N1.getNode()->getOperand(2);

          // Pattern: (fadd:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i16:Other))
          // Emits: (ADD_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::ADD_FpI16m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fadd:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i32:Other))
          // Emits: (ADD_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::ADD_FpI32m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == X86ISD::FILD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      SDValue CPTmpN01_3;
      SDValue CPTmpN01_4;
      if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
        SDValue N02 = N0.getNode()->getOperand(2);

        // Pattern: (fadd:f80 (X86fild:f80 addr:iPTR:$src2, i16:Other), RFP80:f80:$src1)
        // Emits: (ADD_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_97(N, X86::ADD_FpI16m80, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }

        // Pattern: (fadd:f80 (X86fild:f80 addr:iPTR:$src2, i32:Other), RFP80:f80:$src1)
        // Emits: (ADD_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i32) {
          SDNode *Result = Emit_97(N, X86::ADD_FpI32m80, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fadd:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Emits: (ADD_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  SDNode *Result = Emit_15(N, X86::ADD_Fp80, MVT::f80);
  return Result;
}

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

      // Pattern: (fadd:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (ADDPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::ADDPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (fadd:v4f32 (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v4f32:$src1)
      // Emits: (ADDPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::ADDPSrm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (ADDPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::ADDPSrr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (fadd:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (ADDPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::ADDPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (fadd:v2f64 (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2f64:$src1)
      // Emits: (ADDPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::ADDPDrm, MVT::v2f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fadd:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Emits: (ADDPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::ADDPDrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FCOS_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::COS_Fp32, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FCOS_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDNode *Result = Emit_72(N, X86::COS_Fp64, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FCOS_f80(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::COS_Fp80, MVT::f80);
  return Result;
}

SDNode *Select_ISD_FDIV_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadf32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {

          // Pattern: (fdiv:f32 RFP32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
          // Emits: (DIV_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          {
            SDNode *Result = Emit_18(N, X86::DIV_Fp32m, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f32 RFP32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
          // Emits: (DIVR_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          SDNode *Result = Emit_18(N, X86::DIVR_Fp32m, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fdiv:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (DIVSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::DIVSSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE1())) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::FILD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N12 = N1.getNode()->getOperand(2);

          // Pattern: (fdiv:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i16:Other))
          // Emits: (DIV_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::DIV_FpI16m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i32:Other))
          // Emits: (DIV_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::DIV_FpI32m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i16:Other))
          // Emits: (DIVR_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::DIVR_FpI16m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i32:Other))
          // Emits: (DIVR_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::DIVR_FpI32m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fdiv:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Emits: (DIV_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::DIV_Fp32, MVT::f32);
    return Result;
  }

  // Pattern: (fdiv:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Emits: (DIVSSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::DIVSSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FDIV_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode())) {

        // Pattern: (fdiv:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
        // Emits: (DIV_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_load(N1.getNode()) &&
            Predicate_loadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIV_Fp64m, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fdiv:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (DIV_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extload(N1.getNode()) &&
            Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIV_Fp64m32, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fdiv:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
        // Emits: (DIVR_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_load(N1.getNode()) &&
            Predicate_loadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIVR_Fp64m, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fdiv:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (DIVR_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extload(N1.getNode()) &&
            Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIVR_Fp64m32, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (fdiv:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (DIVSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::DIVSDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE2())) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::FILD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N12 = N1.getNode()->getOperand(2);

          // Pattern: (fdiv:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i16:Other))
          // Emits: (DIV_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::DIV_FpI16m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i32:Other))
          // Emits: (DIV_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::DIV_FpI32m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i16:Other))
          // Emits: (DIVR_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::DIVR_FpI16m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fdiv:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i32:Other))
          // Emits: (DIVR_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::DIVR_FpI32m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fdiv:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Emits: (DIV_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::DIV_Fp64, MVT::f64);
    return Result;
  }

  // Pattern: (fdiv:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Emits: (DIVSDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::DIVSDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FDIV_f80(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_extload(N1.getNode())) {

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (DIV_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIV_Fp80m32, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>)
        // Emits: (DIV_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIV_Fp80m64, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (DIVR_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIVR_Fp80m32, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>)
        // Emits: (DIVR_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIVR_Fp80m64, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
    if (N1.getNode()->getOpcode() == X86ISD::FILD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      SDValue CPTmpN11_0;
      SDValue CPTmpN11_1;
      SDValue CPTmpN11_2;
      SDValue CPTmpN11_3;
      SDValue CPTmpN11_4;
      if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
        SDValue N12 = N1.getNode()->getOperand(2);

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i16:Other))
        // Emits: (DIV_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_96(N, X86::DIV_FpI16m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i32:Other))
        // Emits: (DIV_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
          SDNode *Result = Emit_96(N, X86::DIV_FpI32m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i16:Other))
        // Emits: (DIVR_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_96(N, X86::DIVR_FpI16m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }

        // Pattern: (fdiv:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i32:Other))
        // Emits: (DIVR_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
          SDNode *Result = Emit_96(N, X86::DIVR_FpI32m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fdiv:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Emits: (DIV_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  SDNode *Result = Emit_15(N, X86::DIV_Fp80, MVT::f80);
  return Result;
}

SDNode *Select_ISD_FDIV_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (fdiv:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (DIVPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIVPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fdiv:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (DIVPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::DIVPSrr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FDIV_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (fdiv:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (DIVPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::DIVPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fdiv:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Emits: (DIVPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::DIVPDrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FMUL_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:f32 RFP32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
    // Emits: (MUL_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 0
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MUL_Fp32m, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>, RFP32:f32:$src1)
    // Emits: (MUL_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 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()) &&
          Predicate_loadf32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::MUL_Fp32m, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MULSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MULSSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, FR32:f32:$src1)
    // Emits: (MULSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::MULSSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE1())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == X86ISD::FILD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDValue N12 = N1.getNode()->getOperand(2);

            // Pattern: (fmul:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i16:Other))
            // Emits: (MUL_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_96(N, X86::MUL_FpI16m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (fmul:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i32:Other))
            // Emits: (MUL_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
              SDNode *Result = Emit_96(N, X86::MUL_FpI32m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == X86ISD::FILD &&
          N0.hasOneUse() &&
          IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N02 = N0.getNode()->getOperand(2);

          // Pattern: (fmul:f32 (X86fild:f32 addr:iPTR:$src2, i16:Other), RFP32:f32:$src1)
          // Emits: (MUL_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_97(N, X86::MUL_FpI16m32, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (fmul:f32 (X86fild:f32 addr:iPTR:$src2, i32:Other), RFP32:f32:$src1)
          // Emits: (MUL_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_97(N, X86::MUL_FpI32m32, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Emits: (MUL_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::MUL_Fp32, MVT::f32);
    return Result;
  }

  // Pattern: (fmul:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Emits: (MULSSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::MULSSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FMUL_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode())) {

          // Pattern: (fmul:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
          // Emits: (MUL_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_load(N1.getNode()) &&
              Predicate_loadf64(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MUL_Fp64m, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }

          // Pattern: (fmul:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
          // Emits: (MUL_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_extload(N1.getNode()) &&
              Predicate_extloadf32(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MUL_Fp64m32, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode())) {

        // Pattern: (fmul:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>, RFP64:f64:$src1)
        // Emits: (MUL_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_load(N0.getNode()) &&
            Predicate_loadf64(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MUL_Fp64m, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }

        // Pattern: (fmul:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>, RFP64:f64:$src1)
        // Emits: (MUL_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extload(N0.getNode()) &&
            Predicate_extloadf32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MUL_Fp64m32, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fmul:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MULSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MULSDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, FR64:f64:$src1)
    // Emits: (MULSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::MULSDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE2())) {
    {
      SDValue N0 = N->getOperand(0);
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == X86ISD::FILD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDValue N12 = N1.getNode()->getOperand(2);

            // Pattern: (fmul:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i16:Other))
            // Emits: (MUL_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
              SDNode *Result = Emit_96(N, X86::MUL_FpI16m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (fmul:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i32:Other))
            // Emits: (MUL_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 24  cost = 1  size = 0
            if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
              SDNode *Result = Emit_96(N, X86::MUL_FpI32m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
      if (N0.getNode()->getOpcode() == X86ISD::FILD &&
          N0.hasOneUse() &&
          IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N02 = N0.getNode()->getOperand(2);

          // Pattern: (fmul:f64 (X86fild:f64 addr:iPTR:$src2, i16:Other), RFP64:f64:$src1)
          // Emits: (MUL_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_97(N, X86::MUL_FpI16m64, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (fmul:f64 (X86fild:f64 addr:iPTR:$src2, i32:Other), RFP64:f64:$src1)
          // Emits: (MUL_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_97(N, X86::MUL_FpI32m64, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Emits: (MUL_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::MUL_Fp64, MVT::f64);
    return Result;
  }

  // Pattern: (fmul:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Emits: (MULSDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::MULSDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FMUL_f80(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_extload(N1.getNode())) {

          // Pattern: (fmul:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
          // Emits: (MUL_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_extloadf32(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MUL_Fp80m32, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }

          // Pattern: (fmul:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>)
          // Emits: (MUL_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          if (Predicate_extloadf64(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MUL_Fp80m64, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
    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_extload(N0.getNode())) {

        // Pattern: (fmul:f80 (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>, RFP80:f80:$src1)
        // Emits: (MUL_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MUL_Fp80m32, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }

        // Pattern: (fmul:f80 (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>, RFP80:f80:$src1)
        // Emits: (MUL_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf64(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MUL_Fp80m64, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::FILD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N12 = N1.getNode()->getOperand(2);

          // Pattern: (fmul:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i16:Other))
          // Emits: (MUL_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::MUL_FpI16m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fmul:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i32:Other))
          // Emits: (MUL_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::MUL_FpI32m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == X86ISD::FILD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      SDValue CPTmpN01_3;
      SDValue CPTmpN01_4;
      if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
        SDValue N02 = N0.getNode()->getOperand(2);

        // Pattern: (fmul:f80 (X86fild:f80 addr:iPTR:$src2, i16:Other), RFP80:f80:$src1)
        // Emits: (MUL_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_97(N, X86::MUL_FpI16m80, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }

        // Pattern: (fmul:f80 (X86fild:f80 addr:iPTR:$src2, i32:Other), RFP80:f80:$src1)
        // Emits: (MUL_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N02.getNode())->getVT() == MVT::i32) {
          SDNode *Result = Emit_97(N, X86::MUL_FpI32m80, MVT::f80, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fmul:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Emits: (MUL_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  SDNode *Result = Emit_15(N, X86::MUL_Fp80, MVT::f80);
  return Result;
}

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

      // Pattern: (fmul:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (MULPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MULPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (fmul:v4f32 (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v4f32:$src1)
      // Emits: (MULPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MULPSrm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (MULPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MULPSrr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (fmul:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (MULPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MULPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (fmul:v2f64 (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2f64:$src1)
      // Emits: (MULPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MULPDrm, MVT::v2f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fmul:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Emits: (MULPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MULPDrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FNEG_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::CHS_Fp32, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FNEG_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDNode *Result = Emit_72(N, X86::CHS_Fp64, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FNEG_f80(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::CHS_Fp80, MVT::f80);
  return Result;
}

SDNode *Select_ISD_FP_EXTEND_f64(SDNode *N) {

  // Pattern: (fextend:f64 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
  // Emits: (CVTSS2SDrm:f64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f32) {
          SDNode *Result = Emit_79(N, X86::CVTSS2SDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fextend:f64 RFP32:f32:$src)
  // Emits: (MOV_Fp3264:f64 RFP32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::MOV_Fp3264, MVT::f64);
      return Result;
    }
  }

  // Pattern: (fextend:f64 FR32:f32:$src)
  // Emits: (CVTSS2SDrr:f64 FR32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::CVTSS2SDrr, MVT::f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_EXTEND_f80(SDNode *N) {

  // Pattern: (fextend:f80 RFP32:f32:$src)
  // Emits: (MOV_Fp3280:f80 RFP32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::MOV_Fp3280, MVT::f80);
      return Result;
    }
  }

  // Pattern: (fextend:f80 RFP64:f64:$src)
  // Emits: (MOV_Fp6480:f80 RFP64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::MOV_Fp6480, MVT::f80);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_ROUND_f32(SDNode *N) {

  // Pattern: (fround:f32 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
  // Emits: (CVTSD2SSrm:f32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) && (OptForSize)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f64) {
          SDNode *Result = Emit_79(N, X86::CVTSD2SSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (fround:f32 RFP64:f64:$src)
    // Emits: (MOV_Fp6432:f32 RFP64:f64:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::MOV_Fp6432, MVT::f32);
      return Result;
    }

    // Pattern: (fround:f32 RFP80:f80:$src)
    // Emits: (MOV_Fp8032:f32 RFP80:f80:$src)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f80) {
      SDNode *Result = Emit_72(N, X86::MOV_Fp8032, MVT::f32);
      return Result;
    }
  }

  // Pattern: (fround:f32 FR64:f64:$src)
  // Emits: (CVTSD2SSrr:f32 FR64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::CVTSD2SSrr, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_ROUND_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f80) {
      SDNode *Result = Emit_72(N, X86::MOV_Fp8064, MVT::f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_SINT_i32(SDNode *N) {

  // Pattern: (fp_to_sint:i32 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
  // Emits: (CVTTSS2SIrm:i32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f32) {
          SDNode *Result = Emit_79(N, X86::CVTTSS2SIrm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fp_to_sint:i32 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
  // Emits: (CVTTSD2SIrm:i32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f64) {
          SDNode *Result = Emit_79(N, X86::CVTTSD2SIrm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fp_to_sint:i32 FR32:f32:$src)
  // Emits: (CVTTSS2SIrr:i32 FR32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::CVTTSS2SIrr, MVT::i32);
      return Result;
    }
  }

  // Pattern: (fp_to_sint:i32 FR64:f64:$src)
  // Emits: (CVTTSD2SIrr:i32 FR64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::CVTTSD2SIrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_SINT_i64(SDNode *N) {

  // Pattern: (fp_to_sint:i64 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
  // Emits: (CVTTSD2SI64rm:i64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f64) {
          SDNode *Result = Emit_79(N, X86::CVTTSD2SI64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fp_to_sint:i64 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
  // Emits: (CVTTSS2SI64rm:i64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f32) {
          SDNode *Result = Emit_79(N, X86::CVTTSS2SI64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fp_to_sint:i64 FR64:f64:$src)
  // Emits: (CVTTSD2SI64rr:i64 FR64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::CVTTSD2SI64rr, MVT::i64);
      return Result;
    }
  }

  // Pattern: (fp_to_sint:i64 FR32:f32:$src)
  // Emits: (CVTTSS2SI64rr:i64 FR32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::CVTTSS2SI64rr, MVT::i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_SINT_v2i32(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_72(N, X86::Int_CVTTPD2PIrr, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FP_TO_SINT_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_72(N, X86::Int_CVTTPS2DQrr, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSIN_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::SIN_Fp32, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSIN_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDNode *Result = Emit_72(N, X86::SIN_Fp64, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSIN_f80(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::SIN_Fp80, MVT::f80);
  return Result;
}

SDNode *Select_ISD_FSQRT_f32(SDNode *N) {

  // Pattern: (fsqrt:f32 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (SQRTSSm:f32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) && (OptForSize)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::SQRTSSm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fsqrt:f32 RFP32:f32:$src)
  // Emits: (SQRT_Fp32:f32 RFP32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::SQRT_Fp32, MVT::f32);
    return Result;
  }

  // Pattern: (fsqrt:f32 FR32:f32:$src)
  // Emits: (SQRTSSr:f32 FR32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::SQRTSSr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSQRT_f64(SDNode *N) {

  // Pattern: (fsqrt:f64 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (SQRTSDm:f64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::SQRTSDm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fsqrt:f64 RFP64:f64:$src)
  // Emits: (SQRT_Fp64:f64 RFP64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE2())) {
    SDNode *Result = Emit_72(N, X86::SQRT_Fp64, MVT::f64);
    return Result;
  }

  // Pattern: (fsqrt:f64 FR64:f64:$src)
  // Emits: (SQRTSDr:f64 FR64:f64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_72(N, X86::SQRTSDr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSQRT_f80(SDNode *N) {
  SDNode *Result = Emit_72(N, X86::SQRT_Fp80, MVT::f80);
  return Result;
}

SDNode *Select_ISD_FSQRT_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (fsqrt:v4f32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (SQRTPSm:v4f32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::LOAD &&
          N0.hasOneUse()) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        if (Predicate_unindexedload(N0.getNode()) &&
            Predicate_load(N0.getNode()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_79(N, X86::SQRTPSm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fsqrt:v4f32 VR128:v4f32:$src)
    // Emits: (SQRTPSr:v4f32 VR128:v4f32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_72(N, X86::SQRTPSr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSQRT_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (fsqrt:v2f64 (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (SQRTPDm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::LOAD &&
          N0.hasOneUse()) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        if (Predicate_unindexedload(N0.getNode()) &&
            Predicate_load(N0.getNode()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_79(N, X86::SQRTPDm, MVT::v2f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fsqrt:v2f64 VR128:v2f64:$src)
    // Emits: (SQRTPDr:v2f64 VR128:v2f64:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_72(N, X86::SQRTPDr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadf32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {

          // Pattern: (fsub:f32 RFP32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
          // Emits: (SUB_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          {
            SDNode *Result = Emit_18(N, X86::SUB_Fp32m, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f32 RFP32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
          // Emits: (SUBR_Fp32m:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 0
          SDNode *Result = Emit_18(N, X86::SUBR_Fp32m, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fsub:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (SUBSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::SUBSSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE1())) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::FILD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N12 = N1.getNode()->getOperand(2);

          // Pattern: (fsub:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i16:Other))
          // Emits: (SUB_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::SUB_FpI16m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i32:Other))
          // Emits: (SUB_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::SUB_FpI32m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i16:Other))
          // Emits: (SUBR_FpI16m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::SUBR_FpI16m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f32 RFP32:f32:$src1, (X86fild:f32 addr:iPTR:$src2, i32:Other))
          // Emits: (SUBR_FpI32m32:f32 RFP32:f32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::SUBR_FpI32m32, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fsub:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Emits: (SUB_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::SUB_Fp32, MVT::f32);
    return Result;
  }

  // Pattern: (fsub:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Emits: (SUBSSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::SUBSSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode())) {

        // Pattern: (fsub:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
        // Emits: (SUB_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_load(N1.getNode()) &&
            Predicate_loadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUB_Fp64m, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fsub:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (SUB_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extload(N1.getNode()) &&
            Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUB_Fp64m32, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fsub:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
        // Emits: (SUBR_Fp64m:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_load(N1.getNode()) &&
            Predicate_loadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUBR_Fp64m, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fsub:f64 RFP64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (SUBR_Fp64m32:f64 RFP64:f64:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extload(N1.getNode()) &&
            Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUBR_Fp64m32, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (fsub:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (SUBSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::SUBSDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->hasSSE2())) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::FILD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N12 = N1.getNode()->getOperand(2);

          // Pattern: (fsub:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i16:Other))
          // Emits: (SUB_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::SUB_FpI16m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i32:Other))
          // Emits: (SUB_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::SUB_FpI32m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i16:Other))
          // Emits: (SUBR_FpI16m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
            SDNode *Result = Emit_96(N, X86::SUBR_FpI16m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }

          // Pattern: (fsub:f64 RFP64:f64:$src1, (X86fild:f64 addr:iPTR:$src2, i32:Other))
          // Emits: (SUBR_FpI32m64:f64 RFP64:f64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 24  cost = 1  size = 0
          if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
            SDNode *Result = Emit_96(N, X86::SUBR_FpI32m64, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fsub:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Emits: (SUB_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 0
    SDNode *Result = Emit_15(N, X86::SUB_Fp64, MVT::f64);
    return Result;
  }

  // Pattern: (fsub:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Emits: (SUBSDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::SUBSDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_f80(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_extload(N1.getNode())) {

        // Pattern: (fsub:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (SUB_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUB_Fp80m32, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fsub:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>)
        // Emits: (SUB_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUB_Fp80m64, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fsub:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>)
        // Emits: (SUBR_Fp80m32:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUBR_Fp80m32, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }

        // Pattern: (fsub:f80 RFP80:f80:$src1, (ld:f80 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>)
        // Emits: (SUBR_Fp80m64:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 25  cost = 1  size = 0
        if (Predicate_extloadf64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUBR_Fp80m64, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
    if (N1.getNode()->getOpcode() == X86ISD::FILD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      SDValue N11 = N1.getNode()->getOperand(1);
      SDValue CPTmpN11_0;
      SDValue CPTmpN11_1;
      SDValue CPTmpN11_2;
      SDValue CPTmpN11_3;
      SDValue CPTmpN11_4;
      if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
        SDValue N12 = N1.getNode()->getOperand(2);

        // Pattern: (fsub:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i16:Other))
        // Emits: (SUB_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_96(N, X86::SUB_FpI16m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }

        // Pattern: (fsub:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i32:Other))
        // Emits: (SUB_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
          SDNode *Result = Emit_96(N, X86::SUB_FpI32m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }

        // Pattern: (fsub:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i16:Other))
        // Emits: (SUBR_FpI16m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i16) {
          SDNode *Result = Emit_96(N, X86::SUBR_FpI16m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }

        // Pattern: (fsub:f80 RFP80:f80:$src1, (X86fild:f80 addr:iPTR:$src2, i32:Other))
        // Emits: (SUBR_FpI32m80:f80 RFP80:f80:$src1, addr:iPTR:$src2)
        // Pattern complexity = 24  cost = 1  size = 0
        if (cast<VTSDNode>(N12.getNode())->getVT() == MVT::i32) {
          SDNode *Result = Emit_96(N, X86::SUBR_FpI32m80, MVT::f80, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (fsub:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Emits: (SUB_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
  // Pattern complexity = 3  cost = 1  size = 0
  SDNode *Result = Emit_15(N, X86::SUB_Fp80, MVT::f80);
  return Result;
}

SDNode *Select_ISD_FSUB_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (fsub:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (SUBPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUBPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fsub:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (SUBPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::SUBPSrr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FSUB_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (fsub:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (SUBPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::SUBPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (fsub:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Emits: (SUBPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::SUBPDrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FrameIndex_i32(SDNode *N) {

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_FrameIndex_i64(SDNode *N) {
  SDValue CPTmpN_0;
  SDValue CPTmpN_1;
  SDValue CPTmpN_2;
  SDValue CPTmpN_3;
  if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
    SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_98(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_99(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = 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 Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Tmp2, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INSERT_VECTOR_ELT_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (insertelt:v4i32 VR128:v4i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:iPTR):$src3)
    // Emits: (PINSRDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2, (imm:i32):$src3)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_loadi32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_99(N, X86::PINSRDrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (insertelt:v4i32 VR128:v4i32:$src1, GR32:i32:$src2, (imm:iPTR):$src3)
    // Emits: (PINSRDrr:v4i32 VR128:v4i32:$src1, GR32:i32:$src2, (imm:i32):$src3)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_98(N, X86::PINSRDrr, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (insertelt:v2i64 VR128:v2i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:iPTR):$src3)
    // Emits: (PINSRQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2, (imm:i32):$src3)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_99(N, X86::PINSRQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (insertelt:v2i64 VR128:v2i64:$src1, GR64:i64:$src2, (imm:iPTR):$src3)
    // Emits: (PINSRQrr:v2i64 VR128:v2i64:$src1, GR64:i64:$src2, (imm:i32):$src3)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_98(N, X86::PINSRQrr, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_100(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N3, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
}
DISABLE_INLINE SDNode *Emit_101(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Chain);
}
DISABLE_INLINE SDNode *Emit_102(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 6);
}
DISABLE_INLINE SDNode *Emit_103(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 InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EDI, N4, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  SDValue Ops0[] = { N2, N3, Chain, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_104(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 InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::RDI, N4, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  SDValue Ops0[] = { N2, N3, Chain, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_105(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 InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EAX, N2, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::ECX, N3, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EDX, N4, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Chain, InFlag);
}
DISABLE_INLINE SDNode *Emit_106(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 InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::ECX, N2, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EAX, N3, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Chain, InFlag);
}
SDNode *Select_ISD_INTRINSIC_VOID(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_void:isVoid 715:iPTR, addr:iPTR:$dst, VR128:v4f32:$src)
      // Emits: (MOVUPSmr_Int:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(715)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVUPSmr_Int, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 705:iPTR, addr:iPTR:$dst, VR128:v4f32:$src)
      // Emits: (MOVNTPSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(705)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVNTPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 698:iPTR, addr:iPTR:$src)
      // Emits: (LDMXCSR:isVoid addr:iPTR:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(698)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_102(N, X86::LDMXCSR, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 714:iPTR, addr:iPTR:$dst)
      // Emits: (STMXCSR:isVoid addr:iPTR:$dst)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(714)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_102(N, X86::STMXCSR, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_void:isVoid 593:iPTR, addr:iPTR:$dst, VR128:v2f64:$src)
      // Emits: (MOVUPDmr_Int:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(593)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVUPDmr_Int, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 592:iPTR, addr:iPTR:$dst, VR128:v16i8:$src)
      // Emits: (MOVDQUmr_Int:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(592)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVDQUmr_Int, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 538:iPTR, addr:iPTR:$dst, VR128:v2f64:$src)
      // Emits: (MOVNTPDmr:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(538)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVNTPDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 536:iPTR, addr:iPTR:$dst, VR128:v2i64:$src)
      // Emits: (MOVNTDQmr:isVoid addr:iPTR:$dst, VR128:v2i64:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(536)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVNTDQmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 537:iPTR, addr:iPTR:$dst, GR32:i32:$src)
      // Emits: (MOVNTImr:isVoid addr:iPTR:$dst, GR32:i32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(537)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVNTImr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 500:iPTR, addr:iPTR:$src)
      // Emits: (CLFLUSH:isVoid addr:iPTR:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(500)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_102(N, X86::CLFLUSH, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 591:iPTR, addr:iPTR:$dst, VR128:v4i32:$src)
      // Emits: (MOVLQ128mr:isVoid addr:iPTR:$dst, VR128:v4i32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(591)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MOVLQ128mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_void:isVoid 453:iPTR, addr:iPTR:$dst, VR64:v1i64:$src)
  // Emits: (MMX_MOVNTQmr:isVoid addr:iPTR:$dst, VR64:v1i64:$src)
  // Pattern complexity = 26  cost = 1  size = 3
  if ((Subtarget->hasMMX())) {
    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(453)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_100(N, X86::MMX_MOVNTQmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_void:isVoid 711:iPTR)
  // Emits: (SFENCE:isVoid)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    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(711)) {
        SDNode *Result = Emit_101(N, X86::SFENCE);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    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(529)) {
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue N4 = N->getOperand(4);

        // Pattern: (intrinsic_void:isVoid 529:iPTR, VR128:v16i8:$src, VR128:v16i8:$mask, EDI:i32)
        // Emits: (MASKMOVDQU:isVoid VR128:v16i8:$src, VR128:v16i8:$mask)
        // Pattern complexity = 8  cost = 1  size = 3
        if (N4.getValueType() == MVT::i32) {
          SDNode *Result = Emit_103(N, X86::MASKMOVDQU);
          return Result;
        }

        // Pattern: (intrinsic_void:isVoid 529:iPTR, VR128:v16i8:$src, VR128:v16i8:$mask, RDI:i64)
        // Emits: (MASKMOVDQU64:isVoid VR128:v16i8:$src, VR128:v16i8:$mask)
        // Pattern complexity = 8  cost = 1  size = 3
        if (N4.getValueType() == MVT::i64) {
          SDNode *Result = Emit_104(N, X86::MASKMOVDQU64);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 526:iPTR)
      // Emits: (LFENCE:isVoid)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(526)) {
        SDNode *Result = Emit_101(N, X86::LFENCE);
        return Result;
      }

      // Pattern: (intrinsic_void:isVoid 532:iPTR)
      // Emits: (MFENCE:isVoid)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(532)) {
        SDNode *Result = Emit_101(N, X86::MFENCE);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE3())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_void:isVoid 608:iPTR, EAX:i32, ECX:i32, EDX:i32)
      // Emits: (MONITOR:isVoid)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(608)) {
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue N4 = N->getOperand(4);
        if (N2.getValueType() == MVT::i32) {
          SDNode *Result = Emit_105(N, X86::MONITOR);
          return Result;
        }
      }

      // Pattern: (intrinsic_void:isVoid 609:iPTR, ECX:i32, EAX:i32)
      // Emits: (MWAIT:isVoid)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(609)) {
        SDNode *Result = Emit_106(N, X86::MWAIT);
        return Result;
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_void:isVoid 450:iPTR)
      // Emits: (MMX_EMMS:isVoid)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(450)) {
        SDNode *Result = Emit_101(N, X86::MMX_EMMS);
        return Result;
      }

      // Pattern: (intrinsic_void:isVoid 451:iPTR)
      // Emits: (MMX_FEMMS:isVoid)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(451)) {
        SDNode *Result = Emit_101(N, X86::MMX_FEMMS);
        return Result;
      }

      // Pattern: (intrinsic_void:isVoid 452:iPTR, VR64:v8i8:$src, VR64:v8i8:$mask, EDI:i32)
      // Emits: (MMX_MASKMOVQ:isVoid VR64:v8i8:$src, VR64:v8i8:$mask)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(452)) {
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue N4 = N->getOperand(4);
        if (N4.getValueType() == MVT::i32) {
          SDNode *Result = Emit_103(N, X86::MMX_MASKMOVQ);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_void:isVoid 452:iPTR, VR64:v8i8:$src, VR64:v8i8:$mask, RDI:i64)
  // Emits: (MMX_MASKMOVQ64:isVoid VR64:v8i8:$src, VR64:v8i8:$mask)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasMMX()) && (Subtarget->is64Bit())) {
    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(452)) {
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        SDValue N4 = N->getOperand(4);
        if (N4.getValueType() == MVT::i64) {
          SDNode *Result = Emit_104(N, X86::MMX_MASKMOVQ64);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_107(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1);
}
DISABLE_INLINE SDNode *Emit_108(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_109(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN21_0, SDValue &CPTmpN21_1, SDValue &CPTmpN21_2, SDValue &CPTmpN21_3, SDValue &CPTmpN21_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Chain2 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N2.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4, Chain2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N2.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_110(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N2);
}
DISABLE_INLINE SDNode *Emit_111(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::i32, N1, N2, Tmp4);
}
DISABLE_INLINE SDNode *Emit_112(SDNode *N, unsigned Opc0, SDValue &CPTmpN21_0, SDValue &CPTmpN21_1, SDValue &CPTmpN21_2, SDValue &CPTmpN21_3, SDValue &CPTmpN21_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Chain2 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N2.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4, Tmp4, Chain2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::i32, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N2.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_113(SDNode *N, unsigned Opc0) {
  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 Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N5)->getZExtValue()), MVT::i8);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EAX, N2, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EDX, N4, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  SDValue Ops0[] = { N1, N3, Tmp4, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::i32, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_114(SDNode *N, unsigned Opc0, SDValue &CPTmpN31_0, SDValue &CPTmpN31_1, SDValue &CPTmpN31_2, SDValue &CPTmpN31_3, SDValue &CPTmpN31_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Chain3 = N3.getNode()->getOperand(0);
  SDValue N31 = N3.getNode()->getOperand(1);
  SDValue N4 = N->getOperand(4);
  SDValue N5 = N->getOperand(5);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N5)->getZExtValue()), MVT::i8);
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain3, N->getDebugLoc(), X86::EAX, N2, InFlag).getNode();
  Chain3 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain3, N->getDebugLoc(), X86::EDX, N4, InFlag).getNode();
  Chain3 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N3.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4, Tmp4, Chain3, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::i32, MVT::Other, Ops0, 9);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N3.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_i32(SDNode *N) {
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 669:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRIrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(669)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_112(N, X86::PCMPISTRIrm, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 670:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRIArm:isVoid VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(670)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_112(N, X86::PCMPISTRIArm, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 671:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRICrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(671)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_112(N, X86::PCMPISTRICrm, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 672:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRIOrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(672)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_112(N, X86::PCMPISTRIOrm, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 673:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRISrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(673)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_112(N, X86::PCMPISTRISrm, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 674:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRIZrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(674)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_112(N, X86::PCMPISTRIZrm, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 661:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(661)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_114(N, X86::PCMPESTRIrm, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 662:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIArm:isVoid VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(662)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_114(N, X86::PCMPESTRIArm, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 663:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRICrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(663)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_114(N, X86::PCMPESTRICrm, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 664:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIOrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(664)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_114(N, X86::PCMPESTRIOrm, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 665:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRISrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(665)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_114(N, X86::PCMPESTRISrm, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 666:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIZrm:isVoid VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(666)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_114(N, X86::PCMPESTRIZrm, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 691:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTSS2SIrm:i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(691)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTSS2SIrm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 695:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTTSS2SIrm:i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(695)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTSS2SIrm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 515:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTSD2SIrm:i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(515)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTSD2SIrm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 523:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTTSD2SIrm:i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(523)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTSD2SIrm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 660:iPTR, GR32:i32:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (CRC32m8:i32 GR32:i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(660)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::CRC32m8, MVT::i32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 657:iPTR, GR32:i32:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (CRC32m16:i32 GR32:i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(657)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::CRC32m16, MVT::i32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 658:iPTR, GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (CRC32m32:i32 GR32:i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(658)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::CRC32m32, MVT::i32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 669:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRIrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(669)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_111(N, X86::PCMPISTRIrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 670:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRIArr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(670)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_111(N, X86::PCMPISTRIArr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 671:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRICrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(671)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_111(N, X86::PCMPISTRICrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 672:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRIOrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(672)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_111(N, X86::PCMPISTRIOrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 673:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRISrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(673)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_111(N, X86::PCMPISTRISrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 674:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRIZrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(674)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_111(N, X86::PCMPISTRIZrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 661:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(661)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_113(N, X86::PCMPESTRIrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 662:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIArr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(662)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_113(N, X86::PCMPESTRIArr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 663:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRICrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(663)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_113(N, X86::PCMPESTRICrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 664:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIOrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(664)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_113(N, X86::PCMPESTRIOrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 665:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRISrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(665)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_113(N, X86::PCMPESTRISrr);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:i32 666:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRIZrr:isVoid VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(666)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_113(N, X86::PCMPESTRIZrr);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 691:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTSS2SIrr:i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(691)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTSS2SIrr, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 695:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTTSS2SIrr:i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(695)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTSS2SIrr, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 704:iPTR, VR128:v4f32:$src)
      // Emits: (MOVMSKPSrr:i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(704)) {
        SDNode *Result = Emit_107(N, X86::MOVMSKPSrr, MVT::i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 535:iPTR, VR128:v2f64:$src)
      // Emits: (MOVMSKPDrr:i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(535)) {
        SDNode *Result = Emit_107(N, X86::MOVMSKPDrr, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 515:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTSD2SIrr:i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(515)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTSD2SIrr, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 523:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTTSD2SIrr:i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(523)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTSD2SIrr, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 560:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVMSKBrr:i32 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(560)) {
        SDNode *Result = Emit_107(N, X86::PMOVMSKBrr, MVT::i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i32 660:iPTR, GR32:i32:$src1, GR8:i8:$src2)
      // Emits: (CRC32r8:i32 GR32:i32:$src1, GR8:i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(660)) {
        SDNode *Result = Emit_110(N, X86::CRC32r8, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 657:iPTR, GR32:i32:$src1, GR16:i16:$src2)
      // Emits: (CRC32r16:i32 GR32:i32:$src1, GR16:i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(657)) {
        SDNode *Result = Emit_110(N, X86::CRC32r16, MVT::i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i32 658:iPTR, GR32:i32:$src1, GR32:i32:$src2)
      // Emits: (CRC32r32:i32 GR32:i32:$src1, GR32:i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(658)) {
        SDNode *Result = Emit_110(N, X86::CRC32r32, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:i32 474:iPTR, VR64:v8i8:$src)
  // Emits: (MMX_PMOVMSKBrr:i32 VR64:v8i8:$src)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(474)) {
        SDNode *Result = Emit_107(N, X86::MMX_PMOVMSKBrr, MVT::i32);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_i64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i64 516:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTSD2SI64rm:i64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(516)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTSD2SI64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i64 524:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTTSD2SI64rm:i64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(524)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTSD2SI64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i64 692:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTSS2SI64rm:i64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(692)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTSS2SI64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:i64 696:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTTSS2SI64rm:i64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(696)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTSS2SI64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:i64 659:iPTR, GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (CRC64m64:i64 GR64:i64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 30  cost = 1  size = 3
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(659)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::CRC64m64, MVT::i64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i64 516:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTSD2SI64rr:i64 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(516)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTSD2SI64rr, MVT::i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i64 524:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTTSD2SI64rr:i64 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(524)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTSD2SI64rr, MVT::i64);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:i64 692:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTSS2SI64rr:i64 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(692)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTSS2SI64rr, MVT::i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:i64 696:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTTSS2SI64rr:i64 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(696)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTSS2SI64rr, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:i64 659:iPTR, GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (CRC64r64:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(659)) {
        SDNode *Result = Emit_110(N, X86::CRC64r64, MVT::i64);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_115(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_116(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN201_0, SDValue &CPTmpN201_1, SDValue &CPTmpN201_2, SDValue &CPTmpN201_3, SDValue &CPTmpN201_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N20 = N2.getNode()->getOperand(0);
  SDValue Chain20 = N20.getNode()->getOperand(0);
  SDValue N201 = N20.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N20.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4, Chain20 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N20.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_117(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { N2, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v8i8(SDNode *N) {
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i8 723:iPTR, (bitconvert:v8i8 (ld:v8i8 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PABSBrm64:v8i8 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(723)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v8i8) {
                SDNode *Result = Emit_115(N, X86::PABSBrm64, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 747:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v8i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PSHUFBrm64:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(747)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i8) {
                SDNode *Result = Emit_116(N, X86::PSHUFBrm64, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 749:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v8i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PSIGNBrm64:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(749)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i8) {
                SDNode *Result = Emit_116(N, X86::PSIGNBrm64, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i8 457:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDSBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(457)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PADDSBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 459:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDUSBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(459)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PADDUSBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 495:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSUBSBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(495)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSUBSBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 497:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSUBUSBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(497)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSUBUSBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 461:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PAVGBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(461)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PAVGBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 473:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMINUBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(473)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMINUBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 471:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMAXUBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(471)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMAXUBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 463:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PCMPEQBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(463)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PCMPEQBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 466:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PCMPGTBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(466)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PCMPGTBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 455:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PACKSSWBrm:v8i8 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(455)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PACKSSWBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 456:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PACKUSWBrm:v8i8 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(456)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PACKUSWBrm, MVT::v8i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 457:iPTR, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PADDSBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(457)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PADDSBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 459:iPTR, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PADDUSBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(459)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PADDUSBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 461:iPTR, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PAVGBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(461)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PAVGBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 473:iPTR, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PMINUBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(473)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMINUBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i8 471:iPTR, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PMAXUBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(471)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMAXUBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i8 723:iPTR, VR64:v8i8:$src)
      // Emits: (PABSBrr64:v8i8 VR64:v8i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(723)) {
        SDNode *Result = Emit_107(N, X86::PABSBrr64, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 747:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (PSHUFBrr64:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(747)) {
        SDNode *Result = Emit_110(N, X86::PSHUFBrr64, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 749:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (PSIGNBrr64:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(749)) {
        SDNode *Result = Emit_110(N, X86::PSIGNBrr64, MVT::v8i8);
        return Result;
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i8 457:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PADDSBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(457)) {
        SDNode *Result = Emit_110(N, X86::MMX_PADDSBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 459:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PADDUSBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(459)) {
        SDNode *Result = Emit_110(N, X86::MMX_PADDUSBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 495:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PSUBSBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(495)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSUBSBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 497:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PSUBUSBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(497)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSUBUSBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 461:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PAVGBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(461)) {
        SDNode *Result = Emit_110(N, X86::MMX_PAVGBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 473:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PMINUBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(473)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMINUBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 471:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PMAXUBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(471)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMAXUBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 463:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PCMPEQBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(463)) {
        SDNode *Result = Emit_110(N, X86::MMX_PCMPEQBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 466:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PCMPGTBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(466)) {
        SDNode *Result = Emit_110(N, X86::MMX_PCMPGTBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 455:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PACKSSWBrr:v8i8 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(455)) {
        SDNode *Result = Emit_110(N, X86::MMX_PACKSSWBrr, MVT::v8i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i8 456:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PACKUSWBrr:v8i8 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(456)) {
        SDNode *Result = Emit_110(N, X86::MMX_PACKUSWBrr, MVT::v8i8);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_118(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 Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N2, Tmp4);
}
DISABLE_INLINE SDNode *Emit_119(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN201_0, SDValue &CPTmpN201_1, SDValue &CPTmpN201_2, SDValue &CPTmpN201_3, SDValue &CPTmpN201_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N20 = N2.getNode()->getOperand(0);
  SDValue Chain20 = N20.getNode()->getOperand(0);
  SDValue N201 = N20.getNode()->getOperand(1);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N20.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4, Tmp4, Chain20 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N20.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_120(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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::XMM0, N3, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N2, InFlag);
}
DISABLE_INLINE SDNode *Emit_121(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN201_0, SDValue &CPTmpN201_1, SDValue &CPTmpN201_2, SDValue &CPTmpN201_3, SDValue &CPTmpN201_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N20 = N2.getNode()->getOperand(0);
  SDValue Chain20 = N20.getNode()->getOperand(0);
  SDValue N201 = N20.getNode()->getOperand(1);
  SDValue N3 = N->getOperand(3);
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain20, N->getDebugLoc(), X86::XMM0, N3, InFlag).getNode();
  Chain20 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N20.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4, Chain20, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N20.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_122(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 Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N2, Tmp4);
}
DISABLE_INLINE SDNode *Emit_123(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN21_0, SDValue &CPTmpN21_1, SDValue &CPTmpN21_2, SDValue &CPTmpN21_3, SDValue &CPTmpN21_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Chain2 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N2.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4, Tmp4, Chain2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N2.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_124(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 Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N5)->getZExtValue()), MVT::i8);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EAX, N2, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EDX, N4, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  SDValue Ops0[] = { N1, N3, Tmp4, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
DISABLE_INLINE SDNode *Emit_125(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN31_0, SDValue &CPTmpN31_1, SDValue &CPTmpN31_2, SDValue &CPTmpN31_3, SDValue &CPTmpN31_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Chain3 = N3.getNode()->getOperand(0);
  SDValue N31 = N3.getNode()->getOperand(1);
  SDValue N4 = N->getOperand(4);
  SDValue N5 = N->getOperand(5);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N5)->getZExtValue()), MVT::i8);
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain3, N->getDebugLoc(), X86::EAX, N2, InFlag).getNode();
  Chain3 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  ResNode = CurDAG->getCopyToReg(Chain3, N->getDebugLoc(), X86::EDX, N4, InFlag).getNode();
  Chain3 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N3.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4, Tmp4, Chain3, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 9);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N3.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_126(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { N2, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v16i8(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(619)) {
        SDValue N1 = N->getOperand(1);

        // Pattern: (intrinsic_wo_chain:v16i8 619:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (imm:i32):$src3)
        // Emits: (MPSADBWrmi:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i32):$src3)
        // Pattern complexity = 36  cost = 1  size = 3
        {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              N2.hasOneUse()) {
            SDValue N20 = N2.getNode()->getOperand(0);
            if (N20.getNode()->getOpcode() == ISD::LOAD &&
                N20.hasOneUse() &&
                IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
              SDValue Chain20 = N20.getNode()->getOperand(0);
              if (Predicate_unindexedload(N20.getNode()) &&
                  Predicate_load(N20.getNode()) &&
                  Predicate_memop(N20.getNode())) {
                SDValue N201 = N20.getNode()->getOperand(1);
                SDValue CPTmpN201_0;
                SDValue CPTmpN201_1;
                SDValue CPTmpN201_2;
                SDValue CPTmpN201_3;
                SDValue CPTmpN201_4;
                if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                  SDValue N3 = N->getOperand(3);
                  if (N3.getNode()->getOpcode() == ISD::Constant &&
                      N20.getValueType() == MVT::v16i8) {
                    SDNode *Result = Emit_119(N, X86::MPSADBWrmi, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                    return Result;
                  }
                }
              }
            }
          }
        }

        // Pattern: (intrinsic_wo_chain:v16i8 619:iPTR, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1, (imm:i32):$src3)
        // Emits: (MPSADBWrmi:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i32):$src3)
        // Pattern complexity = 36  cost = 1  size = 3
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                SDValue N3 = N->getOperand(3);
                if (N3.getNode()->getOpcode() == ISD::Constant &&
                    N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_126(N, X86::MPSADBWrmi, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 543:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(543)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PADDSBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 545:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDUSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(545)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PADDUSBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 585:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSUBSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(585)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSUBSBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 587:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSUBUSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(587)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSUBUSBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 547:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PAVGBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(547)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PAVGBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 559:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMINUBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(559)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMINUBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 557:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMAXUBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(557)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMAXUBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 549:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPEQBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(549)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PCMPEQBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 552:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPGTBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(552)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PCMPGTBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 541:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PACKSSWBrm:v16i8 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(541)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PACKSSWBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 542:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PACKUSWBrm:v16i8 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(542)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PACKUSWBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 724:iPTR, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PABSBrm128:v16i8 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(724)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_115(N, X86::PABSBrm128, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 748:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSHUFBrm128:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(748)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PSHUFBrm128, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 750:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSIGNBrm128:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(750)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PSIGNBrm128, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 632:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMINSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(632)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMINSBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 628:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMAXSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(628)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMAXSBrm, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 621:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), XMM0:v16i8)
      // Emits: (PBLENDVBrm0:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(621)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                SDValue N3 = N->getOperand(3);
                if (N20.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_121(N, X86::PBLENDVBrm0, MVT::v16i8, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 543:iPTR, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PADDSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(543)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PADDSBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 545:iPTR, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PADDUSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(545)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PADDUSBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 547:iPTR, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PAVGBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(547)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PAVGBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 559:iPTR, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PMINUBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(559)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMINUBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 557:iPTR, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PMAXUBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(557)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMAXUBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 632:iPTR, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PMINSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(632)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMINSBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 628:iPTR, (bitconvert:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PMAXSBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(628)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMAXSBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 675:iPTR, VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$src3)
      // Emits: (PCMPISTRM128MEM:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$src3)
      // Pattern complexity = 33  cost = 11  size = 3
      if (CN1 == INT64_C(675)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_123(N, X86::PCMPISTRM128MEM, MVT::v16i8, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 667:iPTR, VR128:v16i8:$src1, EAX:i32, (ld:v16i8 addr:iPTR:$src3)<<P:Predicate_unindexedload>><<P:Predicate_load>>, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRM128MEM:v16i8 VR128:v16i8:$src1, addr:iPTR:$src3, (imm:i8):$src5)
      // Pattern complexity = 33  cost = 11  size = 3
      if (CN1 == INT64_C(667)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::LOAD &&
            N3.hasOneUse() &&
            IsLegalAndProfitableToFold(N3.getNode(), N, N)) {
          SDValue Chain3 = N3.getNode()->getOperand(0);
          if (Predicate_unindexedload(N3.getNode()) &&
              Predicate_load(N3.getNode())) {
            SDValue N31 = N3.getNode()->getOperand(1);
            SDValue CPTmpN31_0;
            SDValue CPTmpN31_1;
            SDValue CPTmpN31_2;
            SDValue CPTmpN31_3;
            SDValue CPTmpN31_4;
            if (SelectAddr(N, N31, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4)) {
              SDValue N4 = N->getOperand(4);
              SDValue N5 = N->getOperand(5);
              if (N5.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_125(N, X86::PCMPESTRM128MEM, MVT::v16i8, CPTmpN31_0, CPTmpN31_1, CPTmpN31_2, CPTmpN31_3, CPTmpN31_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v16i8 619:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i32):$src3)
  // Emits: (MPSADBWrri:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i32):$src3)
  // Pattern complexity = 11  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(619)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::MPSADBWrri, MVT::v16i8);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 675:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Emits: (PCMPISTRM128REG:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$src3)
      // Pattern complexity = 11  cost = 11  size = 3
      if (CN1 == INT64_C(675)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_122(N, X86::PCMPISTRM128REG, MVT::v16i8);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v16i8 667:iPTR, VR128:v16i8:$src1, EAX:i32, VR128:v16i8:$src3, EDX:i32, (imm:i8):$src5)
      // Emits: (PCMPESTRM128REG:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src3, (imm:i8):$src5)
      // Pattern complexity = 11  cost = 11  size = 3
      if (CN1 == INT64_C(667)) {
        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);
        if (N5.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_124(N, X86::PCMPESTRM128REG, MVT::v16i8);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 543:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PADDSBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(543)) {
        SDNode *Result = Emit_110(N, X86::PADDSBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 545:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PADDUSBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(545)) {
        SDNode *Result = Emit_110(N, X86::PADDUSBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 585:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PSUBSBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(585)) {
        SDNode *Result = Emit_110(N, X86::PSUBSBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 587:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PSUBUSBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(587)) {
        SDNode *Result = Emit_110(N, X86::PSUBUSBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 547:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PAVGBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(547)) {
        SDNode *Result = Emit_110(N, X86::PAVGBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 559:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PMINUBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(559)) {
        SDNode *Result = Emit_110(N, X86::PMINUBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 557:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PMAXUBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(557)) {
        SDNode *Result = Emit_110(N, X86::PMAXUBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 549:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PCMPEQBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(549)) {
        SDNode *Result = Emit_110(N, X86::PCMPEQBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 552:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PCMPGTBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(552)) {
        SDNode *Result = Emit_110(N, X86::PCMPGTBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 541:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PACKSSWBrr:v16i8 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(541)) {
        SDNode *Result = Emit_110(N, X86::PACKSSWBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 542:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PACKUSWBrr:v16i8 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(542)) {
        SDNode *Result = Emit_110(N, X86::PACKUSWBrr, MVT::v16i8);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 724:iPTR, VR128:v16i8:$src)
      // Emits: (PABSBrr128:v16i8 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(724)) {
        SDNode *Result = Emit_107(N, X86::PABSBrr128, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 748:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PSHUFBrr128:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(748)) {
        SDNode *Result = Emit_110(N, X86::PSHUFBrr128, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 750:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PSIGNBrr128:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(750)) {
        SDNode *Result = Emit_110(N, X86::PSIGNBrr128, MVT::v16i8);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v16i8 632:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PMINSBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(632)) {
        SDNode *Result = Emit_110(N, X86::PMINSBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 628:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PMAXSBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(628)) {
        SDNode *Result = Emit_110(N, X86::PMAXSBrr, MVT::v16i8);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v16i8 621:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2, XMM0:v16i8)
      // Emits: (PBLENDVBrr0:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(621)) {
        SDNode *Result = Emit_120(N, X86::PBLENDVBrr0, MVT::v16i8);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_127(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, Tmp3);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v4i16(SDNode *N) {
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i16 727:iPTR, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PABSWrm64:v4i16 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(727)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_115(N, X86::PABSWrm64, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 735:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHADDWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(735)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_116(N, X86::PHADDWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 733:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHADDSWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(733)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_116(N, X86::PHADDSWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 741:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHSUBWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(741)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_116(N, X86::PHSUBWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 739:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHSUBSWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(739)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_116(N, X86::PHSUBSWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 743:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v8i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PMADDUBSWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(743)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i8) {
                SDNode *Result = Emit_116(N, X86::PMADDUBSWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 745:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PMULHRSWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(745)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_116(N, X86::PMULHRSWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 753:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PSIGNWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(753)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i16) {
                SDNode *Result = Emit_116(N, X86::PSIGNWrm64, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i16 458:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(458)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PADDSWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 460:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PADDUSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(460)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PADDUSWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 496:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSUBSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(496)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSUBSWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 498:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSUBUSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(498)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSUBUSWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 475:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMULHWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(475)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMULHWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 476:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMULHUWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(476)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMULHUWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 462:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PAVGWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(462)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PAVGWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 472:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMINSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(472)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMINSWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 470:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMAXSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(470)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMAXSWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 478:iPTR, VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSADBWrm:v4i16 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(478)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSADBWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 491:iPTR, VR64:v4i16:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSRLWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(491)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSRLWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 481:iPTR, VR64:v4i16:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSLLWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(481)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSLLWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 486:iPTR, VR64:v4i16:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSRAWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(486)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSRAWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 465:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PCMPEQWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(465)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PCMPEQWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 468:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PCMPGTWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(468)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PCMPGTWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 454:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PACKSSDWrm:v4i16 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(454)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PACKSSDWrm, MVT::v4i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v4i16 745:iPTR, (bitconvert:v4i16 (ld:v4i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>), VR64:v4i16:$src1)
  // Emits: (PMULHRSWrm64:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(745)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v4i16) {
                  SDNode *Result = Emit_117(N, X86::PMULHRSWrm64, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i16 458:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PADDSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(458)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PADDSWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 460:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PADDUSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(460)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PADDUSWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 475:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PMULHWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(475)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMULHWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 476:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PMULHUWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(476)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMULHUWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 462:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PAVGWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(462)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PAVGWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 472:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PMINSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(472)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMINSWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 470:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PMAXSWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(470)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMAXSWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 478:iPTR, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
      // Emits: (MMX_PSADBWrm:v4i16 VR64:v8i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(478)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PSADBWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 494:iPTR, VR64:v4i16:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSRLWri:v4i16 VR64:v4i16:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(494)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSRLWri, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 484:iPTR, VR64:v4i16:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSLLWri:v4i16 VR64:v4i16:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(484)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSLLWri, MVT::v4i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i16 488:iPTR, VR64:v4i16:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSRAWri:v4i16 VR64:v4i16:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(488)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSRAWri, MVT::v4i16);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i16 727:iPTR, VR64:v4i16:$src)
      // Emits: (PABSWrr64:v4i16 VR64:v4i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(727)) {
        SDNode *Result = Emit_107(N, X86::PABSWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 735:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PHADDWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(735)) {
        SDNode *Result = Emit_110(N, X86::PHADDWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 733:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PHADDSWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(733)) {
        SDNode *Result = Emit_110(N, X86::PHADDSWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 741:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PHSUBWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(741)) {
        SDNode *Result = Emit_110(N, X86::PHSUBWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 739:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PHSUBSWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(739)) {
        SDNode *Result = Emit_110(N, X86::PHSUBSWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 743:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PMADDUBSWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(743)) {
        SDNode *Result = Emit_110(N, X86::PMADDUBSWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 745:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PMULHRSWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(745)) {
        SDNode *Result = Emit_110(N, X86::PMULHRSWrr64, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 753:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (PSIGNWrr64:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(753)) {
        SDNode *Result = Emit_110(N, X86::PSIGNWrr64, MVT::v4i16);
        return Result;
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i16 458:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PADDSWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(458)) {
        SDNode *Result = Emit_110(N, X86::MMX_PADDSWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 460:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PADDUSWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(460)) {
        SDNode *Result = Emit_110(N, X86::MMX_PADDUSWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 496:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PSUBSWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(496)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSUBSWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 498:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PSUBUSWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(498)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSUBUSWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 475:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PMULHWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(475)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMULHWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 476:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PMULHUWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(476)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMULHUWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 462:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PAVGWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(462)) {
        SDNode *Result = Emit_110(N, X86::MMX_PAVGWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 472:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PMINSWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(472)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMINSWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 470:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PMAXSWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(470)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMAXSWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 478:iPTR, VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Emits: (MMX_PSADBWrr:v4i16 VR64:v8i8:$src1, VR64:v8i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(478)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSADBWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 491:iPTR, VR64:v4i16:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSRLWrr:v4i16 VR64:v4i16:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(491)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSRLWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 481:iPTR, VR64:v4i16:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSLLWrr:v4i16 VR64:v4i16:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(481)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSLLWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 486:iPTR, VR64:v4i16:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSRAWrr:v4i16 VR64:v4i16:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(486)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSRAWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 465:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PCMPEQWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(465)) {
        SDNode *Result = Emit_110(N, X86::MMX_PCMPEQWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 468:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PCMPGTWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(468)) {
        SDNode *Result = Emit_110(N, X86::MMX_PCMPGTWrr, MVT::v4i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i16 454:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (MMX_PACKSSDWrr:v4i16 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(454)) {
        SDNode *Result = Emit_110(N, X86::MMX_PACKSSDWrr, MVT::v4i16);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_128(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, Chain100 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N100.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_129(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN10001_0, SDValue &CPTmpN10001_1, SDValue &CPTmpN10001_2, SDValue &CPTmpN10001_3, SDValue &CPTmpN10001_4) {
  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 Chain1000 = N1000.getNode()->getOperand(0);
  SDValue N10001 = N1000.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1000.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4, Chain1000 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1000.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_130(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v8i16(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 638:iPTR, (bitconvert:v16i8 (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))))
      // Emits: (PMOVSXBWrm:v8i16 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(638)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_load(N1000.getNode()) &&
                    Predicate_loadi64(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v2i64 &&
                      N1000.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_129(N, X86::PMOVSXBWrm, MVT::v8i16, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 644:iPTR, (bitconvert:v16i8 (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))))
      // Emits: (PMOVZXBWrm:v8i16 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(644)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_load(N1000.getNode()) &&
                    Predicate_loadi64(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v2i64 &&
                      N1000.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_129(N, X86::PMOVZXBWrm, MVT::v8i16, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 622:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (imm:i32):$src3)
      // Emits: (PBLENDWrmi:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2, (imm:i32):$src3)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(622)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                SDValue N3 = N->getOperand(3);
                if (N3.getNode()->getOpcode() == ISD::Constant &&
                    N20.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_119(N, X86::PBLENDWrmi, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 638:iPTR, (bitconvert:v16i8 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)))
      // Emits: (PMOVSXBWrm:v8i16 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(638)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v2i64 &&
                    N100.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_128(N, X86::PMOVSXBWrm, MVT::v8i16, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 644:iPTR, (bitconvert:v16i8 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)))
      // Emits: (PMOVZXBWrm:v8i16 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(644)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v2i64 &&
                    N100.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_128(N, X86::PMOVZXBWrm, MVT::v8i16, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 544:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(544)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PADDSWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 546:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PADDUSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(546)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PADDUSWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 586:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSUBSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(586)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSUBSWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 588:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSUBUSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(588)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSUBUSWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 562:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMULHUWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(562)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMULHUWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 561:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMULHWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(561)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMULHWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 548:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PAVGWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(548)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PAVGWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 558:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMINSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(558)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMINSWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 556:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMAXSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(556)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMAXSWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 569:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSLLWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(569)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSLLWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 581:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSRLWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(581)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSRLWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 574:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSRAWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(574)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSRAWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 551:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPEQWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(551)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PCMPEQWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 554:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPGTWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(554)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PCMPGTWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 540:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PACKSSDWrm:v8i16 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(540)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PACKSSDWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 728:iPTR, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PABSWrm128:v8i16 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(728)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_115(N, X86::PABSWrm128, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 736:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHADDWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(736)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_116(N, X86::PHADDWrm128, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 742:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHSUBWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(742)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_116(N, X86::PHSUBWrm128, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 740:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHSUBSWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(740)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_116(N, X86::PHSUBSWrm128, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 744:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMADDUBSWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(744)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMADDUBSWrm128, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 746:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PMULHRSWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(746)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_116(N, X86::PMULHRSWrm128, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 754:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PSIGNWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(754)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_116(N, X86::PSIGNWrm128, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 627:iPTR, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHMINPOSUWrm128:v8i16 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(627)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_115(N, X86::PHMINPOSUWrm128, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 620:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PACKUSDWrm:v8i16 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(620)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PACKUSDWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 635:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMINUWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(635)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMINUWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 631:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMAXUWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(631)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMAXUWrm, MVT::v8i16, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 544:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PADDSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(544)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PADDSWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 546:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PADDUSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(546)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PADDUSWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 562:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMULHUWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(562)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMULHUWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 561:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMULHWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(561)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMULHWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 548:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PAVGWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(548)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PAVGWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 558:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMINSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(558)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMINSWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 556:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMAXSWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(556)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMAXSWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v8i16 746:iPTR, (bitconvert:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>), VR128:v8i16:$src1)
  // Emits: (PMULHRSWrm128:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(746)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v8i16) {
                  SDNode *Result = Emit_117(N, X86::PMULHRSWrm128, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 635:iPTR, (bitconvert:v8i16 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMINUWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(635)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMINUWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 631:iPTR, (bitconvert:v8i16 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMAXUWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(631)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMAXUWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 638:iPTR, (bitconvert:v16i8 (X86vzload:v2i64 addr:iPTR:$src)))
      // Emits: (PMOVSXBWrm:v8i16 addr:iPTR:$src)
      // Pattern complexity = 32  cost = 1  size = 3
      if (CN1 == INT64_C(638)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_130(N, X86::PMOVSXBWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 644:iPTR, (bitconvert:v16i8 (X86vzload:v2i64 addr:iPTR:$src)))
      // Emits: (PMOVZXBWrm:v8i16 addr:iPTR:$src)
      // Pattern complexity = 32  cost = 1  size = 3
      if (CN1 == INT64_C(644)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_130(N, X86::PMOVZXBWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 572:iPTR, VR128:v8i16:$src1, (imm:i32):$src2)
      // Emits: (PSLLWri:v8i16 VR128:v8i16:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(572)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSLLWri, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 584:iPTR, VR128:v8i16:$src1, (imm:i32):$src2)
      // Emits: (PSRLWri:v8i16 VR128:v8i16:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(584)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSRLWri, MVT::v8i16);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v8i16 576:iPTR, VR128:v8i16:$src1, (imm:i32):$src2)
      // Emits: (PSRAWri:v8i16 VR128:v8i16:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(576)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSRAWri, MVT::v8i16);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v8i16 622:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2, (imm:i32):$src3)
  // Emits: (PBLENDWrri:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2, (imm:i32):$src3)
  // Pattern complexity = 11  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(622)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::PBLENDWrri, MVT::v8i16);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 544:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PADDSWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(544)) {
        SDNode *Result = Emit_110(N, X86::PADDSWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 546:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PADDUSWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(546)) {
        SDNode *Result = Emit_110(N, X86::PADDUSWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 586:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PSUBSWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(586)) {
        SDNode *Result = Emit_110(N, X86::PSUBSWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 588:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PSUBUSWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(588)) {
        SDNode *Result = Emit_110(N, X86::PSUBUSWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 562:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMULHUWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(562)) {
        SDNode *Result = Emit_110(N, X86::PMULHUWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 561:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMULHWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(561)) {
        SDNode *Result = Emit_110(N, X86::PMULHWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 548:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PAVGWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(548)) {
        SDNode *Result = Emit_110(N, X86::PAVGWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 558:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMINSWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(558)) {
        SDNode *Result = Emit_110(N, X86::PMINSWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 556:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMAXSWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(556)) {
        SDNode *Result = Emit_110(N, X86::PMAXSWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 569:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PSLLWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(569)) {
        SDNode *Result = Emit_110(N, X86::PSLLWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 581:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PSRLWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(581)) {
        SDNode *Result = Emit_110(N, X86::PSRLWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 574:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PSRAWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(574)) {
        SDNode *Result = Emit_110(N, X86::PSRAWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 551:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PCMPEQWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(551)) {
        SDNode *Result = Emit_110(N, X86::PCMPEQWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 554:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PCMPGTWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(554)) {
        SDNode *Result = Emit_110(N, X86::PCMPGTWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 540:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PACKSSDWrr:v8i16 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(540)) {
        SDNode *Result = Emit_110(N, X86::PACKSSDWrr, MVT::v8i16);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 728:iPTR, VR128:v8i16:$src)
      // Emits: (PABSWrr128:v8i16 VR128:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(728)) {
        SDNode *Result = Emit_107(N, X86::PABSWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 736:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PHADDWrr128:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(736)) {
        SDNode *Result = Emit_110(N, X86::PHADDWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 742:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PHSUBWrr128:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(742)) {
        SDNode *Result = Emit_110(N, X86::PHSUBWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 740:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PHSUBSWrr128:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(740)) {
        SDNode *Result = Emit_110(N, X86::PHSUBSWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 744:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMADDUBSWrr128:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(744)) {
        SDNode *Result = Emit_110(N, X86::PMADDUBSWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 746:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMULHRSWrr128:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(746)) {
        SDNode *Result = Emit_110(N, X86::PMULHRSWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 754:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PSIGNWrr128:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(754)) {
        SDNode *Result = Emit_110(N, X86::PSIGNWrr128, MVT::v8i16);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v8i16 627:iPTR, VR128:v8i16:$src)
      // Emits: (PHMINPOSUWrr128:v8i16 VR128:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(627)) {
        SDNode *Result = Emit_107(N, X86::PHMINPOSUWrr128, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 620:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PACKUSDWrr:v8i16 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(620)) {
        SDNode *Result = Emit_110(N, X86::PACKUSDWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 635:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMINUWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(635)) {
        SDNode *Result = Emit_110(N, X86::PMINUWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 631:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMAXUWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(631)) {
        SDNode *Result = Emit_110(N, X86::PMAXUWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 638:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVSXBWrr:v8i16 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(638)) {
        SDNode *Result = Emit_107(N, X86::PMOVSXBWrr, MVT::v8i16);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v8i16 644:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVZXBWrr:v8i16 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(644)) {
        SDNode *Result = Emit_107(N, X86::PMOVZXBWrr, MVT::v8i16);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v2i32(SDNode *N) {
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 725:iPTR, (bitconvert:v2i32 (ld:v2i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PABSDrm64:v2i32 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(725)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_115(N, X86::PABSDrm64, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 731:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v2i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHADDDrm64:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(731)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_116(N, X86::PHADDDrm64, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 737:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v2i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHSUBDrm64:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(737)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_116(N, X86::PHSUBDrm64, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 751:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v2i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PSIGNDrm64:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(751)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i32) {
                SDNode *Result = Emit_116(N, X86::PSIGNDrm64, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 477:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMULUDQrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(477)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMULUDQrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 469:iPTR, VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMADDWDrm:v2i32 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(469)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PMADDWDrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 489:iPTR, VR64:v2i32:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSRLDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(489)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSRLDrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 479:iPTR, VR64:v2i32:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSLLDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(479)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSLLDrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 485:iPTR, VR64:v2i32:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSRADrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(485)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSRADrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 464:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PCMPEQDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(464)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PCMPEQDrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 467:iPTR, VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PCMPGTDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(467)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PCMPGTDrm, MVT::v2i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 477:iPTR, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v2i32:$src1)
      // Emits: (MMX_PMULUDQrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(477)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMULUDQrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 469:iPTR, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PMADDWDrm:v2i32 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(469)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v1i64) {
                  SDNode *Result = Emit_117(N, X86::MMX_PMADDWDrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 688:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTPS2PIrm:v2i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(688)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPS2PIrm, MVT::v2i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 694:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTTPS2PIrm:v2i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(694)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTPS2PIrm, MVT::v2i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 685:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTPD2PIrm:v2i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(685)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPD2PIrm, MVT::v2i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 693:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTTPD2PIrm:v2i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(693)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTPD2PIrm, MVT::v2i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 492:iPTR, VR64:v2i32:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSRLDri:v2i32 VR64:v2i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(492)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSRLDri, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 482:iPTR, VR64:v2i32:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSLLDri:v2i32 VR64:v2i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(482)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSLLDri, MVT::v2i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i32 487:iPTR, VR64:v2i32:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSRADri:v2i32 VR64:v2i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(487)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSRADri, MVT::v2i32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 688:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTPS2PIrr:v2i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(688)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPS2PIrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 694:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTTPS2PIrr:v2i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(694)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTPS2PIrr, MVT::v2i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 685:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTPD2PIrr:v2i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(685)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPD2PIrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 693:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTTPD2PIrr:v2i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(693)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTPD2PIrr, MVT::v2i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 725:iPTR, VR64:v2i32:$src)
      // Emits: (PABSDrr64:v2i32 VR64:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(725)) {
        SDNode *Result = Emit_107(N, X86::PABSDrr64, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 731:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (PHADDDrr64:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(731)) {
        SDNode *Result = Emit_110(N, X86::PHADDDrr64, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 737:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (PHSUBDrr64:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(737)) {
        SDNode *Result = Emit_110(N, X86::PHSUBDrr64, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 751:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (PSIGNDrr64:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(751)) {
        SDNode *Result = Emit_110(N, X86::PSIGNDrr64, MVT::v2i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i32 477:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (MMX_PMULUDQrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(477)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMULUDQrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 469:iPTR, VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Emits: (MMX_PMADDWDrr:v2i32 VR64:v4i16:$src1, VR64:v4i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(469)) {
        SDNode *Result = Emit_110(N, X86::MMX_PMADDWDrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 489:iPTR, VR64:v2i32:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSRLDrr:v2i32 VR64:v2i32:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(489)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSRLDrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 479:iPTR, VR64:v2i32:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSLLDrr:v2i32 VR64:v2i32:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(479)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSLLDrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 485:iPTR, VR64:v2i32:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSRADrr:v2i32 VR64:v2i32:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(485)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSRADrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 464:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (MMX_PCMPEQDrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(464)) {
        SDNode *Result = Emit_110(N, X86::MMX_PCMPEQDrr, MVT::v2i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i32 467:iPTR, VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Emits: (MMX_PCMPGTDrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(467)) {
        SDNode *Result = Emit_110(N, X86::MMX_PCMPGTDrr, MVT::v2i32);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_131(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = 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);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N2, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 640:iPTR, (bitconvert:v8i16 (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))))
      // Emits: (PMOVSXWDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(640)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_load(N1000.getNode()) &&
                    Predicate_loadi64(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v2i64 &&
                      N1000.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_129(N, X86::PMOVSXWDrm, MVT::v4i32, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 646:iPTR, (bitconvert:v8i16 (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))))
      // Emits: (PMOVZXWDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(646)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_load(N1000.getNode()) &&
                    Predicate_loadi64(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v2i64 &&
                      N1000.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_129(N, X86::PMOVZXWDrm, MVT::v4i32, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 636:iPTR, (bitconvert:v16i8 (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))))
      // Emits: (PMOVSXBDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(636)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_loadi32(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v4i32 &&
                      N1000.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_129(N, X86::PMOVSXBDrm, MVT::v4i32, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 642:iPTR, (bitconvert:v16i8 (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))))
      // Emits: (PMOVZXBDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(642)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_loadi32(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v4i32 &&
                      N1000.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_129(N, X86::PMOVZXBDrm, MVT::v4i32, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 640:iPTR, (bitconvert:v8i16 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)))
      // Emits: (PMOVSXWDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(640)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v2i64 &&
                    N100.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_128(N, X86::PMOVSXWDrm, MVT::v4i32, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 646:iPTR, (bitconvert:v8i16 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)))
      // Emits: (PMOVZXWDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(646)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v2i64 &&
                    N100.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_128(N, X86::PMOVZXWDrm, MVT::v4i32, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 636:iPTR, (bitconvert:v16i8 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)))
      // Emits: (PMOVSXBDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(636)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_128(N, X86::PMOVSXBDrm, MVT::v4i32, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 642:iPTR, (bitconvert:v16i8 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)))
      // Emits: (PMOVZXBDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(642)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_128(N, X86::PMOVZXBDrm, MVT::v4i32, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 555:iPTR, VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMADDWDrm:v4i32 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(555)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMADDWDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 565:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSLLDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(565)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSLLDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 577:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSRLDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(577)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSRLDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 573:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSRADrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(573)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSRADrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 550:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPEQDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(550)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PCMPEQDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 553:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPGTDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(553)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PCMPGTDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 726:iPTR, (bitconvert:v4i32 (ld:v4i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PABSDrm128:v4i32 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(726)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v4i32) {
                SDNode *Result = Emit_115(N, X86::PABSDrm128, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 732:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PHADDDrm128:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(732)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i32) {
                SDNode *Result = Emit_116(N, X86::PHADDDrm128, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 734:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>))
      // Emits: (PHADDSWrm128:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(734)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop64(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v8i16) {
                SDNode *Result = Emit_116(N, X86::PHADDSWrm128, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 738:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PHSUBDrm128:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(738)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i32) {
                SDNode *Result = Emit_116(N, X86::PHSUBDrm128, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 752:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSIGNDrm128:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(752)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v4i32) {
                SDNode *Result = Emit_116(N, X86::PSIGNDrm128, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 633:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMINSDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(633)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMINSDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 634:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMINUDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(634)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMINUDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 629:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMAXSDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(629)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMAXSDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 630:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMAXUDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(630)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMAXUDrm, MVT::v4i32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v4i32 555:iPTR, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
  // Emits: (PMADDWDrm:v4i32 VR128:v8i16:$src1, addr:iPTR:$src2)
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(555)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMADDWDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 633:iPTR, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PMINSDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(633)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMINSDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 634:iPTR, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PMINUDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(634)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMINUDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 629:iPTR, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PMAXSDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(629)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMAXSDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 630:iPTR, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PMAXUDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(630)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMAXUDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 640:iPTR, (bitconvert:v8i16 (X86vzload:v2i64 addr:iPTR:$src)))
      // Emits: (PMOVSXWDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 32  cost = 1  size = 3
      if (CN1 == INT64_C(640)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_130(N, X86::PMOVSXWDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 646:iPTR, (bitconvert:v8i16 (X86vzload:v2i64 addr:iPTR:$src)))
      // Emits: (PMOVZXWDrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 32  cost = 1  size = 3
      if (CN1 == INT64_C(646)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_130(N, X86::PMOVZXWDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 513:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTPS2DQrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(513)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPS2DQrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 522:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTTPS2DQrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(522)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTPS2DQrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 511:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTPD2DQrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(511)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPD2DQrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 521:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTTPD2DQrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(521)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTTPD2DQrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(649)) {
        SDValue N1 = N->getOperand(1);

        // Pattern: (intrinsic_wo_chain:v4i32 649:iPTR, VR128:v4i32:$src1, (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
        // Emits: (PMULLDrm_int:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
        // Pattern complexity = 30  cost = 1  size = 3
        {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::LOAD &&
              N2.hasOneUse() &&
              IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
            SDValue Chain2 = N2.getNode()->getOperand(0);
            if (Predicate_unindexedload(N2.getNode()) &&
                Predicate_load(N2.getNode()) &&
                Predicate_memop(N2.getNode())) {
              SDValue N21 = N2.getNode()->getOperand(1);
              SDValue CPTmpN21_0;
              SDValue CPTmpN21_1;
              SDValue CPTmpN21_2;
              SDValue CPTmpN21_3;
              SDValue CPTmpN21_4;
              if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
                SDNode *Result = Emit_109(N, X86::PMULLDrm_int, MVT::v4i32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }

        // Pattern: (intrinsic_wo_chain:v4i32 649:iPTR, (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v4i32:$src1)
        // Emits: (PMULLDrm_int:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
        // Pattern complexity = 30  cost = 1  size = 3
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_131(N, X86::PMULLDrm_int, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 570:iPTR, VR128:v4i32:$src1, (imm:i32):$src2)
      // Emits: (PSLLDri:v4i32 VR128:v4i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(570)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSLLDri, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 582:iPTR, VR128:v4i32:$src1, (imm:i32):$src2)
      // Emits: (PSRLDri:v4i32 VR128:v4i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(582)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSRLDri, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 575:iPTR, VR128:v4i32:$src1, (imm:i32):$src2)
      // Emits: (PSRADri:v4i32 VR128:v4i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(575)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSRADri, MVT::v4i32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4i32 513:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTPS2DQrr:v4i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(513)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPS2DQrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 522:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTTPS2DQrr:v4i32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(522)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTPS2DQrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 511:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTPD2DQrr:v4i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(511)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPD2DQrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 521:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTTPD2DQrr:v4i32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(521)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTTPD2DQrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 555:iPTR, VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Emits: (PMADDWDrr:v4i32 VR128:v8i16:$src1, VR128:v8i16:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(555)) {
        SDNode *Result = Emit_110(N, X86::PMADDWDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 565:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PSLLDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(565)) {
        SDNode *Result = Emit_110(N, X86::PSLLDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 577:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PSRLDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(577)) {
        SDNode *Result = Emit_110(N, X86::PSRLDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 573:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PSRADrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(573)) {
        SDNode *Result = Emit_110(N, X86::PSRADrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 550:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PCMPEQDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(550)) {
        SDNode *Result = Emit_110(N, X86::PCMPEQDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 553:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PCMPGTDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(553)) {
        SDNode *Result = Emit_110(N, X86::PCMPGTDrr, MVT::v4i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 726:iPTR, VR128:v4i32:$src)
      // Emits: (PABSDrr128:v4i32 VR128:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(726)) {
        SDNode *Result = Emit_107(N, X86::PABSDrr128, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 732:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PHADDDrr128:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(732)) {
        SDNode *Result = Emit_110(N, X86::PHADDDrr128, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 734:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PHADDSWrr128:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(734)) {
        SDNode *Result = Emit_110(N, X86::PHADDSWrr128, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 738:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PHSUBDrr128:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(738)) {
        SDNode *Result = Emit_110(N, X86::PHSUBDrr128, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 752:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PSIGNDrr128:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(752)) {
        SDNode *Result = Emit_110(N, X86::PSIGNDrr128, MVT::v4i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4i32 633:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMINSDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(633)) {
        SDNode *Result = Emit_110(N, X86::PMINSDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 634:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMINUDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(634)) {
        SDNode *Result = Emit_110(N, X86::PMINUDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 629:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMAXSDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(629)) {
        SDNode *Result = Emit_110(N, X86::PMAXSDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 630:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMAXUDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(630)) {
        SDNode *Result = Emit_110(N, X86::PMAXUDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 649:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMULLDrr_int:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(649)) {
        SDNode *Result = Emit_110(N, X86::PMULLDrr_int, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 640:iPTR, VR128:v8i16:$src)
      // Emits: (PMOVSXWDrr:v4i32 VR128:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(640)) {
        SDNode *Result = Emit_107(N, X86::PMOVSXWDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 646:iPTR, VR128:v8i16:$src)
      // Emits: (PMOVZXWDrr:v4i32 VR128:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(646)) {
        SDNode *Result = Emit_107(N, X86::PMOVZXWDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 636:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVSXBDrr:v4i32 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(636)) {
        SDNode *Result = Emit_107(N, X86::PMOVSXBDrr, MVT::v4i32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4i32 642:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVZXBDrr:v4i32 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(642)) {
        SDNode *Result = Emit_107(N, X86::PMOVZXBDrr, MVT::v4i32);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_132(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 Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i8);
  SDValue Tmp5 = Transform_BYTE_imm(Tmp4.getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N2, Tmp5);
}
DISABLE_INLINE SDNode *Emit_133(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN21_0, SDValue &CPTmpN21_1, SDValue &CPTmpN21_2, SDValue &CPTmpN21_3, SDValue &CPTmpN21_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Chain2 = N2.getNode()->getOperand(0);
  SDValue N21 = N2.getNode()->getOperand(1);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i8);
  SDValue Tmp5 = Transform_BYTE_imm(Tmp4.getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N2.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4, Tmp5, Chain2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N2.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v1i64(SDNode *N) {
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v1i64 490:iPTR, VR64:v1i64:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSRLQrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(490)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSRLQrm, MVT::v1i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 480:iPTR, VR64:v1i64:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PSLLQrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(480)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_116(N, X86::MMX_PSLLQrm, MVT::v1i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v1i64 729:iPTR, VR64:v1i64:$src1, (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop64>>, (imm:i8):$src3)
  // Emits: (PALIGNR64rm:v1i64 VR64:v8i8:$src1, addr:iPTR:$src2, (BYTE_imm:i8 (imm:i8):$src3))
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(729)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop64(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_133(N, X86::PALIGNR64rm, MVT::v1i64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v1i64 493:iPTR, VR64:v1i64:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSRLQri:v1i64 VR64:v1i64:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(493)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSRLQri, MVT::v1i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v1i64 483:iPTR, VR64:v1i64:$src1, (imm:i32):$src2)
      // Emits: (MMX_PSLLQri:v1i64 VR64:v1i64:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(483)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::MMX_PSLLQri, MVT::v1i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v1i64 729:iPTR, VR64:v1i64:$src1, VR64:v1i64:$src2, (imm:i8):$src3)
  // Emits: (PALIGNR64rr:v1i64 VR64:v8i8:$src1, VR64:v8i8:$src2, (BYTE_imm:i8 (imm:i8):$src3))
  // Pattern complexity = 11  cost = 1  size = 3
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(729)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_132(N, X86::PALIGNR64rr, MVT::v1i64);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v1i64 490:iPTR, VR64:v1i64:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSRLQrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(490)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSRLQrr, MVT::v1i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v1i64 480:iPTR, VR64:v1i64:$src1, VR64:v1i64:$src2)
      // Emits: (MMX_PSLLQrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(480)) {
        SDNode *Result = Emit_110(N, X86::MMX_PSLLQrr, MVT::v1i64);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_134(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 = Transform_BYTE_imm(Tmp3.getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, Tmp4);
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 639:iPTR, (bitconvert:v4i32 (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))))
      // Emits: (PMOVSXDQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(639)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_load(N1000.getNode()) &&
                    Predicate_loadi64(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v2i64 &&
                      N1000.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_129(N, X86::PMOVSXDQrm, MVT::v2i64, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 645:iPTR, (bitconvert:v4i32 (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))))
      // Emits: (PMOVZXDQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(645)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_load(N1000.getNode()) &&
                    Predicate_loadi64(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v2i64 &&
                      N1000.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_129(N, X86::PMOVZXDQrm, MVT::v2i64, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 641:iPTR, (bitconvert:v8i16 (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))))
      // Emits: (PMOVSXWQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(641)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_loadi32(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v4i32 &&
                      N1000.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_129(N, X86::PMOVSXWQrm, MVT::v2i64, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 647:iPTR, (bitconvert:v8i16 (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))))
      // Emits: (PMOVZXWQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(647)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_loadi32(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v4i32 &&
                      N1000.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_129(N, X86::PMOVZXWQrm, MVT::v2i64, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 637:iPTR, (bitconvert:v16i8 (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))))
      // Emits: (PMOVSXBQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(637)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_loadi32(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v4i32 &&
                      N1000.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_129(N, X86::PMOVSXBQrm, MVT::v2i64, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 643:iPTR, (bitconvert:v16i8 (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))))
      // Emits: (PMOVZXBQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 39  cost = 1  size = 3
      if (CN1 == INT64_C(643)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_MOVL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
                N100.hasOneUse()) {
              SDValue N1000 = N100.getNode()->getOperand(0);
              if (N1000.getNode()->getOpcode() == ISD::LOAD &&
                  N1000.hasOneUse() &&
                  IsLegalAndProfitableToFold(N1000.getNode(), N100.getNode(), N)) {
                SDValue Chain1000 = N1000.getNode()->getOperand(0);
                if (Predicate_unindexedload(N1000.getNode()) &&
                    Predicate_loadi32(N1000.getNode())) {
                  SDValue N10001 = N1000.getNode()->getOperand(1);
                  SDValue CPTmpN10001_0;
                  SDValue CPTmpN10001_1;
                  SDValue CPTmpN10001_2;
                  SDValue CPTmpN10001_3;
                  SDValue CPTmpN10001_4;
                  if (SelectAddr(N, N10001, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4) &&
                      N10.getValueType() == MVT::v4i32 &&
                      N1000.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_129(N, X86::PMOVZXBQrm, MVT::v2i64, CPTmpN10001_0, CPTmpN10001_1, CPTmpN10001_2, CPTmpN10001_3, CPTmpN10001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 639:iPTR, (bitconvert:v4i32 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)))
      // Emits: (PMOVSXDQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(639)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v2i64 &&
                    N100.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_128(N, X86::PMOVSXDQrm, MVT::v2i64, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 645:iPTR, (bitconvert:v4i32 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)))
      // Emits: (PMOVZXDQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(645)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v2i64 &&
                    N100.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_128(N, X86::PMOVZXDQrm, MVT::v2i64, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 641:iPTR, (bitconvert:v8i16 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)))
      // Emits: (PMOVSXWQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(641)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_128(N, X86::PMOVSXWQrm, MVT::v2i64, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 647:iPTR, (bitconvert:v8i16 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)))
      // Emits: (PMOVZXWQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(647)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_128(N, X86::PMOVZXWQrm, MVT::v2i64, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 637:iPTR, (bitconvert:v16i8 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi16_anyext>>)))
      // Emits: (PMOVSXBQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(637)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi16_anyext(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_128(N, X86::PMOVSXBQrm, MVT::v2i64, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 643:iPTR, (bitconvert:v16i8 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi16_anyext>>)))
      // Emits: (PMOVZXBQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(643)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi16_anyext(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                    N10.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_128(N, X86::PMOVZXBQrm, MVT::v2i64, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 563:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMULUDQrm:v2i64 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(563)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PMULUDQrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 564:iPTR, VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSADBWrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(564)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSADBWrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 568:iPTR, VR128:v2i64:$src1, (bitconvert:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSLLQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(568)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSLLQrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 580:iPTR, VR128:v2i64:$src1, (bitconvert:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PSRLQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(580)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_116(N, X86::PSRLQrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 623:iPTR, VR128:v2i64:$src1, (bitconvert:v2i64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PCMPEQQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(623)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PCMPEQQrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 648:iPTR, VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMULDQrm:v2i64 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(648)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PMULDQrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v2i64 668:iPTR, VR128:v2i64:$src1, (bitconvert:v2i64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
  // Emits: (PCMPGTQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(668)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4) &&
                  N20.getValueType() == MVT::v16i8) {
                SDNode *Result = Emit_116(N, X86::PCMPGTQrm, MVT::v2i64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v2i64 730:iPTR, VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i8):$src3)
  // Emits: (PALIGNR128rm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2, (BYTE_imm:i8 (imm:i8):$src3))
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(730)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_133(N, X86::PALIGNR128rm, MVT::v2i64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 563:iPTR, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PMULUDQrm:v2i64 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(563)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PMULUDQrm, MVT::v2i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 564:iPTR, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v16i8:$src1)
      // Emits: (PSADBWrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(564)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_117(N, X86::PSADBWrm, MVT::v2i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 623:iPTR, (bitconvert:v2i64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v2i64:$src1)
      // Emits: (PCMPEQQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(623)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PCMPEQQrm, MVT::v2i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 648:iPTR, (bitconvert:v4i32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4i32:$src1)
      // Emits: (PMULDQrm:v2i64 VR128:v4i32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(648)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                if (N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_117(N, X86::PMULDQrm, MVT::v2i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 639:iPTR, (bitconvert:v4i32 (X86vzload:v2i64 addr:iPTR:$src)))
      // Emits: (PMOVSXDQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 32  cost = 1  size = 3
      if (CN1 == INT64_C(639)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_130(N, X86::PMOVSXDQrm, MVT::v2i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 645:iPTR, (bitconvert:v4i32 (X86vzload:v2i64 addr:iPTR:$src)))
      // Emits: (PMOVZXDQrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 32  cost = 1  size = 3
      if (CN1 == INT64_C(645)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_130(N, X86::PMOVZXDQrm, MVT::v2i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 571:iPTR, VR128:v2i64:$src1, (imm:i32):$src2)
      // Emits: (PSLLQri:v2i64 VR128:v2i64:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(571)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSLLQri, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 583:iPTR, VR128:v2i64:$src1, (imm:i32):$src2)
      // Emits: (PSRLQri:v2i64 VR128:v2i64:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(583)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSRLQri, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 566:iPTR, VR128:v2i64:$src1, (imm:i32):$src2)
      // Emits: (PSLLDQri:v2i64 VR128:v16i8:$src1, (BYTE_imm:i32 (imm:i32):$src2))
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(566)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_134(N, X86::PSLLDQri, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 578:iPTR, VR128:v2i64:$src1, (imm:i32):$src2)
      // Emits: (PSRLDQri:v2i64 VR128:v16i8:$src1, (BYTE_imm:i32 (imm:i32):$src2))
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(578)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_134(N, X86::PSRLDQri, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 567:iPTR, VR128:v2i64:$src1, (imm:i32):$src2)
      // Emits: (PSLLDQri:v2i64 VR128:v16i8:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(567)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSLLDQri, MVT::v2i64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2i64 579:iPTR, VR128:v2i64:$src1, (imm:i32):$src2)
      // Emits: (PSRLDQri:v2i64 VR128:v16i8:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(579)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::PSRLDQri, MVT::v2i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v2i64 730:iPTR, VR128:v2i64:$src1, VR128:v2i64:$src2, (imm:i8):$src3)
  // Emits: (PALIGNR128rr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2, (BYTE_imm:i8 (imm:i8):$src3))
  // Pattern complexity = 11  cost = 1  size = 3
  if ((Subtarget->hasSSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(730)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_132(N, X86::PALIGNR128rr, MVT::v2i64);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 563:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMULUDQrr:v2i64 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(563)) {
        SDNode *Result = Emit_110(N, X86::PMULUDQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 564:iPTR, VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Emits: (PSADBWrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(564)) {
        SDNode *Result = Emit_110(N, X86::PSADBWrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 568:iPTR, VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Emits: (PSLLQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(568)) {
        SDNode *Result = Emit_110(N, X86::PSLLQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 580:iPTR, VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Emits: (PSRLQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(580)) {
        SDNode *Result = Emit_110(N, X86::PSRLQrr, MVT::v2i64);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2i64 623:iPTR, VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Emits: (PCMPEQQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(623)) {
        SDNode *Result = Emit_110(N, X86::PCMPEQQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 648:iPTR, VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Emits: (PMULDQrr:v2i64 VR128:v4i32:$src1, VR128:v4i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(648)) {
        SDNode *Result = Emit_110(N, X86::PMULDQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 639:iPTR, VR128:v4i32:$src)
      // Emits: (PMOVSXDQrr:v2i64 VR128:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(639)) {
        SDNode *Result = Emit_107(N, X86::PMOVSXDQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 645:iPTR, VR128:v4i32:$src)
      // Emits: (PMOVZXDQrr:v2i64 VR128:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(645)) {
        SDNode *Result = Emit_107(N, X86::PMOVZXDQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 641:iPTR, VR128:v8i16:$src)
      // Emits: (PMOVSXWQrr:v2i64 VR128:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(641)) {
        SDNode *Result = Emit_107(N, X86::PMOVSXWQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 647:iPTR, VR128:v8i16:$src)
      // Emits: (PMOVZXWQrr:v2i64 VR128:v8i16:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(647)) {
        SDNode *Result = Emit_107(N, X86::PMOVZXWQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 637:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVSXBQrr:v2i64 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(637)) {
        SDNode *Result = Emit_107(N, X86::PMOVSXBQrr, MVT::v2i64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2i64 643:iPTR, VR128:v16i8:$src)
      // Emits: (PMOVZXBQrr:v2i64 VR128:v16i8:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(643)) {
        SDNode *Result = Emit_107(N, X86::PMOVZXBQrr, MVT::v2i64);
        return Result;
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v2i64 668:iPTR, VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (PCMPGTQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE42())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(668)) {
        SDNode *Result = Emit_110(N, X86::PCMPGTQrr, MVT::v2i64);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_135(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPInChain, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4, SDValue &Chain2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Ops0[] = { N1, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  ReplaceUses(SDValue(CPInChain.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_136(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPInChain, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4, SDValue &Chain1) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  ReplaceUses(SDValue(CPInChain.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_137(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = 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 Tmp3 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->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, CPTmpN11_3, CPTmpN11_4, Tmp3, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_138(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPInChain, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4, SDValue &Chain2) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Tmp4 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i32);
  SDValue Ops0[] = { N1, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp4, Chain2 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  ReplaceUses(SDValue(CPInChain.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 611:iPTR, VR128:v4f32:$src1, (bitconvert:v4f32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (imm:i32):$src3)
      // Emits: (BLENDPSrmi:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2, (imm:i32):$src3)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(611)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                SDValue N3 = N->getOperand(3);
                if (N3.getNode()->getOpcode() == ISD::Constant &&
                    N20.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_119(N, X86::BLENDPSrmi, MVT::v4f32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (CN1 == INT64_C(615)) {
        SDValue N1 = N->getOperand(1);

        // Pattern: (intrinsic_wo_chain:v4f32 615:iPTR, VR128:v4f32:$src1, (bitconvert:v4f32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (imm:i32):$src3)
        // Emits: (DPPSrmi:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2, (imm:i32):$src3)
        // Pattern complexity = 36  cost = 1  size = 3
        {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              N2.hasOneUse()) {
            SDValue N20 = N2.getNode()->getOperand(0);
            if (N20.getNode()->getOpcode() == ISD::LOAD &&
                N20.hasOneUse() &&
                IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
              SDValue Chain20 = N20.getNode()->getOperand(0);
              if (Predicate_unindexedload(N20.getNode()) &&
                  Predicate_load(N20.getNode()) &&
                  Predicate_memop(N20.getNode())) {
                SDValue N201 = N20.getNode()->getOperand(1);
                SDValue CPTmpN201_0;
                SDValue CPTmpN201_1;
                SDValue CPTmpN201_2;
                SDValue CPTmpN201_3;
                SDValue CPTmpN201_4;
                if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                  SDValue N3 = N->getOperand(3);
                  if (N3.getNode()->getOpcode() == ISD::Constant &&
                      N20.getValueType() == MVT::v16i8) {
                    SDNode *Result = Emit_119(N, X86::DPPSrmi, MVT::v4f32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                    return Result;
                  }
                }
              }
            }
          }
        }

        // Pattern: (intrinsic_wo_chain:v4f32 615:iPTR, (bitconvert:v4f32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v4f32:$src1, (imm:i32):$src3)
        // Emits: (DPPSrmi:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2, (imm:i32):$src3)
        // Pattern complexity = 36  cost = 1  size = 3
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                SDValue N3 = N->getOperand(3);
                if (N3.getNode()->getOpcode() == ISD::Constant &&
                    N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_126(N, X86::DPPSrmi, MVT::v4f32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 678:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$cc)
      // Emits: (Int_CMPSSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src, (imm:i8):$cc)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(678)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_123(N, X86::Int_CMPSSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 677:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i8):$cc)
      // Emits: (CMPPSrmi:v4f32 VR128:v4f32:$src1, addr:iPTR:$src, (imm:i8):$cc)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(677)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_123(N, X86::CMPPSrmi, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v4f32 510:iPTR, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
  // Emits: (Int_CVTDQ2PSrm:v4f32 addr:iPTR:$src)
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(510)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_115(N, X86::Int_CVTDQ2PSrm, MVT::v4f32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 654:iPTR, (ld:v4f32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i32):$src2)
      // Emits: (ROUNDPSm_Int:v4f32 addr:iPTR:$src1, (imm:i32):$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(654)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDValue N2 = N->getOperand(2);
              if (N2.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_137(N, X86::ROUNDPSm_Int, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 613:iPTR, VR128:v4f32:$src1, (bitconvert:v4f32 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), XMM0:v4f32)
      // Emits: (BLENDVPSrm0:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(613)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                SDValue N3 = N->getOperand(3);
                if (N20.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_121(N, X86::BLENDVPSrm0, MVT::v4f32, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 690:iPTR, VR128:v4f32:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
      // Emits: (Int_CVTSI2SS64rm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(690)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_loadi64(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTSI2SS64rm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 687:iPTR, VR128:v4f32:$src1, (ld:v2i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTPI2PSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(687)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTPI2PSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 689:iPTR, VR128:v4f32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
      // Emits: (Int_CVTSI2SSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(689)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_loadi32(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTSI2SSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 700:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (MAXPSrm_Int:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(700)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::MAXPSrm_Int, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 702:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (MINPSrm_Int:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(702)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::MINPSrm_Int, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 712:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (SQRTPSm_Int:v4f32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(712)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::SQRTPSm_Int, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 709:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (RSQRTPSm_Int:v4f32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(709)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::RSQRTPSm_Int, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 707:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (RCPPSm_Int:v4f32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(707)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::RCPPSm_Int, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 512:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (Int_CVTPD2PSrm:v4f32 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(512)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPD2PSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 517:iPTR, VR128:v4f32:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTSD2SSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(517)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTSD2SSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 602:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (ADDSUBPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(602)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::ADDSUBPSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 604:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (HADDPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(604)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::HADDPSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 606:iPTR, VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (HSUBPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(606)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::HSUBPSrm, MVT::v4f32, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v4f32 656:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2, (imm:i32):$src3)
  // Emits: (ROUNDSSm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2, (imm:i32):$src3)
  // Pattern complexity = 29  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(656)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDValue N3 = N->getOperand(3);
          if (N3.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_138(N, X86::ROUNDSSm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 676:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Emits: (ADDSSrm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(676)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::ADDSSrm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 706:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Emits: (MULSSrm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(706)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::MULSSrm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 716:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Emits: (SUBSSrm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(716)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::SUBSSrm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 697:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Emits: (DIVSSrm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(697)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::DIVSSrm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 701:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Emits: (MAXSSrm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(701)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::MAXSSrm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 703:iPTR, VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Emits: (MINSSrm_Int:v4f32 VR128:v4f32:$src1, sse_load_f32:v4f32:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(703)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::MINSSrm_Int, MVT::v4f32, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 713:iPTR, sse_load_f32:v4f32:$src)
      // Emits: (SQRTSSm_Int:v4f32 sse_load_f32:v4f32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(713)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        SDValue CPInChain;
        SDValue Chain1;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, CPInChain, Chain1)) {
          SDNode *Result = Emit_136(N, X86::SQRTSSm_Int, MVT::v4f32, CPInChain, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain1);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 710:iPTR, sse_load_f32:v4f32:$src)
      // Emits: (RSQRTSSm_Int:v4f32 sse_load_f32:v4f32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(710)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        SDValue CPInChain;
        SDValue Chain1;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, CPInChain, Chain1)) {
          SDNode *Result = Emit_136(N, X86::RSQRTSSm_Int, MVT::v4f32, CPInChain, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain1);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 708:iPTR, sse_load_f32:v4f32:$src)
      // Emits: (RCPSSm_Int:v4f32 sse_load_f32:v4f32:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(708)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        SDValue CPInChain;
        SDValue Chain1;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, CPInChain, Chain1)) {
          SDNode *Result = Emit_136(N, X86::RCPSSm_Int, MVT::v4f32, CPInChain, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain1);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 678:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src, (imm:i8):$cc)
      // Emits: (Int_CMPSSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src, (imm:i8):$cc)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(678)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_122(N, X86::Int_CMPSSrr, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 677:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src, (imm:i8):$cc)
      // Emits: (CMPPSrri:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src, (imm:i8):$cc)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(677)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_122(N, X86::CMPPSrri, MVT::v4f32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 654:iPTR, VR128:v4f32:$src1, (imm:i32):$src2)
      // Emits: (ROUNDPSr_Int:v4f32 VR128:v4f32:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(654)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::ROUNDPSr_Int, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 656:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
      // Emits: (ROUNDSSr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(656)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::ROUNDSSr_Int, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 611:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
      // Emits: (BLENDPSrri:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(611)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::BLENDPSrri, MVT::v4f32);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v4f32 615:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
      // Emits: (DPPSrri:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(615)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::DPPSrri, MVT::v4f32);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v4f32 617:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
  // Emits: (INSERTPSrr:v4f32 VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i32):$src3)
  // Pattern complexity = 11  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(617)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::INSERTPSrr, MVT::v4f32);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 690:iPTR, VR128:v4f32:$src1, GR64:i64:$src2)
      // Emits: (Int_CVTSI2SS64rr:v4f32 VR128:v4f32:$src1, GR64:i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(690)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTSI2SS64rr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 687:iPTR, VR128:v4f32:$src1, VR64:v2i32:$src2)
      // Emits: (Int_CVTPI2PSrr:v4f32 VR128:v4f32:$src1, VR64:v2i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(687)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTPI2PSrr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 689:iPTR, VR128:v4f32:$src1, GR32:i32:$src2)
      // Emits: (Int_CVTSI2SSrr:v4f32 VR128:v4f32:$src1, GR32:i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(689)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTSI2SSrr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 676:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (ADDSSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(676)) {
        SDNode *Result = Emit_110(N, X86::ADDSSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 706:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (MULSSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(706)) {
        SDNode *Result = Emit_110(N, X86::MULSSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 716:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (SUBSSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(716)) {
        SDNode *Result = Emit_110(N, X86::SUBSSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 697:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (DIVSSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(697)) {
        SDNode *Result = Emit_110(N, X86::DIVSSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 701:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (MAXSSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(701)) {
        SDNode *Result = Emit_110(N, X86::MAXSSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 700:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (MAXPSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(700)) {
        SDNode *Result = Emit_110(N, X86::MAXPSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 703:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (MINSSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(703)) {
        SDNode *Result = Emit_110(N, X86::MINSSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 702:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (MINPSrr_Int:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(702)) {
        SDNode *Result = Emit_110(N, X86::MINPSrr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 713:iPTR, VR128:v4f32:$src)
      // Emits: (SQRTSSr_Int:v4f32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(713)) {
        SDNode *Result = Emit_107(N, X86::SQRTSSr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 712:iPTR, VR128:v4f32:$src)
      // Emits: (SQRTPSr_Int:v4f32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(712)) {
        SDNode *Result = Emit_107(N, X86::SQRTPSr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 710:iPTR, VR128:v4f32:$src)
      // Emits: (RSQRTSSr_Int:v4f32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(710)) {
        SDNode *Result = Emit_107(N, X86::RSQRTSSr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 709:iPTR, VR128:v4f32:$src)
      // Emits: (RSQRTPSr_Int:v4f32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(709)) {
        SDNode *Result = Emit_107(N, X86::RSQRTPSr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 708:iPTR, VR128:v4f32:$src)
      // Emits: (RCPSSr_Int:v4f32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(708)) {
        SDNode *Result = Emit_107(N, X86::RCPSSr_Int, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 707:iPTR, VR128:v4f32:$src)
      // Emits: (RCPPSr_Int:v4f32 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(707)) {
        SDNode *Result = Emit_107(N, X86::RCPPSr_Int, MVT::v4f32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 510:iPTR, VR128:v4i32:$src)
      // Emits: (Int_CVTDQ2PSrr:v4f32 VR128:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(510)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTDQ2PSrr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 512:iPTR, VR128:v2f64:$src)
      // Emits: (Int_CVTPD2PSrr:v4f32 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(512)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPD2PSrr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 517:iPTR, VR128:v4f32:$src1, VR128:v2f64:$src2)
      // Emits: (Int_CVTSD2SSrr:v4f32 VR128:v4f32:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(517)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTSD2SSrr, MVT::v4f32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v4f32 602:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (ADDSUBPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(602)) {
        SDNode *Result = Emit_110(N, X86::ADDSUBPSrr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 604:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (HADDPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(604)) {
        SDNode *Result = Emit_110(N, X86::HADDPSrr, MVT::v4f32);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v4f32 606:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Emits: (HSUBPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(606)) {
        SDNode *Result = Emit_110(N, X86::HSUBPSrr, MVT::v4f32);
        return Result;
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v4f32 613:iPTR, VR128:v4f32:$src1, VR128:v4f32:$src2, XMM0:v4f32)
  // Emits: (BLENDVPSrr0:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(613)) {
        SDNode *Result = Emit_120(N, X86::BLENDVPSrr0, MVT::v4f32);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_WO_CHAIN_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 610:iPTR, VR128:v2f64:$src1, (bitconvert:v2f64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (imm:i32):$src3)
      // Emits: (BLENDPDrmi:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2, (imm:i32):$src3)
      // Pattern complexity = 36  cost = 1  size = 3
      if (CN1 == INT64_C(610)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                SDValue N3 = N->getOperand(3);
                if (N3.getNode()->getOpcode() == ISD::Constant &&
                    N20.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_119(N, X86::BLENDPDrmi, MVT::v2f64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (CN1 == INT64_C(614)) {
        SDValue N1 = N->getOperand(1);

        // Pattern: (intrinsic_wo_chain:v2f64 614:iPTR, VR128:v2f64:$src1, (bitconvert:v2f64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (imm:i32):$src3)
        // Emits: (DPPDrmi:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2, (imm:i32):$src3)
        // Pattern complexity = 36  cost = 1  size = 3
        {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
              N2.hasOneUse()) {
            SDValue N20 = N2.getNode()->getOperand(0);
            if (N20.getNode()->getOpcode() == ISD::LOAD &&
                N20.hasOneUse() &&
                IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
              SDValue Chain20 = N20.getNode()->getOperand(0);
              if (Predicate_unindexedload(N20.getNode()) &&
                  Predicate_load(N20.getNode()) &&
                  Predicate_memop(N20.getNode())) {
                SDValue N201 = N20.getNode()->getOperand(1);
                SDValue CPTmpN201_0;
                SDValue CPTmpN201_1;
                SDValue CPTmpN201_2;
                SDValue CPTmpN201_3;
                SDValue CPTmpN201_4;
                if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                  SDValue N3 = N->getOperand(3);
                  if (N3.getNode()->getOpcode() == ISD::Constant &&
                      N20.getValueType() == MVT::v16i8) {
                    SDNode *Result = Emit_119(N, X86::DPPDrmi, MVT::v2f64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                    return Result;
                  }
                }
              }
            }
          }
        }

        // Pattern: (intrinsic_wo_chain:v2f64 614:iPTR, (bitconvert:v2f64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v2f64:$src1, (imm:i32):$src3)
        // Emits: (DPPDrmi:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2, (imm:i32):$src3)
        // Pattern complexity = 36  cost = 1  size = 3
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N2 = N->getOperand(2);
                SDValue N3 = N->getOperand(3);
                if (N3.getNode()->getOpcode() == ISD::Constant &&
                    N10.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_126(N, X86::DPPDrmi, MVT::v2f64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 502:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i8):$cc)
      // Emits: (Int_CMPSDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src, (imm:i8):$cc)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(502)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_123(N, X86::Int_CMPSDrm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 509:iPTR, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (Int_CVTDQ2PDrm:v2f64 addr:iPTR:$src)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(509)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_115(N, X86::Int_CVTDQ2PDrm, MVT::v2f64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 501:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i8):$cc)
      // Emits: (CMPPDrmi:v2f64 VR128:v2f64:$src1, addr:iPTR:$src, (imm:i8):$cc)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(501)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDValue N3 = N->getOperand(3);
              if (N3.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_123(N, X86::CMPPDrmi, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 653:iPTR, (ld:v2f64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i32):$src2)
      // Emits: (ROUNDPDm_Int:v2f64 addr:iPTR:$src1, (imm:i32):$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(653)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDValue N2 = N->getOperand(2);
              if (N2.getNode()->getOpcode() == ISD::Constant) {
                SDNode *Result = Emit_137(N, X86::ROUNDPDm_Int, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 612:iPTR, VR128:v2f64:$src1, (bitconvert:v2f64 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), XMM0:v2f64)
      // Emits: (BLENDVPDrm0:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 33  cost = 1  size = 3
      if (CN1 == INT64_C(612)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N2.hasOneUse()) {
          SDValue N20 = N2.getNode()->getOperand(0);
          if (N20.getNode()->getOpcode() == ISD::LOAD &&
              N20.hasOneUse() &&
              IsLegalAndProfitableToFold(N20.getNode(), N2.getNode(), N)) {
            SDValue Chain20 = N20.getNode()->getOperand(0);
            if (Predicate_unindexedload(N20.getNode()) &&
                Predicate_load(N20.getNode()) &&
                Predicate_memop(N20.getNode())) {
              SDValue N201 = N20.getNode()->getOperand(1);
              SDValue CPTmpN201_0;
              SDValue CPTmpN201_1;
              SDValue CPTmpN201_2;
              SDValue CPTmpN201_3;
              SDValue CPTmpN201_4;
              if (SelectAddr(N, N201, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4)) {
                SDValue N3 = N->getOperand(3);
                if (N20.getValueType() == MVT::v16i8) {
                  SDNode *Result = Emit_121(N, X86::BLENDVPDrm0, MVT::v2f64, CPTmpN201_0, CPTmpN201_1, CPTmpN201_2, CPTmpN201_3, CPTmpN201_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 519:iPTR, VR128:v2f64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
      // Emits: (Int_CVTSI2SD64rm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(519)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_loadi64(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTSI2SD64rm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 686:iPTR, (ld:v2i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTPI2PDrm:v2f64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(686)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPI2PDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 530:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (MAXPDrm_Int:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(530)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::MAXPDrm_Int, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 533:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (MINPDrm_Int:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(533)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::MINPDrm_Int, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 514:iPTR, (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTPS2PDrm:v2f64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(514)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::Int_CVTPS2PDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 518:iPTR, VR128:v2f64:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
      // Emits: (Int_CVTSI2SDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(518)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_loadi32(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTSI2SDrm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 520:iPTR, VR128:v2f64:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (Int_CVTSS2SDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(520)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::Int_CVTSS2SDrm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 589:iPTR, (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (SQRTPDm_Int:v2f64 addr:iPTR:$src)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(589)) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_108(N, X86::SQRTPDm_Int, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 601:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (ADDSUBPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(601)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::ADDSUBPDrm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 603:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (HADDPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(603)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::HADDPDrm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 605:iPTR, VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (HSUBPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 30  cost = 1  size = 3
      if (CN1 == INT64_C(605)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::LOAD &&
            N2.hasOneUse() &&
            IsLegalAndProfitableToFold(N2.getNode(), N, N)) {
          SDValue Chain2 = N2.getNode()->getOperand(0);
          if (Predicate_unindexedload(N2.getNode()) &&
              Predicate_load(N2.getNode()) &&
              Predicate_memop(N2.getNode())) {
            SDValue N21 = N2.getNode()->getOperand(1);
            SDValue CPTmpN21_0;
            SDValue CPTmpN21_1;
            SDValue CPTmpN21_2;
            SDValue CPTmpN21_3;
            SDValue CPTmpN21_4;
            if (SelectAddr(N, N21, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4)) {
              SDNode *Result = Emit_109(N, X86::HSUBPDrm, MVT::v2f64, CPTmpN21_0, CPTmpN21_1, CPTmpN21_2, CPTmpN21_3, CPTmpN21_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v2f64 655:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2, (imm:i32):$src3)
  // Emits: (ROUNDSDm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2, (imm:i32):$src3)
  // Pattern complexity = 29  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(655)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDValue N3 = N->getOperand(3);
          if (N3.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_138(N, X86::ROUNDSDm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 499:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Emits: (ADDSDrm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(499)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::ADDSDrm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 539:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Emits: (MULSDrm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(539)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::MULSDrm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 594:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Emits: (SUBSDrm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(594)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::SUBSDrm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 525:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Emits: (DIVSDrm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(525)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::DIVSDrm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 531:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Emits: (MAXSDrm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(531)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::MAXSDrm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 534:iPTR, VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Emits: (MINSDrm_Int:v2f64 VR128:v2f64:$src1, sse_load_f64:v2f64:$src2)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(534)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        SDValue CPInChain;
        SDValue Chain2;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, CPInChain, Chain2)) {
          SDNode *Result = Emit_135(N, X86::MINSDrm_Int, MVT::v2f64, CPInChain, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain2);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 590:iPTR, sse_load_f64:v2f64:$src)
      // Emits: (SQRTSDm_Int:v2f64 sse_load_f64:v2f64:$src)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(590)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        SDValue CPInChain;
        SDValue Chain1;
        if (SelectScalarSSELoad(N, SDValue(N, 0), N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, CPInChain, Chain1)) {
          SDNode *Result = Emit_136(N, X86::SQRTSDm_Int, MVT::v2f64, CPInChain, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain1);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 502:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src, (imm:i8):$cc)
      // Emits: (Int_CMPSDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src, (imm:i8):$cc)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(502)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_122(N, X86::Int_CMPSDrr, MVT::v2f64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 501:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src, (imm:i8):$cc)
      // Emits: (CMPPDrri:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src, (imm:i8):$cc)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(501)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_122(N, X86::CMPPDrri, MVT::v2f64);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 653:iPTR, VR128:v2f64:$src1, (imm:i32):$src2)
      // Emits: (ROUNDPDr_Int:v2f64 VR128:v2f64:$src1, (imm:i32):$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(653)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_127(N, X86::ROUNDPDr_Int, MVT::v2f64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 655:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i32):$src3)
      // Emits: (ROUNDSDr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i32):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(655)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::ROUNDSDr_Int, MVT::v2f64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 610:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i32):$src3)
      // Emits: (BLENDPDrri:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i32):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(610)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::BLENDPDrri, MVT::v2f64);
          return Result;
        }
      }

      // Pattern: (intrinsic_wo_chain:v2f64 614:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i32):$src3)
      // Emits: (DPPDrri:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i32):$src3)
      // Pattern complexity = 11  cost = 1  size = 3
      if (CN1 == INT64_C(614)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue N3 = N->getOperand(3);
        if (N3.getNode()->getOpcode() == ISD::Constant) {
          SDNode *Result = Emit_118(N, X86::DPPDrri, MVT::v2f64);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 519:iPTR, VR128:v2f64:$src1, GR64:i64:$src2)
      // Emits: (Int_CVTSI2SD64rr:v2f64 VR128:v2f64:$src1, GR64:i64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(519)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTSI2SD64rr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 686:iPTR, VR64:v2i32:$src)
      // Emits: (Int_CVTPI2PDrr:v2f64 VR64:v2i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(686)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPI2PDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 499:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (ADDSDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(499)) {
        SDNode *Result = Emit_110(N, X86::ADDSDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 539:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (MULSDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(539)) {
        SDNode *Result = Emit_110(N, X86::MULSDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 594:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (SUBSDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(594)) {
        SDNode *Result = Emit_110(N, X86::SUBSDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 525:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (DIVSDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(525)) {
        SDNode *Result = Emit_110(N, X86::DIVSDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 531:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (MAXSDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(531)) {
        SDNode *Result = Emit_110(N, X86::MAXSDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 530:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (MAXPDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(530)) {
        SDNode *Result = Emit_110(N, X86::MAXPDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 534:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (MINSDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(534)) {
        SDNode *Result = Emit_110(N, X86::MINSDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 533:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (MINPDrr_Int:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(533)) {
        SDNode *Result = Emit_110(N, X86::MINPDrr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 509:iPTR, VR128:v4i32:$src)
      // Emits: (Int_CVTDQ2PDrr:v2f64 VR128:v4i32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(509)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTDQ2PDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 514:iPTR, VR128:v4f32:$src)
      // Emits: (Int_CVTPS2PDrr:v2f64 VR128:v4f32:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(514)) {
        SDNode *Result = Emit_107(N, X86::Int_CVTPS2PDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 518:iPTR, VR128:v2f64:$src1, GR32:i32:$src2)
      // Emits: (Int_CVTSI2SDrr:v2f64 VR128:v2f64:$src1, GR32:i32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(518)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTSI2SDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 520:iPTR, VR128:v2f64:$src1, VR128:v4f32:$src2)
      // Emits: (Int_CVTSS2SDrr:v2f64 VR128:v2f64:$src1, VR128:v4f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(520)) {
        SDNode *Result = Emit_110(N, X86::Int_CVTSS2SDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 590:iPTR, VR128:v2f64:$src)
      // Emits: (SQRTSDr_Int:v2f64 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(590)) {
        SDNode *Result = Emit_107(N, X86::SQRTSDr_Int, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 589:iPTR, VR128:v2f64:$src)
      // Emits: (SQRTPDr_Int:v2f64 VR128:v2f64:$src)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(589)) {
        SDNode *Result = Emit_107(N, X86::SQRTPDr_Int, MVT::v2f64);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE3())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (intrinsic_wo_chain:v2f64 601:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (ADDSUBPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(601)) {
        SDNode *Result = Emit_110(N, X86::ADDSUBPDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 603:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (HADDPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(603)) {
        SDNode *Result = Emit_110(N, X86::HADDPDrr, MVT::v2f64);
        return Result;
      }

      // Pattern: (intrinsic_wo_chain:v2f64 605:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Emits: (HSUBPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(605)) {
        SDNode *Result = Emit_110(N, X86::HSUBPDrr, MVT::v2f64);
        return Result;
      }
    }
  }

  // Pattern: (intrinsic_wo_chain:v2f64 612:iPTR, VR128:v2f64:$src1, VR128:v2f64:$src2, XMM0:v2f64)
  // Emits: (BLENDVPDrr0:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
  // Pattern complexity = 8  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(612)) {
        SDNode *Result = Emit_120(N, X86::BLENDVPDrr0, MVT::v2f64);
        return Result;
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_139(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
}
SDNode *Select_ISD_INTRINSIC_W_CHAIN_v16i8(SDNode *N) {

  // Pattern: (intrinsic_w_chain:v16i8 527:iPTR, addr:iPTR:$src)
  // Emits: (MOVDQUrm_Int:v16i8 addr:iPTR:$src)
  // Pattern complexity = 26  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    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(527)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_139(N, X86::MOVDQUrm_Int, MVT::v16i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (intrinsic_w_chain:v16i8 607:iPTR, addr:iPTR:$src)
  // Emits: (LDDQUrm:v16i8 addr:iPTR:$src)
  // Pattern complexity = 26  cost = 1  size = 3
  if ((Subtarget->hasSSE3())) {
    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(607)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_139(N, X86::LDDQUrm, MVT::v16i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    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(618)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_139(N, X86::MOVNTDQArm, MVT::v2i64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    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(699)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_139(N, X86::MOVUPSrm_Int, MVT::v4f32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

SDNode *Select_ISD_INTRINSIC_W_CHAIN_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    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(528)) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
          SDNode *Result = Emit_139(N, X86::MOVUPDrm_Int, MVT::v2f64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelectIntrinsic(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_140(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
SDNode *Select_ISD_LOAD_i8(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_unindexedload(N)) {

    // Pattern: (ld:i8 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>
    // Emits: (MOV8rm:i8 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_load(N) &&
        Predicate_loadi8(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOV8rm, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }

    // Pattern: (ld:i8 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
    // Emits: (MOV8rm:i8 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_zextload(N) &&
        Predicate_zextloadi1(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOV8rm, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }

    // Pattern: (ld:i8 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
    // Emits: (MOV8rm:i8 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_extload(N) &&
        Predicate_extloadi1(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOV8rm, MVT::i8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_i16(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_unindexedload(N)) {

    // Pattern: (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>
    // Emits: (MOV16rm:i16 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_loadi16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOV16rm, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }

    // Pattern: (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
    // Emits: (MOVSX16rm8:i16 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_sextload(N) &&
        Predicate_sextloadi8(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVSX16rm8, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
    if (Predicate_zextload(N)) {

      // Pattern: (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
      // Emits: (MOVZX16rm8:i16 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX16rm8, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (MOVZX16rm8:i16 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX16rm8, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
    if (Predicate_extload(N)) {

      // Pattern: (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
      // Emits: (MOVZX16rm8:i16 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX16rm8, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
      // Emits: (MOVZX16rm8:i16 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX16rm8, MVT::i16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_i32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_unindexedload(N)) {
    if (Predicate_load(N)) {

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_gsload>>
      // Emits: (GS_MOV32rm:i32 addr:iPTR:$src)
      // Pattern complexity = 27  cost = 1  size = 3
      if (Predicate_gsload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::GS_MOV32rm, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_fsload>>
      // Emits: (FS_MOV32rm:i32 addr:iPTR:$src)
      // Pattern complexity = 27  cost = 1  size = 3
      if (Predicate_fsload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::FS_MOV32rm, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }

    // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>
    // Emits: (MOV32rm:i32 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_loadi32(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOV32rm, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
    if (Predicate_sextload(N)) {

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
      // Emits: (MOVSX32rm8:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_sextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVSX32rm8, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
      // Emits: (MOVSX32rm16:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_sextloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVSX32rm16, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
    if (Predicate_zextload(N)) {

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
      // Emits: (MOVZX32rm8:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX32rm8, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
      // Emits: (MOVZX32rm16:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX32rm16, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (MOVZX32rm8:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX32rm8, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
    if (Predicate_extload(N)) {

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
      // Emits: (MOVZX32rm8:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX32rm8, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
      // Emits: (MOVZX32rm8:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX32rm8, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
      // Emits: (MOVZX32rm16:i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX32rm16, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }

    // Pattern: (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
    // Emits: (MOVSX32rm16:i32 addr:iPTR:$dst)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_sextload(N) &&
        Predicate_sextloadi16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVSX32rm16, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }

    // Pattern: (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
    // Emits: (MOVZX32rm16:i32 addr:iPTR:$dst)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_zextload(N) &&
        Predicate_zextloadi16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVZX32rm16, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }

    // Pattern: (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
    // Emits: (MOVZX32rm16:i32 addr:iPTR:$dst)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_extload(N) &&
        Predicate_extloadi16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVZX32rm16, MVT::i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_141(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp0 = CurDAG->getTargetConstant(0x0ULL, MVT::i64);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, MVT::Other, Ops0, 6), 0);
  Chain = SDValue(Tmp2.getNode(), 1);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs1 = MF->allocateMemRefsArray(1);
  MemRefs1[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops1[] = { Tmp0, Tmp2, Tmp3, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc1, VT1, MVT::Other, Ops1, 4);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs1, MemRefs1 + 1);
  return ResNode;
}
SDNode *Select_ISD_LOAD_i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_unindexedload(N)) {
    if (Predicate_load(N)) {

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_gsload>>
      // Emits: (MOV64GSrm:i64 addr:iPTR:$src)
      // Pattern complexity = 27  cost = 1  size = 3
      if (Predicate_gsload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOV64GSrm, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_fsload>>
      // Emits: (MOV64FSrm:i64 addr:iPTR:$src)
      // Pattern complexity = 27  cost = 1  size = 3
      if (Predicate_fsload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOV64FSrm, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (MOV64rm:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOV64rm, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
    if (Predicate_sextload(N)) {

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi8>>
      // Emits: (MOVSX64rm8:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_sextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVSX64rm8, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
      // Emits: (MOVSX64rm16:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_sextloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVSX64rm16, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi32>>
      // Emits: (MOVSX64rm32:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_sextloadi32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVSX64rm32, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
    if (Predicate_zextload(N)) {

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi8>>
      // Emits: (MOVZX64rm8:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm8, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
      // Emits: (MOVZX64rm16:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm16, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi32>>
      // Emits: (MOVZX64rm32:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm32, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi1>>
      // Emits: (MOVZX64rm8:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_zextloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm8, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
    if (Predicate_extload(N)) {

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi1>>
      // Emits: (MOVZX64rm8:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi1(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm8, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>
      // Emits: (MOVZX64rm8:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi8(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm8, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
      // Emits: (MOVZX64rm16:i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm16, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }

    // Pattern: (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_sextload>><<P:Predicate_sextloadi16>>
    // Emits: (MOVSX64rm16:i64 addr:iPTR:$dst)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_sextload(N) &&
        Predicate_sextloadi16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVSX64rm16, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }

    // Pattern: (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_zextload>><<P:Predicate_zextloadi16>>
    // Emits: (MOVZX64rm16:i64 addr:iPTR:$dst)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_zextload(N) &&
        Predicate_zextloadi16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVZX64rm16, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
    if (Predicate_extload(N)) {

      // Pattern: (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>
      // Emits: (MOVZX64rm16:i64 addr:iPTR:$dst)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_extloadi16(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVZX64rm16, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi32>>
      // Emits: (SUBREG_TO_REG:i64 0:i64, (MOV32rm:i32 addr:iPTR:$src), 4:i32)
      // Pattern complexity = 22  cost = 2  size = 3
      if (Predicate_extloadi32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_141(N, X86::MOV32rm, TargetOpcode::SUBREG_TO_REG, MVT::i32, MVT::i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_f32(SDNode *N) {

  // Pattern: (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>
  // Emits: (LD_Fp32m:f32 addr:iPTR:$src)
  // Pattern complexity = 22  cost = 1  size = 0
  if ((!Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N) &&
        Predicate_loadf32(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::LD_Fp32m, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {

      // Pattern: (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>
      // Emits: (MOVSSrm:f32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_loadf32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVSSrm, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_alignedload>>
      // Emits: (FsMOVAPSrm:f32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::FsMOVAPSrm, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_142(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  SDValue Tmp1(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, MVT::Other, Ops0, 6), 0);
  Chain = SDValue(Tmp1.getNode(), 1);
  MachineSDNode::mmo_iterator MemRefs1 = MF->allocateMemRefsArray(1);
  MemRefs1[0] = cast<MemSDNode>(N)->getMemOperand();
  SDNode *ResNode = CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs1, MemRefs1 + 1);
  ReplaceUses(SDValue(N, 1), Chain);
  return ResNode;
}
SDNode *Select_ISD_LOAD_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N)) {

      // Pattern: (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>
      // Emits: (LD_Fp64m:f64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 0
      if (Predicate_load(N) &&
          Predicate_loadf64(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::LD_Fp64m, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>
      // Emits: (LD_Fp32m64:f64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 0
      if (Predicate_extload(N) &&
          Predicate_extloadf32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::LD_Fp32m64, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>
  // Emits: (MOVSDrm:f64 addr:iPTR:$src)
  // Pattern complexity = 22  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N) &&
        Predicate_loadf64(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVSDrm, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  // Pattern: (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>
  // Emits: (CVTSS2SDrm:f64 addr:iPTR:$src)
  // Pattern complexity = 22  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) && (OptForSize)) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_extload(N) &&
        Predicate_extloadf32(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::CVTSS2SDrm, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  // Pattern: (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_alignedload>>
  // Emits: (FsMOVAPDrm:f64 addr:iPTR:$src)
  // Pattern complexity = 22  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N) &&
        Predicate_alignedload(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::FsMOVAPDrm, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  // Pattern: (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>
  // Emits: (CVTSS2SDrr:f64 (MOVSSrm:f32 addr:iPTR:$src))
  // Pattern complexity = 22  cost = 2  size = 6
  if ((Subtarget->hasSSE2()) && (!OptForSize)) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_extload(N) &&
        Predicate_extloadf32(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_142(N, X86::MOVSSrm, X86::CVTSS2SDrr, MVT::f32, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_f80(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  if (Predicate_unindexedload(N)) {

    // Pattern: (ld:f80 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf80>>
    // Emits: (LD_Fp80m:f80 addr:iPTR:$src)
    // Pattern complexity = 22  cost = 1  size = 0
    if (Predicate_load(N) &&
        Predicate_loadf80(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::LD_Fp80m, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
    if (Predicate_extload(N)) {

      // Pattern: (ld:f80 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf64>>
      // Emits: (LD_Fp64m80:f80 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 0
      if (Predicate_extloadf64(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::LD_Fp64m80, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:f80 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadf32>>
      // Emits: (LD_Fp32m80:f80 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 0
      if (Predicate_extloadf32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::LD_Fp32m80, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {

      // Pattern: (ld:v4i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_alignedload>>
      // Emits: (MOVAPSrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVAPSrm, MVT::v4i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:v4i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (MOVUPSrm:v4i32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVUPSrm, MVT::v4i32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_v1i64(SDNode *N) {
  if ((Subtarget->hasMMX())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MMX_MOVQ64rm, MVT::v1i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {

      // Pattern: (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_alignedload>>
      // Emits: (MOVAPSrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVAPSrm, MVT::v2i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (MOVUPSrm:v2i64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVUPSrm, MVT::v2i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {

      // Pattern: (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_alignedload>>
      // Emits: (MOVAPSrm:v4f32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVAPSrm, MVT::v4f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (MOVUPSrm:v4f32 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVUPSrm, MVT::v4f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_LOAD_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedload(N) &&
        Predicate_load(N)) {

      // Pattern: (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_alignedload>>
      // Emits: (MOVAPDrm:v2f64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedload(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue CPTmpN1_0;
        SDValue CPTmpN1_1;
        SDValue CPTmpN1_2;
        SDValue CPTmpN1_3;
        SDValue CPTmpN1_4;
        if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
          SDNode *Result = Emit_140(N, X86::MOVAPDrm, MVT::v2f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
          return Result;
        }
      }

      // Pattern: (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>
      // Emits: (MOVUPDrm:v2f64 addr:iPTR:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue CPTmpN1_0;
      SDValue CPTmpN1_1;
      SDValue CPTmpN1_2;
      SDValue CPTmpN1_3;
      SDValue CPTmpN1_4;
      if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
        SDNode *Result = Emit_140(N, X86::MOVUPDrm, MVT::v2f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_143(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 N5 = N->getOperand(5);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Chain);
}
SDNode *Select_ISD_MEMBARRIER(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (membarrier:isVoid 0:i8, 0:i8, 0:i8, 1:i8, 1:i8)
      // Emits: (SFENCE:isVoid)
      // Pattern complexity = 28  cost = 1  size = 3
      if (CN1 == INT64_C(0)) {
        SDValue N2 = N->getOperand(2);
        ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N2.getNode());
        if (Tmp2) {
          int64_t CN3 = Tmp2->getSExtValue();
          if (CN3 == INT64_C(0)) {
            SDValue N3 = N->getOperand(3);
            ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N3.getNode());
            if (Tmp4) {
              int64_t CN5 = Tmp4->getSExtValue();
              if (CN5 == INT64_C(0)) {
                SDValue N4 = N->getOperand(4);
                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N4.getNode());
                if (Tmp6) {
                  int64_t CN7 = Tmp6->getSExtValue();
                  if (CN7 == INT64_C(1)) {
                    SDValue N5 = N->getOperand(5);
                    ConstantSDNode *Tmp8 = dyn_cast<ConstantSDNode>(N5.getNode());
                    if (Tmp8) {
                      int64_t CN9 = Tmp8->getSExtValue();
                      if (CN9 == INT64_C(1) &&
                          N1.getValueType() == MVT::i8) {
                        SDNode *Result = Emit_143(N, X86::SFENCE);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (membarrier:isVoid 1:i8, 0:i8, 0:i8, 0:i8, 1:i8)
      // Emits: (LFENCE:isVoid)
      // Pattern complexity = 28  cost = 1  size = 3
      if (CN1 == INT64_C(1)) {
        SDValue N2 = N->getOperand(2);
        ConstantSDNode *Tmp2 = dyn_cast<ConstantSDNode>(N2.getNode());
        if (Tmp2) {
          int64_t CN3 = Tmp2->getSExtValue();
          if (CN3 == INT64_C(0)) {
            SDValue N3 = N->getOperand(3);
            ConstantSDNode *Tmp4 = dyn_cast<ConstantSDNode>(N3.getNode());
            if (Tmp4) {
              int64_t CN5 = Tmp4->getSExtValue();
              if (CN5 == INT64_C(0)) {
                SDValue N4 = N->getOperand(4);
                ConstantSDNode *Tmp6 = dyn_cast<ConstantSDNode>(N4.getNode());
                if (Tmp6) {
                  int64_t CN7 = Tmp6->getSExtValue();
                  if (CN7 == INT64_C(0)) {
                    SDValue N5 = N->getOperand(5);
                    ConstantSDNode *Tmp8 = dyn_cast<ConstantSDNode>(N5.getNode());
                    if (Tmp8) {
                      int64_t CN9 = Tmp8->getSExtValue();
                      if (CN9 == INT64_C(1) &&
                          N1.getValueType() == MVT::i8) {
                        SDNode *Result = Emit_143(N, X86::LFENCE);
                        return Result;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if (N1.getNode()->getOpcode() == ISD::Constant) {
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDValue N3 = N->getOperand(3);
      if (N3.getNode()->getOpcode() == ISD::Constant) {
        SDValue N4 = N->getOperand(4);
        if (N4.getNode()->getOpcode() == ISD::Constant) {
          SDValue N5 = N->getOperand(5);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N5.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();

            // Pattern: (membarrier:isVoid (imm:i8):$ll, (imm:i8):$ls, (imm:i8):$sl, (imm:i8):$ss, 0:i8)
            // Emits: (NOOP:isVoid)
            // Pattern complexity = 20  cost = 1  size = 3
            if (CN1 == INT64_C(0) &&
                N1.getValueType() == MVT::i8) {
              SDNode *Result = Emit_143(N, X86::NOOP);
              return Result;
            }

            // Pattern: (membarrier:isVoid (imm:i8):$ll, (imm:i8):$ls, (imm:i8):$sl, (imm:i8):$ss, 1:i8)
            // Emits: (MFENCE:isVoid)
            // Pattern complexity = 20  cost = 1  size = 3
            if (CN1 == INT64_C(1) &&
                N1.getValueType() == MVT::i8) {
              SDNode *Result = Emit_143(N, X86::MFENCE);
              return Result;
            }
          }
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_144(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::AL, N0, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i8, MVT::i32, N1, InFlag);
}
DISABLE_INLINE SDNode *Emit_145(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain1, N->getDebugLoc(), X86::AL, N0, InFlag).getNode();
  Chain1 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i8, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_ISD_MUL_i8(SDNode *N) {

  // Pattern: (mul:i8 AL:i8, (ld:i8 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
  // Emits: (MUL8m:isVoid addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadi8(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_145(N, X86::MUL8m, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (mul:i8 AL:i8, GR8:i8:$src)
  // Emits: (MUL8r:isVoid GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_144(N, X86::MUL8r);
  return Result;
}

DISABLE_INLINE SDNode *Emit_146(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_ISD_MUL_i16(SDNode *N) {
  {
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant) {

            // Pattern: (mul:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Emits: (IMUL16rmi8:i16 addr:iPTR:$src1, (imm:i16):$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i16immSExt8(N1.getNode())) {
              SDNode *Result = Emit_146(N, X86::IMUL16rmi8, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }

            // Pattern: (mul:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16):$src2)
            // Emits: (IMUL16rmi:i16 addr:iPTR:$src1, (imm:i16):$src2)
            // Pattern complexity = 28  cost = 1  size = 3
            SDNode *Result = Emit_146(N, X86::IMUL16rmi, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (IMUL16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::IMUL16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src1)
    // Emits: (IMUL16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::IMUL16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (mul:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (IMUL16rri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::IMUL16rri8, MVT::i16);
        return Result;
      }

      // Pattern: (mul:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (IMUL16rri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::IMUL16rri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (mul:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (IMUL16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::IMUL16rr, MVT::i16);
  return Result;
}

DISABLE_INLINE SDNode *Emit_147(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  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();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_ISD_MUL_i32(SDNode *N) {
  {
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant) {

            // Pattern: (mul:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Emits: (IMUL32rmi8:i32 addr:iPTR:$src1, (imm:i32):$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i32immSExt8(N1.getNode())) {
              SDNode *Result = Emit_147(N, X86::IMUL32rmi8, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }

            // Pattern: (mul:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32):$src2)
            // Emits: (IMUL32rmi:i32 addr:iPTR:$src1, (imm:i32):$src2)
            // Pattern complexity = 28  cost = 1  size = 3
            SDNode *Result = Emit_147(N, X86::IMUL32rmi, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (IMUL32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::IMUL32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src1)
    // Emits: (IMUL32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::IMUL32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (mul:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (IMUL32rri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::IMUL32rri8, MVT::i32);
        return Result;
      }

      // Pattern: (mul:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (IMUL32rri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::IMUL32rri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (mul:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (IMUL32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::IMUL32rr, MVT::i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_148(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_ISD_MUL_i64(SDNode *N) {
  {
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant) {

            // Pattern: (mul:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
            // Emits: (IMUL64rmi8:i64 addr:iPTR:$src1, (imm:i64):$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i64immSExt8(N1.getNode())) {
              SDNode *Result = Emit_148(N, X86::IMUL64rmi8, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }

            // Pattern: (mul:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
            // Emits: (IMUL64rmi32:i64 addr:iPTR:$src1, (imm:i64):$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i64immSExt32(N1.getNode())) {
              SDNode *Result = Emit_148(N, X86::IMUL64rmi32, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (mul:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (IMUL64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::IMUL64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (IMUL64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::IMUL64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: lea64addr:i64:$src
  // Emits: (LEA64r:i64 lea64addr:i64:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (mul:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (IMUL64rri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::IMUL64rri8, MVT::i64);
        return Result;
      }

      // Pattern: (mul:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (IMUL64rri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::IMUL64rri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (mul:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (IMUL64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::IMUL64rr, MVT::i64);
  return Result;
}

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

    // Pattern: (mul:v16i8 VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PMULLDrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PMULLDrm, MVT::v16i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (mul:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v16i8:$src1)
    // Emits: (PMULLDrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PMULLDrm, MVT::v16i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (mul:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
      // Emits: (MMX_PMULLWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_16(N, X86::MMX_PMULLWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (mul:v4i16 (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
      // Emits: (MMX_PMULLWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_17(N, X86::MMX_PMULLWrm, MVT::v4i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (mul:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Emits: (MMX_PMULLWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PMULLWrr, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (mul:v8i16 VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
      // Emits: (PMULLWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N1.hasOneUse()) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::LOAD &&
              N10.hasOneUse() &&
              IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
            SDValue Chain10 = N10.getNode()->getOperand(0);
            if (Predicate_unindexedload(N10.getNode()) &&
                Predicate_load(N10.getNode()) &&
                Predicate_memop(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_16(N, X86::PMULLWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (mul:v8i16 (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), VR128:v8i16:$src1)
      // Emits: (PMULLWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
      // Pattern complexity = 28  cost = 1  size = 3
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_17(N, X86::PMULLWrm, MVT::v8i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (mul:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Emits: (PMULLWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PMULLWrr, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_MUL_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDNode *Result = Emit_15(N, X86::PMULLDrr, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_OR_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (OR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src1)
    // Emits: (OR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (or:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (OR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::OR8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (or:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (OR8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR8rr, MVT::i8);
  return Result;
}

DISABLE_INLINE SDNode *Emit_149(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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N0.getNode()->getDebugLoc(), X86::CL, N01, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N10, InFlag);
}
DISABLE_INLINE SDNode *Emit_150(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 N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N01.getNode()->getDebugLoc(), X86::CX, N010, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N10, InFlag);
}
DISABLE_INLINE SDNode *Emit_151(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(((unsigned char) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N10, Tmp2);
}
DISABLE_INLINE SDNode *Emit_152(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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N01.getNode()->getDebugLoc(), X86::CL, N011, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N10, N00, InFlag);
}
DISABLE_INLINE SDNode *Emit_153(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 N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N010.getNode()->getDebugLoc(), X86::CX, N0101, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N10, N00, InFlag);
}
DISABLE_INLINE SDNode *Emit_154(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(((unsigned char) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N10, N00, Tmp2);
}
SDNode *Select_ISD_OR_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (OR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src1)
    // Emits: (OR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (or:i16 (srl:i16 GR16:i16:$src1, (trunc:i8 CX:i16:$amt)), (shl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt))))
    // Emits: (SHRD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 23  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::TRUNCATE) {
        SDValue N010 = N01.getNode()->getOperand(0);
        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::TRUNCATE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::SUB) {
              SDValue N1100 = N110.getNode()->getOperand(0);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1100.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1101 = N110.getNode()->getOperand(1);
                  if (N010 == N1101 &&
                      N01.getValueType() == MVT::i8 &&
                      N010.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8 &&
                      N110.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_150(N, X86::SHRD16rrCL, MVT::i16);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SHL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::TRUNCATE) {
        SDValue N010 = N01.getNode()->getOperand(0);

        // Pattern: (or:i16 (shl:i16 GR16:i16:$src1, (trunc:i8 CX:i16:$amt)), (srl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt))))
        // Emits: (SHLD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
        // Pattern complexity = 23  cost = 1  size = 3
        {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRL) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::TRUNCATE) {
              SDValue N110 = N11.getNode()->getOperand(0);
              if (N110.getNode()->getOpcode() == ISD::SUB) {
                SDValue N1100 = N110.getNode()->getOperand(0);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1100.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(16)) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    if (N010 == N1101 &&
                        N01.getValueType() == MVT::i8 &&
                        N010.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8 &&
                        N110.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_150(N, X86::SHLD16rrCL, MVT::i16);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (or:i16 (shl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt))), (srl:i16 GR16:i16:$src1, (trunc:i8 CX:i16:$amt)))
        // Emits: (SHRD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
        // Pattern complexity = 23  cost = 1  size = 3
        if (N010.getNode()->getOpcode() == ISD::SUB) {
          SDValue N0100 = N010.getNode()->getOperand(0);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0100.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N0101 = N010.getNode()->getOperand(1);
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::SRL) {
                SDValue N10 = N1.getNode()->getOperand(0);
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::TRUNCATE) {
                  SDValue N110 = N11.getNode()->getOperand(0);
                  if (N0101 == N110 &&
                      N01.getValueType() == MVT::i8 &&
                      N010.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8 &&
                      N110.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_153(N, X86::SHRD16rrCL, MVT::i16);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);

      // Pattern: (or:i16 (srl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt))), (shl:i16 GR16:i16:$src1, (trunc:i8 CX:i16:$amt)))
      // Emits: (SHLD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
      // Pattern complexity = 23  cost = 1  size = 3
      if (N01.getNode()->getOpcode() == ISD::TRUNCATE) {
        SDValue N010 = N01.getNode()->getOperand(0);
        if (N010.getNode()->getOpcode() == ISD::SUB) {
          SDValue N0100 = N010.getNode()->getOperand(0);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0100.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N0101 = N010.getNode()->getOperand(1);
              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::TRUNCATE) {
                  SDValue N110 = N11.getNode()->getOperand(0);
                  if (N0101 == N110 &&
                      N01.getValueType() == MVT::i8 &&
                      N010.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8 &&
                      N110.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_153(N, X86::SHLD16rrCL, MVT::i16);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (or:i16 (srl:i16 GR16:i16:$src1, CL:i8:$amt), (shl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt)))
      // Emits: (SHRD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
      // Pattern complexity = 17  cost = 1  size = 3
      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::SUB) {
          SDValue N110 = N11.getNode()->getOperand(0);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N110.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(16)) {
              SDValue N111 = N11.getNode()->getOperand(1);
              if (N01 == N111 &&
                  N01.getValueType() == MVT::i8 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_149(N, X86::SHRD16rrCL, MVT::i16);
                return Result;
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SHL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);

      // Pattern: (or:i16 (shl:i16 GR16:i16:$src1, CL:i8:$amt), (srl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt)))
      // Emits: (SHLD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
      // Pattern complexity = 17  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SUB) {
            SDValue N110 = N11.getNode()->getOperand(0);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N110.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(16)) {
                SDValue N111 = N11.getNode()->getOperand(1);
                if (N01 == N111 &&
                    N01.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_149(N, X86::SHLD16rrCL, MVT::i16);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (or:i16 (shl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt)), (srl:i16 GR16:i16:$src1, CL:i8:$amt))
      // Emits: (SHRD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
      // Pattern complexity = 17  cost = 1  size = 3
      if (N01.getNode()->getOpcode() == ISD::SUB) {
        SDValue N010 = N01.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N010.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N011 = N01.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::SRL) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N011 == N11 &&
                  N01.getValueType() == MVT::i8 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_152(N, X86::SHRD16rrCL, MVT::i16);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (or:i16 (srl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt)), (shl:i16 GR16:i16:$src1, CL:i8:$amt))
    // Emits: (SHLD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 17  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SUB) {
        SDValue N010 = N01.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N010.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(16)) {
            SDValue N011 = N01.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::SHL) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N011 == N11 &&
                  N01.getValueType() == MVT::i8 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_152(N, X86::SHLD16rrCL, MVT::i16);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i16 (srl:i16 GR16:i16:$src1, (imm:i8):$amt1), (shl:i16 GR16:i16:$src2, (imm:i8):$amt2))<<P:Predicate_shrd>>
  // Emits: (SHRD16rri8:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shrd(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        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 &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_151(N, X86::SHRD16rri8, MVT::i16);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i16 (shl:i16 GR16:i16:$src1, (imm:i8):$amt1), (srl:i16 GR16:i16:$src2, (imm:i8):$amt2))<<P:Predicate_shld>>
  // Emits: (SHLD16rri8:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shld(N)) {
    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) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_151(N, X86::SHLD16rri8, MVT::i16);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i16 (shl:i16 GR16:i16:$src2, (imm:i8):$amt2), (srl:i16 GR16:i16:$src1, (imm:i8):$amt1))<<P:Predicate_shrd>>
  // Emits: (SHRD16rri8:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shrd(N)) {
    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) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_154(N, X86::SHRD16rri8, MVT::i16);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i16 (srl:i16 GR16:i16:$src2, (imm:i8):$amt2), (shl:i16 GR16:i16:$src1, (imm:i8):$amt1))<<P:Predicate_shld>>
  // Emits: (SHLD16rri8:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shld(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        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 &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_154(N, X86::SHLD16rri8, MVT::i16);
            return Result;
          }
        }
      }
    }
  }
  if (Predicate_or_is_add(N)) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (or:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)<<P:Predicate_or_is_add>>
        // Emits: (ADD16ri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (Predicate_i16immSExt8(N1.getNode())) {
          SDNode *Result = Emit_5(N, X86::ADD16ri8, MVT::i16);
          return Result;
        }

        // Pattern: (or:i16 GR16:i16:$src1, (imm:i16):$src2)<<P:Predicate_or_is_add>>
        // Emits: (ADD16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
        // Pattern complexity = 12  cost = 1  size = 3
        SDNode *Result = Emit_5(N, X86::ADD16ri, MVT::i16);
        return Result;
      }
    }

    // Pattern: (or:i16 GR16:i16:$src1, GR16:i16:$src2)<<P:Predicate_or_is_add>>
    // Emits: (ADD16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 9  cost = 1  size = 3
    SDNode *Result = Emit_1(N, X86::ADD16rr, MVT::i16);
    return Result;
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (or:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (OR16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::OR16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (or:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (OR16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::OR16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (or:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (OR16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR16rr, MVT::i16);
  return Result;
}

DISABLE_INLINE SDNode *Emit_155(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 N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N01.getNode()->getDebugLoc(), X86::ECX, N010, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00, N10, InFlag);
}
DISABLE_INLINE SDNode *Emit_156(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 N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N010.getNode()->getDebugLoc(), X86::ECX, N0101, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N10, N00, InFlag);
}
SDNode *Select_ISD_OR_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (OR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src1)
    // Emits: (OR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (or:i32 (srl:i32 GR32:i32:$src1, (trunc:i8 ECX:i32:$amt)), (shl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt))))
    // Emits: (SHRD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 23  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::TRUNCATE) {
        SDValue N010 = N01.getNode()->getOperand(0);
        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::TRUNCATE) {
            SDValue N110 = N11.getNode()->getOperand(0);
            if (N110.getNode()->getOpcode() == ISD::SUB) {
              SDValue N1100 = N110.getNode()->getOperand(0);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1100.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(32)) {
                  SDValue N1101 = N110.getNode()->getOperand(1);
                  if (N010 == N1101 &&
                      N01.getValueType() == MVT::i8 &&
                      N010.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8 &&
                      N110.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_155(N, X86::SHRD32rrCL, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SHL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::TRUNCATE) {
        SDValue N010 = N01.getNode()->getOperand(0);

        // Pattern: (or:i32 (shl:i32 GR32:i32:$src1, (trunc:i8 ECX:i32:$amt)), (srl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt))))
        // Emits: (SHLD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
        // Pattern complexity = 23  cost = 1  size = 3
        {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::SRL) {
            SDValue N10 = N1.getNode()->getOperand(0);
            SDValue N11 = N1.getNode()->getOperand(1);
            if (N11.getNode()->getOpcode() == ISD::TRUNCATE) {
              SDValue N110 = N11.getNode()->getOperand(0);
              if (N110.getNode()->getOpcode() == ISD::SUB) {
                SDValue N1100 = N110.getNode()->getOperand(0);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1100.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(32)) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    if (N010 == N1101 &&
                        N01.getValueType() == MVT::i8 &&
                        N010.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8 &&
                        N110.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_155(N, X86::SHLD32rrCL, MVT::i32);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (or:i32 (shl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt))), (srl:i32 GR32:i32:$src1, (trunc:i8 ECX:i32:$amt)))
        // Emits: (SHRD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
        // Pattern complexity = 23  cost = 1  size = 3
        if (N010.getNode()->getOpcode() == ISD::SUB) {
          SDValue N0100 = N010.getNode()->getOperand(0);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0100.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(32)) {
              SDValue N0101 = N010.getNode()->getOperand(1);
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::SRL) {
                SDValue N10 = N1.getNode()->getOperand(0);
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::TRUNCATE) {
                  SDValue N110 = N11.getNode()->getOperand(0);
                  if (N0101 == N110 &&
                      N01.getValueType() == MVT::i8 &&
                      N010.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8 &&
                      N110.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_156(N, X86::SHRD32rrCL, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);

      // Pattern: (or:i32 (srl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt))), (shl:i32 GR32:i32:$src1, (trunc:i8 ECX:i32:$amt)))
      // Emits: (SHLD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
      // Pattern complexity = 23  cost = 1  size = 3
      if (N01.getNode()->getOpcode() == ISD::TRUNCATE) {
        SDValue N010 = N01.getNode()->getOperand(0);
        if (N010.getNode()->getOpcode() == ISD::SUB) {
          SDValue N0100 = N010.getNode()->getOperand(0);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0100.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(32)) {
              SDValue N0101 = N010.getNode()->getOperand(1);
              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::TRUNCATE) {
                  SDValue N110 = N11.getNode()->getOperand(0);
                  if (N0101 == N110 &&
                      N01.getValueType() == MVT::i8 &&
                      N010.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8 &&
                      N110.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_156(N, X86::SHLD32rrCL, MVT::i32);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (or:i32 (srl:i32 GR32:i32:$src1, CL:i8:$amt), (shl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt)))
      // Emits: (SHRD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
      // Pattern complexity = 17  cost = 1  size = 3
      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::SUB) {
          SDValue N110 = N11.getNode()->getOperand(0);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N110.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(32)) {
              SDValue N111 = N11.getNode()->getOperand(1);
              if (N01 == N111 &&
                  N01.getValueType() == MVT::i8 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_149(N, X86::SHRD32rrCL, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::SHL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);

      // Pattern: (or:i32 (shl:i32 GR32:i32:$src1, CL:i8:$amt), (srl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt)))
      // Emits: (SHLD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
      // Pattern complexity = 17  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::SUB) {
            SDValue N110 = N11.getNode()->getOperand(0);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N110.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(32)) {
                SDValue N111 = N11.getNode()->getOperand(1);
                if (N01 == N111 &&
                    N01.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_149(N, X86::SHLD32rrCL, MVT::i32);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (or:i32 (shl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt)), (srl:i32 GR32:i32:$src1, CL:i8:$amt))
      // Emits: (SHRD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
      // Pattern complexity = 17  cost = 1  size = 3
      if (N01.getNode()->getOpcode() == ISD::SUB) {
        SDValue N010 = N01.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N010.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(32)) {
            SDValue N011 = N01.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::SRL) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N011 == N11 &&
                  N01.getValueType() == MVT::i8 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_152(N, X86::SHRD32rrCL, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (or:i32 (srl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt)), (shl:i32 GR32:i32:$src1, CL:i8:$amt))
    // Emits: (SHLD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 17  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::SUB) {
        SDValue N010 = N01.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N010.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();
          if (CN1 == INT64_C(32)) {
            SDValue N011 = N01.getNode()->getOperand(1);
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::SHL) {
              SDValue N10 = N1.getNode()->getOperand(0);
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N011 == N11 &&
                  N01.getValueType() == MVT::i8 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_152(N, X86::SHLD32rrCL, MVT::i32);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (srl:i32 GR32:i32:$src1, (imm:i8):$amt1), (shl:i32 GR32:i32:$src2, (imm:i8):$amt2))<<P:Predicate_shrd>>
  // Emits: (SHRD32rri8:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shrd(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        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 &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_151(N, X86::SHRD32rri8, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (shl:i32 GR32:i32:$src1, (imm:i8):$amt1), (srl:i32 GR32:i32:$src2, (imm:i8):$amt2))<<P:Predicate_shld>>
  // Emits: (SHLD32rri8:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shld(N)) {
    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) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_151(N, X86::SHLD32rri8, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (shl:i32 GR32:i32:$src2, (imm:i8):$amt2), (srl:i32 GR32:i32:$src1, (imm:i8):$amt1))<<P:Predicate_shrd>>
  // Emits: (SHRD32rri8:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shrd(N)) {
    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) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_154(N, X86::SHRD32rri8, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i32 (srl:i32 GR32:i32:$src2, (imm:i8):$amt2), (shl:i32 GR32:i32:$src1, (imm:i8):$amt1))<<P:Predicate_shld>>
  // Emits: (SHLD32rri8:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shld(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        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 &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_154(N, X86::SHLD32rri8, MVT::i32);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  if (Predicate_or_is_add(N)) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (or:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)<<P:Predicate_or_is_add>>
        // Emits: (ADD32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (Predicate_i32immSExt8(N1.getNode())) {
          SDNode *Result = Emit_8(N, X86::ADD32ri8, MVT::i32);
          return Result;
        }

        // Pattern: (or:i32 GR32:i32:$src1, (imm:i32):$src2)<<P:Predicate_or_is_add>>
        // Emits: (ADD32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
        // Pattern complexity = 12  cost = 1  size = 3
        SDNode *Result = Emit_8(N, X86::ADD32ri, MVT::i32);
        return Result;
      }
    }

    // Pattern: (or:i32 GR32:i32:$src1, GR32:i32:$src2)<<P:Predicate_or_is_add>>
    // Emits: (ADD32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 9  cost = 1  size = 3
    SDNode *Result = Emit_1(N, X86::ADD32rr, MVT::i32);
    return Result;
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (or:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (OR32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::OR32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (or:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (OR32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::OR32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (or:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (OR32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR32rr, MVT::i32);
  return Result;
}

SDNode *Select_ISD_OR_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (OR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (OR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (or:i64 (srl:i64 GR64:i64:$src1, (imm:i8):$amt1), (shl:i64 GR64:i64:$src2, (imm:i8):$amt2))<<P:Predicate_shrd>>
  // Emits: (SHRD64rri8:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shrd(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        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 &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_151(N, X86::SHRD64rri8, MVT::i64);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i64 (shl:i64 GR64:i64:$src1, (imm:i8):$amt1), (srl:i64 GR64:i64:$src2, (imm:i8):$amt2))<<P:Predicate_shld>>
  // Emits: (SHLD64rri8:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shld(N)) {
    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) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_151(N, X86::SHLD64rri8, MVT::i64);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i64 (shl:i64 GR64:i64:$src2, (imm:i8):$amt2), (srl:i64 GR64:i64:$src1, (imm:i8):$amt1))<<P:Predicate_shrd>>
  // Emits: (SHRD64rri8:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shrd(N)) {
    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) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SRL) {
          SDValue N10 = N1.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_154(N, X86::SHRD64rri8, MVT::i64);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:i64 (srl:i64 GR64:i64:$src2, (imm:i8):$amt2), (shl:i64 GR64:i64:$src1, (imm:i8):$amt1))<<P:Predicate_shld>>
  // Emits: (SHLD64rri8:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$amt1)
  // Pattern complexity = 16  cost = 1  size = 3
  if (Predicate_shld(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N01 = N0.getNode()->getOperand(1);
      if (N01.getNode()->getOpcode() == ISD::Constant) {
        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 &&
              N01.getValueType() == MVT::i8 &&
              N11.getValueType() == MVT::i8) {
            SDNode *Result = Emit_154(N, X86::SHLD64rri8, MVT::i64);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: lea64addr:i64:$src
  // Emits: (LEA64r:i64 lea64addr:i64:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  if (Predicate_or_is_add(N)) {
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (or:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)<<P:Predicate_or_is_add>>
        // Emits: (ADD64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (Predicate_i64immSExt8(N1.getNode())) {
          SDNode *Result = Emit_12(N, X86::ADD64ri8, MVT::i64);
          return Result;
        }

        // Pattern: (or:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)<<P:Predicate_or_is_add>>
        // Emits: (ADD64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
        // Pattern complexity = 13  cost = 1  size = 3
        if (Predicate_i64immSExt32(N1.getNode())) {
          SDNode *Result = Emit_12(N, X86::ADD64ri32, MVT::i64);
          return Result;
        }
      }
    }

    // Pattern: (or:i64 GR64:i64:$src1, GR64:i64:$src2)<<P:Predicate_or_is_add>>
    // Emits: (ADD64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 9  cost = 1  size = 3
    SDNode *Result = Emit_1(N, X86::ADD64rr, MVT::i64);
    return Result;
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (or:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (OR64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::OR64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (or:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (OR64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::OR64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (or:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (OR64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR64rr, MVT::i64);
  return Result;
}

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

      // Pattern: (or:v1i64 VR64:v1i64:$src1, (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (MMX_PORrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MMX_PORrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (or:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, VR64:v1i64:$src1)
      // Emits: (MMX_PORrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MMX_PORrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Emits: (MMX_PORrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PORrr, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_OR_v2i64(SDNode *N) {

  // Pattern: (or:v2i64 (bitconvert:v2i64 VR128:v4f32:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (ORPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
              N00.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_57(N, X86::ORPSrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (ORPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
              N00.getValueType() == MVT::v2f64) {
            SDNode *Result = Emit_57(N, X86::ORPDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (or:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (bitconvert:v2i64 VR128:v4f32:$src1))
  // Emits: (ORPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_62(N, X86::ORPSrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (or:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (bitconvert:v2i64 VR128:v2f64:$src1))
    // Emits: (ORPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_62(N, X86::ORPDrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (or:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PORrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PORrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (or:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2i64:$src1)
    // Emits: (PORrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PORrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (or:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (bitconvert:v2i64 VR128:v2f64:$src2))
    // Emits: (ORPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 9  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N00.getValueType() == MVT::v2f64 &&
            N10.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_59(N, X86::ORPDrr, MVT::v2i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (or:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (ORPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::ORPSrr, MVT::v2i64);
    return Result;
  }

  // Pattern: (or:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (PORrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::PORrr, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_157(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 6);
}
SDNode *Select_ISD_PREFETCH(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDValue N2 = N->getOperand(2);
      if (N2.getNode()->getOpcode() == ISD::Constant) {
        SDValue N3 = N->getOperand(3);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N3.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();

          // Pattern: (prefetch:isVoid addr:iPTR:$src, (imm:i32), 3:i32)
          // Emits: (PREFETCHT0:isVoid addr:iPTR:$src)
          // Pattern complexity = 29  cost = 1  size = 3
          if (CN1 == INT64_C(3) &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_157(N, X86::PREFETCHT0, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
            return Result;
          }

          // Pattern: (prefetch:isVoid addr:iPTR:$src, (imm:i32), 2:i32)
          // Emits: (PREFETCHT1:isVoid addr:iPTR:$src)
          // Pattern complexity = 29  cost = 1  size = 3
          if (CN1 == INT64_C(2) &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_157(N, X86::PREFETCHT1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
            return Result;
          }

          // Pattern: (prefetch:isVoid addr:iPTR:$src, (imm:i32), 1:i32)
          // Emits: (PREFETCHT2:isVoid addr:iPTR:$src)
          // Pattern complexity = 29  cost = 1  size = 3
          if (CN1 == INT64_C(1) &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_157(N, X86::PREFETCHT2, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
            return Result;
          }

          // Pattern: (prefetch:isVoid addr:iPTR:$src, (imm:i32), 0:i32)
          // Emits: (PREFETCHNTA:isVoid addr:iPTR:$src)
          // Pattern complexity = 29  cost = 1  size = 3
          if (CN1 == INT64_C(0) &&
              N2.getValueType() == MVT::i32) {
            SDNode *Result = Emit_157(N, X86::PREFETCHNTA, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
            return Result;
          }
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_158(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::CL, N1, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, InFlag);
}
DISABLE_INLINE SDNode *Emit_159(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1);
}
SDNode *Select_ISD_ROTL_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotl:i8 GR8:i8:$src1, 1:i8)
  // Emits: (ROL8r1:i8 GR8:i8:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROL8r1, MVT::i8);
        return Result;
      }
    }
  }

  // Pattern: (rotl:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Emits: (ROL8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROL8ri, MVT::i8);
    return Result;
  }

  // Pattern: (rotl:i8 GR8:i8:$src, CL:i8)
  // Emits: (ROL8rCL:i8 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROL8rCL, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTL_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotl:i16 GR16:i16:$src1, 1:i8)
  // Emits: (ROL16r1:i16 GR16:i16:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROL16r1, MVT::i16);
        return Result;
      }
    }
  }

  // Pattern: (rotl:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Emits: (ROL16ri:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROL16ri, MVT::i16);
    return Result;
  }

  // Pattern: (rotl:i16 GR16:i16:$src, CL:i8)
  // Emits: (ROL16rCL:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROL16rCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTL_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotl:i32 GR32:i32:$src1, 1:i8)
  // Emits: (ROL32r1:i32 GR32:i32:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROL32r1, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (rotl:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Emits: (ROL32ri:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROL32ri, MVT::i32);
    return Result;
  }

  // Pattern: (rotl:i32 GR32:i32:$src, CL:i8)
  // Emits: (ROL32rCL:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROL32rCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTL_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotl:i64 GR64:i64:$src1, 1:i8)
  // Emits: (ROL64r1:i64 GR64:i64:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROL64r1, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (rotl:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Emits: (ROL64ri:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROL64ri, MVT::i64);
    return Result;
  }

  // Pattern: (rotl:i64 GR64:i64:$src, CL:i8)
  // Emits: (ROL64rCL:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROL64rCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTR_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotr:i8 GR8:i8:$src1, 1:i8)
  // Emits: (ROR8r1:i8 GR8:i8:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROR8r1, MVT::i8);
        return Result;
      }
    }
  }

  // Pattern: (rotr:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Emits: (ROR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROR8ri, MVT::i8);
    return Result;
  }

  // Pattern: (rotr:i8 GR8:i8:$src, CL:i8)
  // Emits: (ROR8rCL:i8 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROR8rCL, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTR_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotr:i16 GR16:i16:$src1, 1:i8)
  // Emits: (ROR16r1:i16 GR16:i16:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROR16r1, MVT::i16);
        return Result;
      }
    }
  }

  // Pattern: (rotr:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Emits: (ROR16ri:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROR16ri, MVT::i16);
    return Result;
  }

  // Pattern: (rotr:i16 GR16:i16:$src, CL:i8)
  // Emits: (ROR16rCL:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROR16rCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTR_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotr:i32 GR32:i32:$src1, 1:i8)
  // Emits: (ROR32r1:i32 GR32:i32:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROR32r1, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (rotr:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Emits: (ROR32ri:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROR32ri, MVT::i32);
    return Result;
  }

  // Pattern: (rotr:i32 GR32:i32:$src, CL:i8)
  // Emits: (ROR32rCL:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROR32rCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ROTR_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (rotr:i64 GR64:i64:$src1, 1:i8)
  // Emits: (ROR64r1:i64 GR64:i64:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::ROR64r1, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (rotr:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Emits: (ROR64ri:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::ROR64ri, MVT::i64);
    return Result;
  }

  // Pattern: (rotr:i64 GR64:i64:$src, CL:i8)
  // Emits: (ROR64rCL:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::ROR64rCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (scalar_to_vector:v2i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (MMX_MOVD64rm:v2i32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_79(N, X86::MMX_MOVD64rm, MVT::v2i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (scalar_to_vector:v2i32 GR32:i32:$src)
    // Emits: (MMX_MOVD64rr:v2i32 GR32:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_72(N, X86::MMX_MOVD64rr, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (MOVDI2PDIrm:v4i32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::i32) {
          SDNode *Result = Emit_79(N, X86::MOVDI2PDIrm, MVT::v4i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (scalar_to_vector:v4i32 GR32:i32:$src)
    // Emits: (MOVDI2PDIrr:v4i32 GR32:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_72(N, X86::MOVDI2PDIrr, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SCALAR_TO_VECTOR_v1i64(SDNode *N) {
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_72(N, X86::MMX_MOVD64rrv164, MVT::v1i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_160(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N00);
}
SDNode *Select_ISD_SCALAR_TO_VECTOR_v2i64(SDNode *N) {

  // Pattern: (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
  // Emits: (MOVQI2PQIrm:v2i64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::i64) {
          SDNode *Result = Emit_79(N, X86::MOVQI2PQIrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N0.getValueType() == MVT::i64) {

        // Pattern: (scalar_to_vector:v2i64 (bitconvert:i64 VR64:v8i8:$src))
        // Emits: (MMX_MOVQ2DQrr:v2i64 VR64:v8i8:$src)
        // Pattern complexity = 6  cost = 1  size = 3
        if (N00.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_160(N, X86::MMX_MOVQ2DQrr, MVT::v2i64);
          return Result;
        }

        // Pattern: (scalar_to_vector:v2i64 (bitconvert:i64 VR64:v4i16:$src))
        // Emits: (MMX_MOVQ2DQrr:v2i64 VR64:v8i8:$src)
        // Pattern complexity = 6  cost = 1  size = 3
        if (N00.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_160(N, X86::MMX_MOVQ2DQrr, MVT::v2i64);
          return Result;
        }

        // Pattern: (scalar_to_vector:v2i64 (bitconvert:i64 VR64:v2i32:$src))
        // Emits: (MMX_MOVQ2DQrr:v2i64 VR64:v8i8:$src)
        // Pattern complexity = 6  cost = 1  size = 3
        if (N00.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_160(N, X86::MMX_MOVQ2DQrr, MVT::v2i64);
          return Result;
        }

        // Pattern: (scalar_to_vector:v2i64 (bitconvert:i64 VR64:v1i64:$src))
        // Emits: (MMX_MOVQ2DQrr:v2i64 VR64:v8i8:$src)
        // Pattern complexity = 6  cost = 1  size = 3
        if (N00.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_160(N, X86::MMX_MOVQ2DQrr, MVT::v2i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (scalar_to_vector:v2i64 GR64:i64:$src)
  // Emits: (MOV64toPQIrr:v2i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_72(N, X86::MOV64toPQIrr, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (scalar_to_vector:v4f32 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
    // Emits: (MOVSS2PSrm:v4f32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f32) {
          SDNode *Result = Emit_79(N, X86::MOVSS2PSrm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (scalar_to_vector:v4f32 FR32:f32:$src)
    // Emits: (MOVSS2PSrr:v4f32 FR32:f32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_72(N, X86::MOVSS2PSrr, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
    // Emits: (MOVSD2PDrm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadf64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
            N0.getValueType() == MVT::f64) {
          SDNode *Result = Emit_79(N, X86::MOVSD2PDrm, MVT::v2f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (scalar_to_vector:v2f64 FR64:f64:$src)
    // Emits: (MOVSD2PDrr:v2f64 FR64:f64:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_72(N, X86::MOVSD2PDrr, MVT::v2f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_161(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N0);
}
DISABLE_INLINE SDNode *Emit_162(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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N1.getNode()->getDebugLoc(), X86::CL, N10, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, InFlag);
}
SDNode *Select_ISD_SHL_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (shl:i8 GR8:i8:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SHL8rCL:i8 GR8:i8:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHL8rCL, MVT::i8);
      return Result;
    }
  }

  // Pattern: (shl:i8 GR8:i8:$src1, 1:i8)
  // Emits: (ADD8rr:i8 GR8:i8:$src1, GR8:i8:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_161(N, X86::ADD8rr, MVT::i8);
        return Result;
      }
    }
  }

  // Pattern: (shl:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Emits: (SHL8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHL8ri, MVT::i8);
    return Result;
  }

  // Pattern: (shl:i8 GR8:i8:$src, CL:i8)
  // Emits: (SHL8rCL:i8 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHL8rCL, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SHL_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (shl:i16 GR16:i16:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SHL16rCL:i16 GR16:i16:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHL16rCL, MVT::i16);
      return Result;
    }
  }

  // Pattern: (shl:i16 GR16:i16:$src1, 1:i8)
  // Emits: (ADD16rr:i16 GR16:i16:$src1, GR16:i16:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_161(N, X86::ADD16rr, MVT::i16);
        return Result;
      }
    }
  }

  // Pattern: (shl:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Emits: (SHL16ri:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHL16ri, MVT::i16);
    return Result;
  }

  // Pattern: (shl:i16 GR16:i16:$src, CL:i8)
  // Emits: (SHL16rCL:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHL16rCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SHL_i32(SDNode *N) {

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (shl:i32 GR32:i32:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SHL32rCL:i32 GR32:i32:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHL32rCL, MVT::i32);
      return Result;
    }
  }

  // Pattern: (shl:i32 GR32:i32:$src1, 1:i8)
  // Emits: (ADD32rr:i32 GR32:i32:$src1, GR32:i32:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_161(N, X86::ADD32rr, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (shl:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Emits: (SHL32ri:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHL32ri, MVT::i32);
    return Result;
  }

  // Pattern: (shl:i32 GR32:i32:$src, CL:i8)
  // Emits: (SHL32rCL:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHL32rCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SHL_i64(SDNode *N) {

  // Pattern: lea64addr:i64:$src
  // Emits: (LEA64r:i64 lea64addr:i64:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (shl:i64 GR64:i64:$src1, (and:i8 CL:i8:$amt, 63:i8))
  // Emits: (SHL64rCL:i64 GR64:i64:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(63)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHL64rCL, MVT::i64);
      return Result;
    }
  }

  // Pattern: (shl:i64 GR64:i64:$src1, 1:i8)
  // Emits: (ADD64rr:i64 GR64:i64:$src1, GR64:i64:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_161(N, X86::ADD64rr, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (shl:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Emits: (SHL64ri:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHL64ri, MVT::i64);
    return Result;
  }

  // Pattern: (shl:i64 GR64:i64:$src, CL:i8)
  // Emits: (SHL64rCL:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHL64rCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SIGN_EXTEND_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVSX16rr8, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SIGN_EXTEND_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (sext:i32 GR8:i8:$src)
  // Emits: (MOVSX32rr8:i32 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVSX32rr8, MVT::i32);
    return Result;
  }

  // Pattern: (sext:i32 GR16:i16:$src)
  // Emits: (MOVSX32rr16:i32 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_72(N, X86::MOVSX32rr16, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SIGN_EXTEND_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (sext:i64 GR8:i8:$src)
  // Emits: (MOVSX64rr8:i64 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVSX64rr8, MVT::i64);
    return Result;
  }

  // Pattern: (sext:i64 GR16:i16:$src)
  // Emits: (MOVSX64rr16:i64 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_72(N, X86::MOVSX64rr16, MVT::i64);
    return Result;
  }

  // Pattern: (sext:i64 GR32:i32:$src)
  // Emits: (MOVSX64rr32:i64 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_72(N, X86::MOVSX64rr32, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_163(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 Tmp1 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp4(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp2, Tmp3), 0);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp4);
}
DISABLE_INLINE SDNode *Emit_164(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(0x1ULL, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2);
}
SDNode *Select_ISD_SIGN_EXTEND_INREG_i16(SDNode *N) {

  // Pattern: (sext_inreg:i16 GR16:i16:$src, i8:Other)
  // Emits: (MOVSX16rr8:i16 (EXTRACT_SUBREG:i8 GR16:i16:$src, 1:i32))
  // Pattern complexity = 3  cost = 2  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_164(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX16rr8, MVT::i8, MVT::i16);
      return Result;
    }
  }

  // Pattern: (sext_inreg:i16 GR16:i16:$src, i8:Other)
  // Emits: (MOVSX16rr8:i16 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 1:i32))
  // Pattern complexity = 3  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_163(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX16rr8, MVT::i16, MVT::i8, MVT::i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_165(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(0x3ULL, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_166(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 Tmp1 = CurDAG->getTargetConstant(X86::GR32_ABCDRegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  SDValue Tmp4(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp2, Tmp3), 0);
  return CurDAG->SelectNodeTo(N, Opc2, VT2, Tmp4);
}
SDNode *Select_ISD_SIGN_EXTEND_INREG_i32(SDNode *N) {

  // Pattern: (sext_inreg:i32 GR32:i32:$src, i16:Other)
  // Emits: (MOVSX32rr16:i32 (EXTRACT_SUBREG:i16 GR32:i32:$src, 3:i32))
  // Pattern complexity = 3  cost = 2  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
      SDNode *Result = Emit_165(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX32rr16, MVT::i16, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sext_inreg:i32 GR32:i32:$src, i8:Other)
  // Emits: (MOVSX32rr8:i32 (EXTRACT_SUBREG:i8 GR32:i32:$src, 1:i32))
  // Pattern complexity = 3  cost = 2  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_164(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX32rr8, MVT::i8, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sext_inreg:i32 GR32:i32:$src, i8:Other)
  // Emits: (MOVSX32rr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR32:i32:$src, GR32_ABCD:i32), 1:i32))
  // Pattern complexity = 3  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
      SDNode *Result = Emit_166(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX32rr8, MVT::i32, MVT::i8, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_167(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(0x4ULL, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2);
}
SDNode *Select_ISD_SIGN_EXTEND_INREG_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (sext_inreg:i64 GR64:i64:$src, i32:Other)
  // Emits: (MOVSX64rr32:i64 (EXTRACT_SUBREG:i32 GR64:i64:$src, 4:i32))
  // Pattern complexity = 3  cost = 2  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i32) {
    SDNode *Result = Emit_167(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX64rr32, MVT::i32, MVT::i64);
    return Result;
  }

  // Pattern: (sext_inreg:i64 GR64:i64:$src, i16:Other)
  // Emits: (MOVSX64rr16:i64 (EXTRACT_SUBREG:i16 GR64:i64:$src, 3:i32))
  // Pattern complexity = 3  cost = 2  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
    SDNode *Result = Emit_165(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX64rr16, MVT::i16, MVT::i64);
    return Result;
  }

  // Pattern: (sext_inreg:i64 GR64:i64:$src, i8:Other)
  // Emits: (MOVSX64rr8:i64 (EXTRACT_SUBREG:i8 GR64:i64:$src, 1:i32))
  // Pattern complexity = 3  cost = 2  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
    SDNode *Result = Emit_164(N, TargetOpcode::EXTRACT_SUBREG, X86::MOVSX64rr8, MVT::i8, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SINT_TO_FP_f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode())) {

        // Pattern: (sint_to_fp:f32 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
        // Emits: (CVTSI2SS64rm:f32 addr:iPTR:$src)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_load(N0.getNode()) &&
            Predicate_loadi64(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
              N0.getValueType() == MVT::i64) {
            SDNode *Result = Emit_79(N, X86::CVTSI2SS64rm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }

        // Pattern: (sint_to_fp:f32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
        // Emits: (CVTSI2SSrm:f32 addr:iPTR:$src)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_loadi32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_79(N, X86::CVTSI2SSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (sint_to_fp:f32 GR64:i64:$src)
    // Emits: (CVTSI2SS64rr:f32 GR64:i64:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_72(N, X86::CVTSI2SS64rr, MVT::f32);
      return Result;
    }

    // Pattern: (sint_to_fp:f32 GR32:i32:$src)
    // Emits: (CVTSI2SSrr:f32 GR32:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_72(N, X86::CVTSI2SSrr, MVT::f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SINT_TO_FP_f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode())) {

        // Pattern: (sint_to_fp:f64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
        // Emits: (CVTSI2SD64rm:f64 addr:iPTR:$src)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_load(N0.getNode()) &&
            Predicate_loadi64(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
              N0.getValueType() == MVT::i64) {
            SDNode *Result = Emit_79(N, X86::CVTSI2SD64rm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }

        // Pattern: (sint_to_fp:f64 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
        // Emits: (CVTSI2SDrm:f64 addr:iPTR:$src)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_loadi32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_79(N, X86::CVTSI2SDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (sint_to_fp:f64 GR64:i64:$src)
    // Emits: (CVTSI2SD64rr:f64 GR64:i64:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_72(N, X86::CVTSI2SD64rr, MVT::f64);
      return Result;
    }

    // Pattern: (sint_to_fp:f64 GR32:i32:$src)
    // Emits: (CVTSI2SDrr:f64 GR32:i32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_72(N, X86::CVTSI2SDrr, MVT::f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SINT_TO_FP_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v4i32) {
      SDNode *Result = Emit_72(N, X86::Int_CVTDQ2PSrr, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SINT_TO_FP_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::v2i32) {
      SDNode *Result = Emit_72(N, X86::Int_CVTPI2PDrr, MVT::v2f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRA_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (sra:i8 GR8:i8:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SAR8rCL:i8 GR8:i8:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SAR8rCL, MVT::i8);
      return Result;
    }
  }

  // Pattern: (sra:i8 GR8:i8:$src1, 1:i8)
  // Emits: (SAR8r1:i8 GR8:i8:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SAR8r1, MVT::i8);
        return Result;
      }
    }
  }

  // Pattern: (sra:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Emits: (SAR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SAR8ri, MVT::i8);
    return Result;
  }

  // Pattern: (sra:i8 GR8:i8:$src, CL:i8)
  // Emits: (SAR8rCL:i8 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SAR8rCL, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRA_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (sra:i16 GR16:i16:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SAR16rCL:i16 GR16:i16:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SAR16rCL, MVT::i16);
      return Result;
    }
  }

  // Pattern: (sra:i16 GR16:i16:$src1, 1:i8)
  // Emits: (SAR16r1:i16 GR16:i16:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SAR16r1, MVT::i16);
        return Result;
      }
    }
  }

  // Pattern: (sra:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Emits: (SAR16ri:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SAR16ri, MVT::i16);
    return Result;
  }

  // Pattern: (sra:i16 GR16:i16:$src, CL:i8)
  // Emits: (SAR16rCL:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SAR16rCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRA_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (sra:i32 GR32:i32:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SAR32rCL:i32 GR32:i32:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SAR32rCL, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sra:i32 GR32:i32:$src1, 1:i8)
  // Emits: (SAR32r1:i32 GR32:i32:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SAR32r1, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (sra:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Emits: (SAR32ri:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SAR32ri, MVT::i32);
    return Result;
  }

  // Pattern: (sra:i32 GR32:i32:$src, CL:i8)
  // Emits: (SAR32rCL:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SAR32rCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRA_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (sra:i64 GR64:i64:$src1, (and:i8 CL:i8:$amt, 63:i8))
  // Emits: (SAR64rCL:i64 GR64:i64:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(63)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SAR64rCL, MVT::i64);
      return Result;
    }
  }

  // Pattern: (sra:i64 GR64:i64:$src1, 1:i8)
  // Emits: (SAR64r1:i64 GR64:i64:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SAR64r1, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (sra:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Emits: (SAR64ri:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SAR64ri, MVT::i64);
    return Result;
  }

  // Pattern: (sra:i64 GR64:i64:$src, CL:i8)
  // Emits: (SAR64rCL:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SAR64rCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRL_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (srl:i8 GR8:i8:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SHR8rCL:i8 GR8:i8:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHR8rCL, MVT::i8);
      return Result;
    }
  }

  // Pattern: (srl:i8 GR8:i8:$src1, 1:i8)
  // Emits: (SHR8r1:i8 GR8:i8:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SHR8r1, MVT::i8);
        return Result;
      }
    }
  }

  // Pattern: (srl:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Emits: (SHR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHR8ri, MVT::i8);
    return Result;
  }

  // Pattern: (srl:i8 GR8:i8:$src, CL:i8)
  // Emits: (SHR8rCL:i8 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHR8rCL, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_168(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 N1 = N->getOperand(1);
  SDValue Tmp3 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp3), 0);
  SDValue Tmp5 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp6(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp4, Tmp5), 0);
  SDValue Tmp7(CurDAG->getMachineNode(Opc2, N->getDebugLoc(), VT2, Tmp6), 0);
  SDValue Tmp8 = CurDAG->getTargetConstant(0x3ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc3, VT3, Tmp7, Tmp8);
}
SDNode *Select_ISD_SRL_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (srl:i16 GR16:i16:$src1, (and:i8 CL:i8:$amt, 31:i8))
    // Emits: (SHR16rCL:i16 GR16:i16:$src1)
    // Pattern complexity = 11  cost = 1  size = 3
    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(31)) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_162(N, X86::SHR16rCL, MVT::i16);
        return Result;
      }
    }

    // Pattern: (srl:i16 GR16:i16:$src1, 1:i8)
    // Emits: (SHR16r1:i16 GR16:i16:$src1)
    // Pattern complexity = 8  cost = 1  size = 3
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SHR16r1, MVT::i16);
        return Result;
      }
    }
  }

  // Pattern: (srl:i16 GR16:i16:$src, 8:i8)
  // Emits: (EXTRACT_SUBREG:i16 (MOVZX32rr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32)), 3:i32)
  // Pattern complexity = 8  cost = 4  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = 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(8) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_168(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr8, TargetOpcode::EXTRACT_SUBREG, MVT::i16, MVT::i8, MVT::i32, MVT::i16);
        return Result;
      }
    }
  }

  // Pattern: (srl:i16 GR16:i16:$src, 8:i8)
  // Emits: (EXTRACT_SUBREG:i16 (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32)), 3:i32)
  // Pattern complexity = 8  cost = 4  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = 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(8) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_168(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, TargetOpcode::EXTRACT_SUBREG, MVT::i16, MVT::i8, MVT::i32, MVT::i16);
        return Result;
      }
    }
  }
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (srl:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Emits: (SHR16ri:i16 GR16:i16:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHR16ri, MVT::i16);
    return Result;
  }

  // Pattern: (srl:i16 GR16:i16:$src, CL:i8)
  // Emits: (SHR16rCL:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHR16rCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRL_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (srl:i32 GR32:i32:$src1, (and:i8 CL:i8:$amt, 31:i8))
  // Emits: (SHR32rCL:i32 GR32:i32:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(31)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHR32rCL, MVT::i32);
      return Result;
    }
  }

  // Pattern: (srl:i32 GR32:i32:$src1, 1:i8)
  // Emits: (SHR32r1:i32 GR32:i32:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SHR32r1, MVT::i32);
        return Result;
      }
    }
  }

  // Pattern: (srl:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Emits: (SHR32ri:i32 GR32:i32:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHR32ri, MVT::i32);
    return Result;
  }

  // Pattern: (srl:i32 GR32:i32:$src, CL:i8)
  // Emits: (SHR32rCL:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHR32rCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SRL_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (srl:i64 GR64:i64:$src1, (and:i8 CL:i8:$amt, 63:i8))
  // Emits: (SHR64rCL:i64 GR64:i64:$src1)
  // Pattern complexity = 11  cost = 1  size = 3
  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(63)) &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_162(N, X86::SHR64rCL, MVT::i64);
      return Result;
    }
  }

  // Pattern: (srl:i64 GR64:i64:$src1, 1:i8)
  // Emits: (SHR64r1:i64 GR64:i64:$src1)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(1) &&
          N1.getValueType() == MVT::i8) {
        SDNode *Result = Emit_93(N, X86::SHR64r1, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (srl:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Emits: (SHR64ri:i64 GR64:i64:$src1, (imm:i8):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_159(N, X86::SHR64ri, MVT::i64);
    return Result;
  }

  // Pattern: (srl:i64 GR64:i64:$src, CL:i8)
  // Emits: (SHR64rCL:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_158(N, X86::SHR64rCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_169(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp1, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_170(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp1, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_171(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp1, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_172(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  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();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N1, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_173(SDNode *N, unsigned Opc0, SDValue &CPTmpN111_0, SDValue &CPTmpN111_1, SDValue &CPTmpN111_2, SDValue &CPTmpN111_3, SDValue &CPTmpN111_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Chain11 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N11.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain11);
  Chain11 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N11.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4, Chain11 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 6);
  Chain11 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N11.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain11.getNode(), Chain11.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_174(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 6);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_175(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 6);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_176(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, N11, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_177(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_178(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_179(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_180(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain10, N1.getNode()->getDebugLoc(), X86::CL, N11, InFlag).getNode();
  Chain10 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_181(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_182(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N12 = N1.getNode()->getOperand(2);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain10, N1.getNode()->getDebugLoc(), X86::CL, N12, InFlag).getNode();
  Chain10 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, N11, Chain10, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_183(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N12 = N1.getNode()->getOperand(2);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N12)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, N11, Tmp2, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_184(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag = N1.getNode()->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, N11, Chain10, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_185(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i8);
  SDValue InFlag = N1.getNode()->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_186(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i16);
  SDValue InFlag = N1.getNode()->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_187(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  SDValue InFlag = N1.getNode()->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_188(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  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 InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N1.getNode()->getDebugLoc(), X86::EFLAGS, N11, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Chain, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_189(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp1, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_190(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_191(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i64);
  SDValue InFlag = N1.getNode()->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp1, Chain10, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_192(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N2 = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N10, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_193(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  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 Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N10, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_194(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N100, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_195(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = 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 N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N1000, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_196(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  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);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N10, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_197(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = 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 N2 = N->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N100, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_198(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N11)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N100, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_199(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFFFFFFFF80ULL, MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp3, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_200(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFFFFFFFF80ULL, MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp3, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_201(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = 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 N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain10, N11.getNode()->getDebugLoc(), X86::CL, N110, InFlag).getNode();
  Chain10 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_202(SDNode *N, unsigned Opc0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = 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 N1110 = N111.getNode()->getOperand(0);
  SDValue N1111 = N111.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N100.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain100);
  Chain100 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain100, N10.getNode()->getDebugLoc(), X86::CL, N101, InFlag).getNode();
  Chain100 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, N110, Chain100, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain100 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N100.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain100.getNode(), Chain100.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_203(SDNode *N, unsigned Opc0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1010 = N101.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N1110 = N111.getNode()->getOperand(0);
  SDValue N11100 = N1110.getNode()->getOperand(0);
  SDValue N11101 = N1110.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N100.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain100);
  Chain100 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain100, N101.getNode()->getDebugLoc(), X86::ECX, N1010, InFlag).getNode();
  Chain100 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, N110, Chain100, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain100 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N100.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain100.getNode(), Chain100.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_204(SDNode *N, unsigned Opc0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = 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 N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N100.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain100);
  Chain100 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, N110, Tmp2, Chain100 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain100 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N100.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain100.getNode(), Chain100.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_205(SDNode *N, unsigned Opc0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N1010 = N101.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N1110 = N111.getNode()->getOperand(0);
  SDValue N11100 = N1110.getNode()->getOperand(0);
  SDValue N11101 = N1110.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N100.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain100);
  Chain100 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain100, N101.getNode()->getDebugLoc(), X86::CX, N1010, InFlag).getNode();
  Chain100 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, N110, Chain100, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain100 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N100.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain100.getNode(), Chain100.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_206(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 6);
  Chain10 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_207(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(0x3ULL, MVT::i32);
  SDValue Tmp3(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N1, Tmp2), 0);
  MachineSDNode::mmo_iterator MemRefs1 = MF->allocateMemRefsArray(1);
  MemRefs1[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops1[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp3, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc1, MVT::Other, Ops1, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs1, MemRefs1 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_208(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFFFFFFFF80ULL, MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp3, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_209(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp3 = CurDAG->getTargetConstant(0xFFFFFFFF80000000ULL, MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp3, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_210(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = 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 N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(X86::GR64_ABCDRegClassID, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N100, Tmp4), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp7(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp5, Tmp6), 0);
  MachineSDNode::mmo_iterator MemRefs2 = MF->allocateMemRefsArray(1);
  MemRefs2[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops2[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp7, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc2, MVT::Other, Ops2, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs2, MemRefs2 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_211(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = 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 N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(X86::GR32_ABCDRegClassID, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N100, Tmp4), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp7(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp5, Tmp6), 0);
  MachineSDNode::mmo_iterator MemRefs2 = MF->allocateMemRefsArray(1);
  MemRefs2[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops2[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp7, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc2, MVT::Other, Ops2, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs2, MemRefs2 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_212(SDNode *N, unsigned Opc0, unsigned Opc1, unsigned Opc2, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = 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 N2 = N->getOperand(2);
  SDValue Tmp4 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp5(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N100, Tmp4), 0);
  SDValue Tmp6 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  SDValue Tmp7(CurDAG->getMachineNode(Opc1, N->getDebugLoc(), VT1, Tmp5, Tmp6), 0);
  MachineSDNode::mmo_iterator MemRefs2 = MF->allocateMemRefsArray(1);
  MemRefs2[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops2[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, Tmp7, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc2, MVT::Other, Ops2, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs2, MemRefs2 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_213(SDNode *N, unsigned Opc0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N10.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain10);
  Chain10 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, N11, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain10 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N10.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain10.getNode(), Chain10.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_214(SDNode *N, unsigned Opc0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N100.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain100);
  Chain100 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, N11, Chain100 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
  Chain100 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N100.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain100.getNode(), Chain100.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_215(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = 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 N101 = N10.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N101)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N1000, Tmp2, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_216(SDNode *N, unsigned Opc0, SDValue &CPTmpN111_0, SDValue &CPTmpN111_1, SDValue &CPTmpN111_2, SDValue &CPTmpN111_3, SDValue &CPTmpN111_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Chain11 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N11.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain11);
  Chain11 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N11.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4, N10, Chain11 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  Chain11 = SDValue(ResNode, 1);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N11.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 1),
    SDValue(Chain11.getNode(), Chain11.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_217(SDNode *N, unsigned Opc0, SDValue &CPTmpN111_0, SDValue &CPTmpN111_1, SDValue &CPTmpN111_2, SDValue &CPTmpN111_3, SDValue &CPTmpN111_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Chain11 = N11.getNode()->getOperand(0);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N11.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain11);
  Chain11 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag = N1.getNode()->getOperand(2);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N11.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4, N10, Chain11, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  Chain11 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N11.getNode(), 1),
    SDValue(N1.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain11.getNode(), Chain11.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_218(SDNode *N, unsigned Opc0, SDValue &CPTmpN1101_0, SDValue &CPTmpN1101_1, SDValue &CPTmpN1101_2, SDValue &CPTmpN1101_3, SDValue &CPTmpN1101_4) {
  SDValue Chain = 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 N110 = N11.getNode()->getOperand(0);
  SDValue Chain110 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N110.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain110);
  Chain110 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain110, N101.getNode()->getDebugLoc(), X86::CL, N1011, InFlag).getNode();
  Chain110 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N110.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4, N100, Chain110, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain110 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N110.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain110.getNode(), Chain110.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_219(SDNode *N, unsigned Opc0, SDValue &CPTmpN1101_0, SDValue &CPTmpN1101_1, SDValue &CPTmpN1101_2, SDValue &CPTmpN1101_3, SDValue &CPTmpN1101_4) {
  SDValue Chain = 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 N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue Chain110 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N1110 = N111.getNode()->getOperand(0);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N110.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain110);
  Chain110 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain110, N1010.getNode()->getDebugLoc(), X86::ECX, N10101, InFlag).getNode();
  Chain110 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N110.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4, N100, Chain110, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain110 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N110.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain110.getNode(), Chain110.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_220(SDNode *N, unsigned Opc0, SDValue &CPTmpN1101_0, SDValue &CPTmpN1101_1, SDValue &CPTmpN1101_2, SDValue &CPTmpN1101_3, SDValue &CPTmpN1101_4) {
  SDValue Chain = 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 Chain110 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N110.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain110);
  Chain110 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N111)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N110.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4, N100, Tmp2, Chain110 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain110 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N110.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain110.getNode(), Chain110.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_221(SDNode *N, unsigned Opc0, SDValue &CPTmpN1101_0, SDValue &CPTmpN1101_1, SDValue &CPTmpN1101_2, SDValue &CPTmpN1101_3, SDValue &CPTmpN1101_4) {
  SDValue Chain = 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 N11 = N1.getNode()->getOperand(1);
  SDValue N110 = N11.getNode()->getOperand(0);
  SDValue Chain110 = N110.getNode()->getOperand(0);
  SDValue N1101 = N110.getNode()->getOperand(1);
  SDValue N111 = N11.getNode()->getOperand(1);
  SDValue N1110 = N111.getNode()->getOperand(0);
  SDValue N2 = N->getOperand(2);
  SmallVector<SDValue, 8> InChains;
  if (Chain.getNode() != N110.getNode()) {
    InChains.push_back(Chain);
  }
  InChains.push_back(Chain110);
  Chain110 = CurDAG->getNode(ISD::TokenFactor, N->getDebugLoc(), MVT::Other, &InChains[0], InChains.size());
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain110, N1010.getNode()->getDebugLoc(), X86::CX, N10101, InFlag).getNode();
  Chain110 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(2);
  MemRefs0[0] = cast<MemSDNode>(N)->getMemOperand();
  MemRefs0[1] = cast<MemSDNode>(N110.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4, N100, Chain110, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
  Chain110 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 2);
  const SDValue Froms[] = {
    SDValue(N110.getNode(), 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    SDValue(Chain110.getNode(), Chain110.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_ISD_STORE(SDNode *N) {
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        {
          SDValue N10 = N1.getNode()->getOperand(0);

          // Pattern: (st:isVoid (or:i32 (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (trunc:i8 ECX:i32:$amt)), (shl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt)))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHRD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
          // Pattern complexity = 67  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SRL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
                    SDValue N1010 = N101.getNode()->getOperand(0);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                        SDValue N1110 = N111.getNode()->getOperand(0);
                        if (N1110.getNode()->getOpcode() == ISD::SUB) {
                          SDValue N11100 = N1110.getNode()->getOperand(0);
                          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11100.getNode());
                          if (Tmp0) {
                            int64_t CN1 = Tmp0->getSExtValue();
                            if (CN1 == INT64_C(32)) {
                              SDValue N11101 = N1110.getNode()->getOperand(1);
                              if (N1010 == N11101) {
                                SDValue N2 = N->getOperand(2);
                                if (N1001 == N2 &&
                                    N1.getValueType() == MVT::i32 &&
                                    N101.getValueType() == MVT::i8 &&
                                    N1010.getValueType() == MVT::i32 &&
                                    N111.getValueType() == MVT::i8 &&
                                    N1110.getValueType() == MVT::i32) {
                                  SDNode *Result = Emit_203(N, X86::SHRD32mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                                  return Result;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i32 (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (trunc:i8 ECX:i32:$amt)), (srl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt)))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHLD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
          // Pattern complexity = 67  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SHL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
                    SDValue N1010 = N101.getNode()->getOperand(0);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                        SDValue N1110 = N111.getNode()->getOperand(0);
                        if (N1110.getNode()->getOpcode() == ISD::SUB) {
                          SDValue N11100 = N1110.getNode()->getOperand(0);
                          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11100.getNode());
                          if (Tmp0) {
                            int64_t CN1 = Tmp0->getSExtValue();
                            if (CN1 == INT64_C(32)) {
                              SDValue N11101 = N1110.getNode()->getOperand(1);
                              if (N1010 == N11101) {
                                SDValue N2 = N->getOperand(2);
                                if (N1001 == N2 &&
                                    N1.getValueType() == MVT::i32 &&
                                    N101.getValueType() == MVT::i8 &&
                                    N1010.getValueType() == MVT::i32 &&
                                    N111.getValueType() == MVT::i8 &&
                                    N1110.getValueType() == MVT::i32) {
                                  SDNode *Result = Emit_203(N, X86::SHLD32mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                                  return Result;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i16 (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (trunc:i8 CX:i16:$amt)), (shl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt)))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHRD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
          // Pattern complexity = 67  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SRL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi16(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
                    SDValue N1010 = N101.getNode()->getOperand(0);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                        SDValue N1110 = N111.getNode()->getOperand(0);
                        if (N1110.getNode()->getOpcode() == ISD::SUB) {
                          SDValue N11100 = N1110.getNode()->getOperand(0);
                          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11100.getNode());
                          if (Tmp0) {
                            int64_t CN1 = Tmp0->getSExtValue();
                            if (CN1 == INT64_C(16)) {
                              SDValue N11101 = N1110.getNode()->getOperand(1);
                              if (N1010 == N11101) {
                                SDValue N2 = N->getOperand(2);
                                if (N1001 == N2 &&
                                    N1.getValueType() == MVT::i16 &&
                                    N101.getValueType() == MVT::i8 &&
                                    N1010.getValueType() == MVT::i16 &&
                                    N111.getValueType() == MVT::i8 &&
                                    N1110.getValueType() == MVT::i16) {
                                  SDNode *Result = Emit_205(N, X86::SHRD16mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                                  return Result;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (N10.getNode()->getOpcode() == ISD::SHL) {

            // Pattern: (st:isVoid (or:i16 (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (trunc:i8 CX:i16:$amt)), (srl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt)))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHLD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 67  cost = 1  size = 3
            if (N10.hasOneUse()) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::LOAD &&
                  N100.hasOneUse() &&
                  IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                  (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
                SDValue Chain100 = N100.getNode()->getOperand(0);
                if (Predicate_unindexedload(N100.getNode()) &&
                    Predicate_loadi16(N100.getNode())) {
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  SDValue CPTmpN1001_0;
                  SDValue CPTmpN1001_1;
                  SDValue CPTmpN1001_2;
                  SDValue CPTmpN1001_3;
                  SDValue CPTmpN1001_4;
                  if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                    SDValue N101 = N10.getNode()->getOperand(1);
                    if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
                      SDValue N1010 = N101.getNode()->getOperand(0);
                      SDValue N11 = N1.getNode()->getOperand(1);
                      if (N11.getNode()->getOpcode() == ISD::SRL) {
                        SDValue N110 = N11.getNode()->getOperand(0);
                        SDValue N111 = N11.getNode()->getOperand(1);
                        if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                          SDValue N1110 = N111.getNode()->getOperand(0);
                          if (N1110.getNode()->getOpcode() == ISD::SUB) {
                            SDValue N11100 = N1110.getNode()->getOperand(0);
                            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11100.getNode());
                            if (Tmp0) {
                              int64_t CN1 = Tmp0->getSExtValue();
                              if (CN1 == INT64_C(16)) {
                                SDValue N11101 = N1110.getNode()->getOperand(1);
                                if (N1010 == N11101) {
                                  SDValue N2 = N->getOperand(2);
                                  if (N1001 == N2 &&
                                      N1.getValueType() == MVT::i16 &&
                                      N101.getValueType() == MVT::i8 &&
                                      N1010.getValueType() == MVT::i16 &&
                                      N111.getValueType() == MVT::i8 &&
                                      N1110.getValueType() == MVT::i16) {
                                    SDNode *Result = Emit_205(N, X86::SHLD16mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                                    return Result;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (or:i32 (shl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt))), (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (trunc:i8 ECX:i32:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHRD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 67  cost = 1  size = 3
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              if (N1010.getNode()->getOpcode() == ISD::SUB) {
                SDValue N10100 = N1010.getNode()->getOperand(0);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10100.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(32)) {
                    SDValue N10101 = N1010.getNode()->getOperand(1);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL &&
                        N11.hasOneUse()) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      if (N110.getNode()->getOpcode() == ISD::LOAD &&
                          N110.hasOneUse() &&
                          IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                          (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                        SDValue Chain110 = N110.getNode()->getOperand(0);
                        if (Predicate_unindexedload(N110.getNode()) &&
                            Predicate_loadi32(N110.getNode())) {
                          SDValue N1101 = N110.getNode()->getOperand(1);
                          SDValue CPTmpN1101_0;
                          SDValue CPTmpN1101_1;
                          SDValue CPTmpN1101_2;
                          SDValue CPTmpN1101_3;
                          SDValue CPTmpN1101_4;
                          if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                            SDValue N111 = N11.getNode()->getOperand(1);
                            if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                              SDValue N1110 = N111.getNode()->getOperand(0);
                              if (N10101 == N1110) {
                                SDValue N2 = N->getOperand(2);
                                if (N1101 == N2 &&
                                    N1.getValueType() == MVT::i32 &&
                                    N101.getValueType() == MVT::i8 &&
                                    N1010.getValueType() == MVT::i32 &&
                                    N111.getValueType() == MVT::i8 &&
                                    N1110.getValueType() == MVT::i32) {
                                  SDNode *Result = Emit_219(N, X86::SHRD32mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                                  return Result;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i32 (srl:i32 GR32:i32:$src2, (trunc:i8 (sub:i32 32:i32, ECX:i32:$amt))), (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (trunc:i8 ECX:i32:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHLD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
          // Pattern complexity = 67  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SRL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              if (N1010.getNode()->getOpcode() == ISD::SUB) {
                SDValue N10100 = N1010.getNode()->getOperand(0);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10100.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(32)) {
                    SDValue N10101 = N1010.getNode()->getOperand(1);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL &&
                        N11.hasOneUse()) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      if (N110.getNode()->getOpcode() == ISD::LOAD &&
                          N110.hasOneUse() &&
                          IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                          (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                        SDValue Chain110 = N110.getNode()->getOperand(0);
                        if (Predicate_unindexedload(N110.getNode()) &&
                            Predicate_loadi32(N110.getNode())) {
                          SDValue N1101 = N110.getNode()->getOperand(1);
                          SDValue CPTmpN1101_0;
                          SDValue CPTmpN1101_1;
                          SDValue CPTmpN1101_2;
                          SDValue CPTmpN1101_3;
                          SDValue CPTmpN1101_4;
                          if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                            SDValue N111 = N11.getNode()->getOperand(1);
                            if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                              SDValue N1110 = N111.getNode()->getOperand(0);
                              if (N10101 == N1110) {
                                SDValue N2 = N->getOperand(2);
                                if (N1101 == N2 &&
                                    N1.getValueType() == MVT::i32 &&
                                    N101.getValueType() == MVT::i8 &&
                                    N1010.getValueType() == MVT::i32 &&
                                    N111.getValueType() == MVT::i8 &&
                                    N1110.getValueType() == MVT::i32) {
                                  SDNode *Result = Emit_219(N, X86::SHLD32mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                                  return Result;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i16 (shl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt))), (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (trunc:i8 CX:i16:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHRD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
          // Pattern complexity = 67  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SHL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              if (N1010.getNode()->getOpcode() == ISD::SUB) {
                SDValue N10100 = N1010.getNode()->getOperand(0);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10100.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(16)) {
                    SDValue N10101 = N1010.getNode()->getOperand(1);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL &&
                        N11.hasOneUse()) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      if (N110.getNode()->getOpcode() == ISD::LOAD &&
                          N110.hasOneUse() &&
                          IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                          (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                        SDValue Chain110 = N110.getNode()->getOperand(0);
                        if (Predicate_unindexedload(N110.getNode()) &&
                            Predicate_loadi16(N110.getNode())) {
                          SDValue N1101 = N110.getNode()->getOperand(1);
                          SDValue CPTmpN1101_0;
                          SDValue CPTmpN1101_1;
                          SDValue CPTmpN1101_2;
                          SDValue CPTmpN1101_3;
                          SDValue CPTmpN1101_4;
                          if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                            SDValue N111 = N11.getNode()->getOperand(1);
                            if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                              SDValue N1110 = N111.getNode()->getOperand(0);
                              if (N10101 == N1110) {
                                SDValue N2 = N->getOperand(2);
                                if (N1101 == N2 &&
                                    N1.getValueType() == MVT::i16 &&
                                    N101.getValueType() == MVT::i8 &&
                                    N1010.getValueType() == MVT::i16 &&
                                    N111.getValueType() == MVT::i8 &&
                                    N1110.getValueType() == MVT::i16) {
                                  SDNode *Result = Emit_221(N, X86::SHRD16mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                                  return Result;
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (N10.getNode()->getOpcode() == ISD::SRL) {

            // Pattern: (st:isVoid (or:i16 (srl:i16 GR16:i16:$src2, (trunc:i8 (sub:i16 16:i16, CX:i16:$amt))), (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (trunc:i8 CX:i16:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHLD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 67  cost = 1  size = 3
            {
              SDValue N100 = N10.getNode()->getOperand(0);
              SDValue N101 = N10.getNode()->getOperand(1);
              if (N101.getNode()->getOpcode() == ISD::TRUNCATE) {
                SDValue N1010 = N101.getNode()->getOperand(0);
                if (N1010.getNode()->getOpcode() == ISD::SUB) {
                  SDValue N10100 = N1010.getNode()->getOperand(0);
                  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10100.getNode());
                  if (Tmp0) {
                    int64_t CN1 = Tmp0->getSExtValue();
                    if (CN1 == INT64_C(16)) {
                      SDValue N10101 = N1010.getNode()->getOperand(1);
                      SDValue N11 = N1.getNode()->getOperand(1);
                      if (N11.getNode()->getOpcode() == ISD::SHL &&
                          N11.hasOneUse()) {
                        SDValue N110 = N11.getNode()->getOperand(0);
                        if (N110.getNode()->getOpcode() == ISD::LOAD &&
                            N110.hasOneUse() &&
                            IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                            (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                          SDValue Chain110 = N110.getNode()->getOperand(0);
                          if (Predicate_unindexedload(N110.getNode()) &&
                              Predicate_loadi16(N110.getNode())) {
                            SDValue N1101 = N110.getNode()->getOperand(1);
                            SDValue CPTmpN1101_0;
                            SDValue CPTmpN1101_1;
                            SDValue CPTmpN1101_2;
                            SDValue CPTmpN1101_3;
                            SDValue CPTmpN1101_4;
                            if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                              SDValue N111 = N11.getNode()->getOperand(1);
                              if (N111.getNode()->getOpcode() == ISD::TRUNCATE) {
                                SDValue N1110 = N111.getNode()->getOperand(0);
                                if (N10101 == N1110) {
                                  SDValue N2 = N->getOperand(2);
                                  if (N1101 == N2 &&
                                      N1.getValueType() == MVT::i16 &&
                                      N101.getValueType() == MVT::i8 &&
                                      N1010.getValueType() == MVT::i16 &&
                                      N111.getValueType() == MVT::i8 &&
                                      N1110.getValueType() == MVT::i16) {
                                    SDNode *Result = Emit_221(N, X86::SHLD16mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                                    return Result;
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (or:i32 (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8:$amt), (shl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHRD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 61  cost = 1  size = 3
            if (N10.hasOneUse()) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::LOAD &&
                  N100.hasOneUse() &&
                  IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                  (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
                SDValue Chain100 = N100.getNode()->getOperand(0);
                if (Predicate_unindexedload(N100.getNode()) &&
                    Predicate_loadi32(N100.getNode())) {
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  SDValue CPTmpN1001_0;
                  SDValue CPTmpN1001_1;
                  SDValue CPTmpN1001_2;
                  SDValue CPTmpN1001_3;
                  SDValue CPTmpN1001_4;
                  if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                    SDValue N101 = N10.getNode()->getOperand(1);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::SUB) {
                        SDValue N1110 = N111.getNode()->getOperand(0);
                        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1110.getNode());
                        if (Tmp0) {
                          int64_t CN1 = Tmp0->getSExtValue();
                          if (CN1 == INT64_C(32)) {
                            SDValue N1111 = N111.getNode()->getOperand(1);
                            if (N101 == N1111) {
                              SDValue N2 = N->getOperand(2);
                              if (N1001 == N2 &&
                                  N1.getValueType() == MVT::i32 &&
                                  N101.getValueType() == MVT::i8 &&
                                  N111.getValueType() == MVT::i8) {
                                SDNode *Result = Emit_202(N, X86::SHRD32mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                                return Result;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i32 (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8:$amt), (srl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHLD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
          // Pattern complexity = 61  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SHL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N11.getNode()->getOpcode() == ISD::SRL) {
                    SDValue N110 = N11.getNode()->getOperand(0);
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N111.getNode()->getOpcode() == ISD::SUB) {
                      SDValue N1110 = N111.getNode()->getOperand(0);
                      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1110.getNode());
                      if (Tmp0) {
                        int64_t CN1 = Tmp0->getSExtValue();
                        if (CN1 == INT64_C(32)) {
                          SDValue N1111 = N111.getNode()->getOperand(1);
                          if (N101 == N1111) {
                            SDValue N2 = N->getOperand(2);
                            if (N1001 == N2 &&
                                N1.getValueType() == MVT::i32 &&
                                N101.getValueType() == MVT::i8 &&
                                N111.getValueType() == MVT::i8) {
                              SDNode *Result = Emit_202(N, X86::SHLD32mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                              return Result;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i16 (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8:$amt), (shl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHRD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
          // Pattern complexity = 61  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SRL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi16(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N11.getNode()->getOpcode() == ISD::SHL) {
                    SDValue N110 = N11.getNode()->getOperand(0);
                    SDValue N111 = N11.getNode()->getOperand(1);
                    if (N111.getNode()->getOpcode() == ISD::SUB) {
                      SDValue N1110 = N111.getNode()->getOperand(0);
                      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1110.getNode());
                      if (Tmp0) {
                        int64_t CN1 = Tmp0->getSExtValue();
                        if (CN1 == INT64_C(16)) {
                          SDValue N1111 = N111.getNode()->getOperand(1);
                          if (N101 == N1111) {
                            SDValue N2 = N->getOperand(2);
                            if (N1001 == N2 &&
                                N1.getValueType() == MVT::i16 &&
                                N101.getValueType() == MVT::i8 &&
                                N111.getValueType() == MVT::i8) {
                              SDNode *Result = Emit_202(N, X86::SHRD16mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                              return Result;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
          if (N10.getNode()->getOpcode() == ISD::SHL) {

            // Pattern: (st:isVoid (or:i16 (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8:$amt), (srl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt))), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHLD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 61  cost = 1  size = 3
            if (N10.hasOneUse()) {
              SDValue N100 = N10.getNode()->getOperand(0);
              if (N100.getNode()->getOpcode() == ISD::LOAD &&
                  N100.hasOneUse() &&
                  IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                  (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
                SDValue Chain100 = N100.getNode()->getOperand(0);
                if (Predicate_unindexedload(N100.getNode()) &&
                    Predicate_loadi16(N100.getNode())) {
                  SDValue N1001 = N100.getNode()->getOperand(1);
                  SDValue CPTmpN1001_0;
                  SDValue CPTmpN1001_1;
                  SDValue CPTmpN1001_2;
                  SDValue CPTmpN1001_3;
                  SDValue CPTmpN1001_4;
                  if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                    SDValue N101 = N10.getNode()->getOperand(1);
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::SUB) {
                        SDValue N1110 = N111.getNode()->getOperand(0);
                        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1110.getNode());
                        if (Tmp0) {
                          int64_t CN1 = Tmp0->getSExtValue();
                          if (CN1 == INT64_C(16)) {
                            SDValue N1111 = N111.getNode()->getOperand(1);
                            if (N101 == N1111) {
                              SDValue N2 = N->getOperand(2);
                              if (N1001 == N2 &&
                                  N1.getValueType() == MVT::i16 &&
                                  N101.getValueType() == MVT::i8 &&
                                  N111.getValueType() == MVT::i8) {
                                SDNode *Result = Emit_202(N, X86::SHLD16mrCL, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                                return Result;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (or:i32 (shl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt)), (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8:$amt)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHRD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 61  cost = 1  size = 3
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::SUB) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1010.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(32)) {
                  SDValue N1011 = N101.getNode()->getOperand(1);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N11.getNode()->getOpcode() == ISD::SRL &&
                      N11.hasOneUse()) {
                    SDValue N110 = N11.getNode()->getOperand(0);
                    if (N110.getNode()->getOpcode() == ISD::LOAD &&
                        N110.hasOneUse() &&
                        IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                        (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                      SDValue Chain110 = N110.getNode()->getOperand(0);
                      if (Predicate_unindexedload(N110.getNode()) &&
                          Predicate_loadi32(N110.getNode())) {
                        SDValue N1101 = N110.getNode()->getOperand(1);
                        SDValue CPTmpN1101_0;
                        SDValue CPTmpN1101_1;
                        SDValue CPTmpN1101_2;
                        SDValue CPTmpN1101_3;
                        SDValue CPTmpN1101_4;
                        if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                          SDValue N111 = N11.getNode()->getOperand(1);
                          if (N1011 == N111) {
                            SDValue N2 = N->getOperand(2);
                            if (N1101 == N2 &&
                                N1.getValueType() == MVT::i32 &&
                                N101.getValueType() == MVT::i8 &&
                                N111.getValueType() == MVT::i8) {
                              SDNode *Result = Emit_218(N, X86::SHRD32mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                              return Result;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i32 (srl:i32 GR32:i32:$src2, (sub:i8 32:i8, CL:i8:$amt)), (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8:$amt)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHLD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
          // Pattern complexity = 61  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SRL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::SUB) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1010.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(32)) {
                  SDValue N1011 = N101.getNode()->getOperand(1);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N11.getNode()->getOpcode() == ISD::SHL &&
                      N11.hasOneUse()) {
                    SDValue N110 = N11.getNode()->getOperand(0);
                    if (N110.getNode()->getOpcode() == ISD::LOAD &&
                        N110.hasOneUse() &&
                        IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                        (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                      SDValue Chain110 = N110.getNode()->getOperand(0);
                      if (Predicate_unindexedload(N110.getNode()) &&
                          Predicate_loadi32(N110.getNode())) {
                        SDValue N1101 = N110.getNode()->getOperand(1);
                        SDValue CPTmpN1101_0;
                        SDValue CPTmpN1101_1;
                        SDValue CPTmpN1101_2;
                        SDValue CPTmpN1101_3;
                        SDValue CPTmpN1101_4;
                        if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                          SDValue N111 = N11.getNode()->getOperand(1);
                          if (N1011 == N111) {
                            SDValue N2 = N->getOperand(2);
                            if (N1101 == N2 &&
                                N1.getValueType() == MVT::i32 &&
                                N101.getValueType() == MVT::i8 &&
                                N111.getValueType() == MVT::i8) {
                              SDNode *Result = Emit_218(N, X86::SHLD32mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                              return Result;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i16 (shl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt)), (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8:$amt)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHRD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
          // Pattern complexity = 61  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SHL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::SUB) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1010.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1011 = N101.getNode()->getOperand(1);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N11.getNode()->getOpcode() == ISD::SRL &&
                      N11.hasOneUse()) {
                    SDValue N110 = N11.getNode()->getOperand(0);
                    if (N110.getNode()->getOpcode() == ISD::LOAD &&
                        N110.hasOneUse() &&
                        IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                        (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                      SDValue Chain110 = N110.getNode()->getOperand(0);
                      if (Predicate_unindexedload(N110.getNode()) &&
                          Predicate_loadi16(N110.getNode())) {
                        SDValue N1101 = N110.getNode()->getOperand(1);
                        SDValue CPTmpN1101_0;
                        SDValue CPTmpN1101_1;
                        SDValue CPTmpN1101_2;
                        SDValue CPTmpN1101_3;
                        SDValue CPTmpN1101_4;
                        if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                          SDValue N111 = N11.getNode()->getOperand(1);
                          if (N1011 == N111) {
                            SDValue N2 = N->getOperand(2);
                            if (N1101 == N2 &&
                                N1.getValueType() == MVT::i16 &&
                                N101.getValueType() == MVT::i8 &&
                                N111.getValueType() == MVT::i8) {
                              SDNode *Result = Emit_218(N, X86::SHRD16mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                              return Result;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }

          // Pattern: (st:isVoid (or:i16 (srl:i16 GR16:i16:$src2, (sub:i8 16:i8, CL:i8:$amt)), (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8:$amt)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SHLD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
          // Pattern complexity = 61  cost = 1  size = 3
          if (N10.getNode()->getOpcode() == ISD::SRL) {
            SDValue N100 = N10.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::SUB) {
              SDValue N1010 = N101.getNode()->getOperand(0);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1010.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(16)) {
                  SDValue N1011 = N101.getNode()->getOperand(1);
                  SDValue N11 = N1.getNode()->getOperand(1);
                  if (N11.getNode()->getOpcode() == ISD::SHL &&
                      N11.hasOneUse()) {
                    SDValue N110 = N11.getNode()->getOperand(0);
                    if (N110.getNode()->getOpcode() == ISD::LOAD &&
                        N110.hasOneUse() &&
                        IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                        (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                      SDValue Chain110 = N110.getNode()->getOperand(0);
                      if (Predicate_unindexedload(N110.getNode()) &&
                          Predicate_loadi16(N110.getNode())) {
                        SDValue N1101 = N110.getNode()->getOperand(1);
                        SDValue CPTmpN1101_0;
                        SDValue CPTmpN1101_1;
                        SDValue CPTmpN1101_2;
                        SDValue CPTmpN1101_3;
                        SDValue CPTmpN1101_4;
                        if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                          SDValue N111 = N11.getNode()->getOperand(1);
                          if (N1011 == N111) {
                            SDValue N2 = N->getOperand(2);
                            if (N1101 == N2 &&
                                N1.getValueType() == MVT::i16 &&
                                N101.getValueType() == MVT::i8 &&
                                N111.getValueType() == MVT::i8) {
                              SDNode *Result = Emit_218(N, X86::SHLD16mrCL, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                              return Result;
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i32 (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$amt1), (shl:i32 GR32:i32:$src2, (imm:i8):$amt2))<<P:Predicate_shrd>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHRD32mri8:isVoid addr:iPTR:$dst, GR32:i32:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shrd(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SRL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::Constant) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1001 == N2 &&
                            N1.getValueType() == MVT::i32 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_204(N, X86::SHRD32mri8, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i32 (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$amt1), (srl:i32 GR32:i32:$src2, (imm:i8):$amt2))<<P:Predicate_shld>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHLD32mri8:isVoid addr:iPTR:$dst, GR32:i32:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shld(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SHL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi32(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::Constant) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1001 == N2 &&
                            N1.getValueType() == MVT::i32 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_204(N, X86::SHLD32mri8, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i16 (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$amt1), (shl:i16 GR16:i16:$src2, (imm:i8):$amt2))<<P:Predicate_shrd>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHRD16mri8:isVoid addr:iPTR:$dst, GR16:i16:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shrd(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SRL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi16(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::Constant) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1001 == N2 &&
                            N1.getValueType() == MVT::i16 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_204(N, X86::SHRD16mri8, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i16 (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$amt1), (srl:i16 GR16:i16:$src2, (imm:i8):$amt2))<<P:Predicate_shld>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHLD16mri8:isVoid addr:iPTR:$dst, GR16:i16:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shld(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SHL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_loadi16(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::Constant) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1001 == N2 &&
                            N1.getValueType() == MVT::i16 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_204(N, X86::SHLD16mri8, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i64 (srl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$amt1), (shl:i64 GR64:i64:$src2, (imm:i8):$amt2))<<P:Predicate_shrd>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHRD64mri8:isVoid addr:iPTR:$dst, GR64:i64:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shrd(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SRL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::Constant) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SHL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1001 == N2 &&
                            N1.getValueType() == MVT::i64 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_204(N, X86::SHRD64mri8, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i64 (shl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$amt1), (srl:i64 GR64:i64:$src2, (imm:i8):$amt2))<<P:Predicate_shld>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHLD64mri8:isVoid addr:iPTR:$dst, GR64:i64:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shld(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SHL &&
              N10.hasOneUse()) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N100.getNode()->getOpcode() == ISD::LOAD &&
                N100.hasOneUse() &&
                IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
                (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
              SDValue Chain100 = N100.getNode()->getOperand(0);
              if (Predicate_unindexedload(N100.getNode()) &&
                  Predicate_load(N100.getNode()) &&
                  Predicate_loadi64(N100.getNode())) {
                SDValue N1001 = N100.getNode()->getOperand(1);
                SDValue CPTmpN1001_0;
                SDValue CPTmpN1001_1;
                SDValue CPTmpN1001_2;
                SDValue CPTmpN1001_3;
                SDValue CPTmpN1001_4;
                if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                  SDValue N101 = N10.getNode()->getOperand(1);
                  if (N101.getNode()->getOpcode() == ISD::Constant) {
                    SDValue N11 = N1.getNode()->getOperand(1);
                    if (N11.getNode()->getOpcode() == ISD::SRL) {
                      SDValue N110 = N11.getNode()->getOperand(0);
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1001 == N2 &&
                            N1.getValueType() == MVT::i64 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_204(N, X86::SHLD64mri8, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i32 (shl:i32 GR32:i32:$src2, (imm:i8):$amt2), (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$amt1))<<P:Predicate_shrd>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHRD32mri8:isVoid addr:iPTR:$dst, GR32:i32:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shrd(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SHL) {
            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 (N11.getNode()->getOpcode() == ISD::SRL &&
                  N11.hasOneUse()) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::LOAD &&
                    N110.hasOneUse() &&
                    IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                    (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                  SDValue Chain110 = N110.getNode()->getOperand(0);
                  if (Predicate_unindexedload(N110.getNode()) &&
                      Predicate_loadi32(N110.getNode())) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    SDValue CPTmpN1101_0;
                    SDValue CPTmpN1101_1;
                    SDValue CPTmpN1101_2;
                    SDValue CPTmpN1101_3;
                    SDValue CPTmpN1101_4;
                    if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1101 == N2 &&
                            N1.getValueType() == MVT::i32 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_220(N, X86::SHRD32mri8, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i32 (srl:i32 GR32:i32:$src2, (imm:i8):$amt2), (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$amt1))<<P:Predicate_shld>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHLD32mri8:isVoid addr:iPTR:$dst, GR32:i32:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shld(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(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) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SHL &&
                  N11.hasOneUse()) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::LOAD &&
                    N110.hasOneUse() &&
                    IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                    (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                  SDValue Chain110 = N110.getNode()->getOperand(0);
                  if (Predicate_unindexedload(N110.getNode()) &&
                      Predicate_loadi32(N110.getNode())) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    SDValue CPTmpN1101_0;
                    SDValue CPTmpN1101_1;
                    SDValue CPTmpN1101_2;
                    SDValue CPTmpN1101_3;
                    SDValue CPTmpN1101_4;
                    if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1101 == N2 &&
                            N1.getValueType() == MVT::i32 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_220(N, X86::SHLD32mri8, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i16 (shl:i16 GR16:i16:$src2, (imm:i8):$amt2), (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$amt1))<<P:Predicate_shrd>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHRD16mri8:isVoid addr:iPTR:$dst, GR16:i16:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shrd(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SHL) {
            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 (N11.getNode()->getOpcode() == ISD::SRL &&
                  N11.hasOneUse()) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::LOAD &&
                    N110.hasOneUse() &&
                    IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                    (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                  SDValue Chain110 = N110.getNode()->getOperand(0);
                  if (Predicate_unindexedload(N110.getNode()) &&
                      Predicate_loadi16(N110.getNode())) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    SDValue CPTmpN1101_0;
                    SDValue CPTmpN1101_1;
                    SDValue CPTmpN1101_2;
                    SDValue CPTmpN1101_3;
                    SDValue CPTmpN1101_4;
                    if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1101 == N2 &&
                            N1.getValueType() == MVT::i16 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_220(N, X86::SHRD16mri8, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i16 (srl:i16 GR16:i16:$src2, (imm:i8):$amt2), (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$amt1))<<P:Predicate_shld>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHLD16mri8:isVoid addr:iPTR:$dst, GR16:i16:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shld(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(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) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SHL &&
                  N11.hasOneUse()) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::LOAD &&
                    N110.hasOneUse() &&
                    IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                    (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                  SDValue Chain110 = N110.getNode()->getOperand(0);
                  if (Predicate_unindexedload(N110.getNode()) &&
                      Predicate_loadi16(N110.getNode())) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    SDValue CPTmpN1101_0;
                    SDValue CPTmpN1101_1;
                    SDValue CPTmpN1101_2;
                    SDValue CPTmpN1101_3;
                    SDValue CPTmpN1101_4;
                    if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1101 == N2 &&
                            N1.getValueType() == MVT::i16 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_220(N, X86::SHLD16mri8, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i64 (shl:i64 GR64:i64:$src2, (imm:i8):$amt2), (srl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$amt1))<<P:Predicate_shrd>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHRD64mri8:isVoid addr:iPTR:$dst, GR64:i64:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shrd(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::SHL) {
            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 (N11.getNode()->getOpcode() == ISD::SRL &&
                  N11.hasOneUse()) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::LOAD &&
                    N110.hasOneUse() &&
                    IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                    (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                  SDValue Chain110 = N110.getNode()->getOperand(0);
                  if (Predicate_unindexedload(N110.getNode()) &&
                      Predicate_load(N110.getNode()) &&
                      Predicate_loadi64(N110.getNode())) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    SDValue CPTmpN1101_0;
                    SDValue CPTmpN1101_1;
                    SDValue CPTmpN1101_2;
                    SDValue CPTmpN1101_3;
                    SDValue CPTmpN1101_4;
                    if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1101 == N2 &&
                            N1.getValueType() == MVT::i64 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_220(N, X86::SHRD64mri8, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

        // Pattern: (st:isVoid (or:i64 (srl:i64 GR64:i64:$src2, (imm:i8):$amt2), (shl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$amt1))<<P:Predicate_shld>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (SHLD64mri8:isVoid addr:iPTR:$dst, GR64:i64:$src2, (imm:i8):$amt1)
        // Pattern complexity = 60  cost = 1  size = 3
        if (Predicate_shld(N1.getNode())) {
          SDValue N10 = N1.getNode()->getOperand(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) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::SHL &&
                  N11.hasOneUse()) {
                SDValue N110 = N11.getNode()->getOperand(0);
                if (N110.getNode()->getOpcode() == ISD::LOAD &&
                    N110.hasOneUse() &&
                    IsLegalAndProfitableToFold(N110.getNode(), N11.getNode(), N) &&
                    (Chain.getNode() == N110.getNode() || IsChainCompatible(Chain.getNode(), N110.getNode()))) {
                  SDValue Chain110 = N110.getNode()->getOperand(0);
                  if (Predicate_unindexedload(N110.getNode()) &&
                      Predicate_load(N110.getNode()) &&
                      Predicate_loadi64(N110.getNode())) {
                    SDValue N1101 = N110.getNode()->getOperand(1);
                    SDValue CPTmpN1101_0;
                    SDValue CPTmpN1101_1;
                    SDValue CPTmpN1101_2;
                    SDValue CPTmpN1101_3;
                    SDValue CPTmpN1101_4;
                    if (SelectAddr(N, N1101, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4)) {
                      SDValue N111 = N11.getNode()->getOperand(1);
                      if (N111.getNode()->getOpcode() == ISD::Constant) {
                        SDValue N2 = N->getOperand(2);
                        if (N1101 == N2 &&
                            N1.getValueType() == MVT::i64 &&
                            N101.getValueType() == MVT::i8 &&
                            N111.getValueType() == MVT::i8) {
                          SDNode *Result = Emit_220(N, X86::SHLD64mri8, CPTmpN1101_0, CPTmpN1101_1, CPTmpN1101_2, CPTmpN1101_3, CPTmpN1101_4);
                          return Result;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (shl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SHL8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SHL16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SHL32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (srl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SHR8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SHR16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SHR32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (sra:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SAR8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sra:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SAR16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sra:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (and:i8 CL:i8:$amt, 31:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 55  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                  if (Tmp0 &&
                      CheckAndMask(N110, Tmp0, INT64_C(31))) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_201(N, X86::SAR32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (shl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (and:i8 CL:i8:$amt, 63:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHL64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 55  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                if (Tmp0 &&
                    CheckAndMask(N110, Tmp0, INT64_C(63))) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_201(N, X86::SHL64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (srl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (and:i8 CL:i8:$amt, 63:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHR64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 55  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                if (Tmp0 &&
                    CheckAndMask(N110, Tmp0, INT64_C(63))) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_201(N, X86::SHR64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (sra:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (and:i8 CL:i8:$amt, 63:i8)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SAR64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 55  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              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 *Tmp0 = dyn_cast<ConstantSDNode>(N111.getNode());
                if (Tmp0 &&
                    CheckAndMask(N110, Tmp0, INT64_C(63))) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_201(N, X86::SAR64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        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::LOAD &&
                N11.hasOneUse() &&
                IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
                (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
              SDValue Chain11 = N11.getNode()->getOperand(0);
              if (Predicate_unindexedload(N11.getNode())) {

                // Pattern: (st:isVoid (sub:i8 0:i8, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (NEG8m:isVoid addr:iPTR:$dst)
                // Pattern complexity = 52  cost = 1  size = 2
                if (Predicate_load(N11.getNode()) &&
                    Predicate_loadi8(N11.getNode())) {
                  SDValue N111 = N11.getNode()->getOperand(1);
                  SDValue CPTmpN111_0;
                  SDValue CPTmpN111_1;
                  SDValue CPTmpN111_2;
                  SDValue CPTmpN111_3;
                  SDValue CPTmpN111_4;
                  if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                    SDValue N2 = N->getOperand(2);
                    if (N111 == N2 &&
                        N1.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_173(N, X86::NEG8m, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                      return Result;
                    }
                  }
                }

                // Pattern: (st:isVoid (sub:i16 0:i16, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (NEG16m:isVoid addr:iPTR:$dst)
                // Pattern complexity = 52  cost = 1  size = 2
                if (Predicate_loadi16(N11.getNode())) {
                  SDValue N111 = N11.getNode()->getOperand(1);
                  SDValue CPTmpN111_0;
                  SDValue CPTmpN111_1;
                  SDValue CPTmpN111_2;
                  SDValue CPTmpN111_3;
                  SDValue CPTmpN111_4;
                  if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                    SDValue N2 = N->getOperand(2);
                    if (N111 == N2 &&
                        N1.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_173(N, X86::NEG16m, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                      return Result;
                    }
                  }
                }

                // Pattern: (st:isVoid (sub:i32 0:i32, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (NEG32m:isVoid addr:iPTR:$dst)
                // Pattern complexity = 52  cost = 1  size = 2
                if (Predicate_loadi32(N11.getNode())) {
                  SDValue N111 = N11.getNode()->getOperand(1);
                  SDValue CPTmpN111_0;
                  SDValue CPTmpN111_1;
                  SDValue CPTmpN111_2;
                  SDValue CPTmpN111_3;
                  SDValue CPTmpN111_4;
                  if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                    SDValue N2 = N->getOperand(2);
                    if (N111 == N2 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_173(N, X86::NEG32m, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (add:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC8m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi8(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_175(N, X86::INC8m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i16), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (INC16m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_175(N, X86::INC16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (INC32m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_175(N, X86::INC32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (add:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, -1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (DEC8m:isVoid addr:iPTR:$dst)
  // Pattern complexity = 52  cost = 1  size = 2
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi8(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(-1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_175(N, X86::DEC8m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, -1:i16), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (DEC16m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(-1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_175(N, X86::DEC16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, -1:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (DEC32m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(-1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_175(N, X86::DEC32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);

      // Pattern: (st:isVoid (sub:i64 0:i64, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (NEG64m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        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::LOAD &&
                N11.hasOneUse() &&
                IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
                (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
              SDValue Chain11 = N11.getNode()->getOperand(0);
              if (Predicate_unindexedload(N11.getNode()) &&
                  Predicate_load(N11.getNode()) &&
                  Predicate_loadi64(N11.getNode())) {
                SDValue N111 = N11.getNode()->getOperand(1);
                SDValue CPTmpN111_0;
                SDValue CPTmpN111_1;
                SDValue CPTmpN111_2;
                SDValue CPTmpN111_3;
                SDValue CPTmpN111_4;
                if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                  SDValue N2 = N->getOperand(2);
                  if (N111 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_173(N, X86::NEG64m, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();

                // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i64), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (INC64m:isVoid addr:iPTR:$dst)
                // Pattern complexity = 52  cost = 1  size = 2
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_175(N, X86::INC64m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, -1:i64), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (DEC64m:isVoid addr:iPTR:$dst)
                // Pattern complexity = 52  cost = 1  size = 2
                if (CN1 == INT64_C(-1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_175(N, X86::DEC64m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i16), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (INC64_16m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_175(N, X86::INC64_16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (INC64_32m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_175(N, X86::INC64_32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, -1:i16), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (DEC64_16m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(-1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_175(N, X86::DEC64_16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, -1:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (DEC64_32m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 2
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(-1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_175(N, X86::DEC64_32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (shl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL8m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SHL8m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL16m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SHL16m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL32m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SHL32m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (srl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR8m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SHR8m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR16m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SHR16m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR32m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SHR32m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (sra:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR8m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SAR8m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sra:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR16m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SAR16m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sra:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR32m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::SAR32m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ROTL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (rotl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL8m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::ROL8m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL16m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::ROL16m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL32m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::ROL32m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ROTR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (rotr:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR8m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i8 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::ROR8m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotr:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR16m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::ROR16m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotr:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR32m1:isVoid addr:iPTR:$dst)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(1)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32 &&
                        N11.getValueType() == MVT::i8) {
                      SDNode *Result = Emit_174(N, X86::ROR32m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (shl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHL64m1:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_174(N, X86::SHL64m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (srl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHR64m1:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_174(N, X86::SHR64m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (sra:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SAR64m1:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_174(N, X86::SAR64m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (rotl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ROL64m1:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ROTL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_174(N, X86::ROL64m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (rotr:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ROR64m1:isVoid addr:iPTR:$dst)
      // Pattern complexity = 52  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ROTR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(1)) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_174(N, X86::ROR64m1, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 128:i16), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB16mi8:isVoid addr:iPTR:$dst, -128:i16)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(128)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i16) {
                      SDNode *Result = Emit_199(N, X86::SUB16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 128:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB32mi8:isVoid addr:iPTR:$dst, -128:i32)
            // Pattern complexity = 52  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();
                  if (CN1 == INT64_C(128)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i32) {
                      SDNode *Result = Emit_200(N, X86::SUB32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
                if (Tmp0) {
                  int64_t CN1 = Tmp0->getSExtValue();

                  // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 128:i64), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                  // Emits: (SUB64mi8:isVoid addr:iPTR:$dst, -128:i64)
                  // Pattern complexity = 52  cost = 1  size = 3
                  if (CN1 == INT64_C(128)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i64) {
                      SDNode *Result = Emit_208(N, X86::SUB64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }

                  // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 34359738368:i64), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                  // Emits: (SUB64mi32:isVoid addr:iPTR:$dst, -2147483648:i64)
                  // Pattern complexity = 52  cost = 1  size = 3
                  if (CN1 == INT64_C(34359738368)) {
                    SDValue N2 = N->getOperand(2);
                    if (N101 == N2 &&
                        N1.getValueType() == MVT::i64) {
                      SDNode *Result = Emit_209(N, X86::SUB64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (xor:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8)<<P:Predicate_immAllOnes>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (NOT8m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 51  cost = 1  size = 2
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_immAllOnes(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_174(N, X86::NOT8m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (xor:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_immAllOnes>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (NOT16m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 51  cost = 1  size = 2
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_immAllOnes(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_174(N, X86::NOT16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (xor:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_immAllOnes>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (NOT32m:isVoid addr:iPTR:$dst)
            // Pattern complexity = 51  cost = 1  size = 2
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_immAllOnes(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_174(N, X86::NOT32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (and:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::AND16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (and:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::AND32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (or:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::OR16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (or:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::OR32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (xor:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::XOR16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (xor:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::XOR32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::ADD16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::ADD32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (adde:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_186(N, X86::ADC16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (adde:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_187(N, X86::ADC32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (sub:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::SUB16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (sub:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::SUB32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUBE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (sube:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB16mi8:isVoid addr:iPTR:$dst, (imm:i16):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_186(N, X86::SBB16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (sube:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB32mi8:isVoid addr:iPTR:$dst, (imm:i32):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_187(N, X86::SBB32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::ADD64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::ADD64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant &&
                  Predicate_i64immSExt8(N11.getNode())) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64) {

                  // Pattern: (st:isVoid (adde:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                  // Emits: (ADC64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                  // Pattern complexity = 51  cost = 1  size = 3
                  {
                    SDNode *Result = Emit_191(N, X86::ADC64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }

                  // Pattern: (st:isVoid (adde:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                  // Emits: (ADC64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                  // Pattern complexity = 51  cost = 1  size = 3
                  SDNode *Result = Emit_191(N, X86::ADC64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (sub:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::SUB64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (sub:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::SUB64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUBE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (sube:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_191(N, X86::SBB64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (sube:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_191(N, X86::SBB64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (xor:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_immAllOnes>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (NOT64m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 51  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant &&
                  Predicate_immAllOnes(N11.getNode())) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_174(N, X86::NOT64m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {

            // Pattern: (st:isVoid (and:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src)
            // Pattern complexity = 51  cost = 1  size = 3
            {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::AND64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (and:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::AND64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {

            // Pattern: (st:isVoid (or:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src)
            // Pattern complexity = 51  cost = 1  size = 3
            {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::OR64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (or:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::OR64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {

            // Pattern: (st:isVoid (xor:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR64mi8:isVoid addr:iPTR:$dst, (imm:i64):$src)
            // Pattern complexity = 51  cost = 1  size = 3
            {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::XOR64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (xor:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi64(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::XOR64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86add_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD16mi8:isVoid addr:iPTR:$dst, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::ADD16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD32mi8:isVoid addr:iPTR:$dst, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::ADD32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86sub_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB16mi8:isVoid addr:iPTR:$dst, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::SUB16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86sub_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB32mi8:isVoid addr:iPTR:$dst, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::SUB32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86or_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR16mi8:isVoid addr:iPTR:$dst, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::OR16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR32mi8:isVoid addr:iPTR:$dst, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::OR32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86xor_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR16mi8:isVoid addr:iPTR:$dst, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::XOR16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR32mi8:isVoid addr:iPTR:$dst, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::XOR32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86and_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND16mi8:isVoid addr:iPTR:$dst, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i16immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::AND16mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND32mi8:isVoid addr:iPTR:$dst, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Pattern complexity = 51  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i32immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::AND32mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (X86add_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD64mi8:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::ADD64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (X86add_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD64mi32:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::ADD64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (X86sub_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB64mi8:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::SUB64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (X86sub_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB64mi32:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::SUB64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (X86or_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR64mi8:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::OR64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (X86or_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR64mi32:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::OR64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (X86xor_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR64mi8:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::XOR64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (X86xor_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR64mi32:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::XOR64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (st:isVoid (X86and_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND64mi8:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt8(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::AND64mi8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }

                // Pattern: (st:isVoid (X86and_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND64mi32:isVoid addr:iPTR:$dst, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
                // Pattern complexity = 51  cost = 1  size = 3
                if (Predicate_i64immSExt32(N11.getNode())) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i64) {
                    SDNode *Result = Emit_190(N, X86::AND64mi32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR128:v4i32:$src2)<<P:Predicate_movlp>>, addr:iPTR:$src1)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOVLPSmr:isVoid addr:iPTR:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 51  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::VECTOR_SHUFFLE &&
          N1.hasOneUse() &&
          Predicate_movlp(N1.getNode())) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            N10.hasOneUse()) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::LOAD &&
              N100.hasOneUse() &&
              IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N) &&
              (Chain.getNode() == N100.getNode() || IsChainCompatible(Chain.getNode(), N100.getNode()))) {
            SDValue Chain100 = N100.getNode()->getOperand(0);
            if (Predicate_unindexedload(N100.getNode()) &&
                Predicate_load(N100.getNode())) {
              SDValue N1001 = N100.getNode()->getOperand(1);
              SDValue CPTmpN1001_0;
              SDValue CPTmpN1001_1;
              SDValue CPTmpN1001_2;
              SDValue CPTmpN1001_3;
              SDValue CPTmpN1001_4;
              if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N1001 == N2 &&
                    N1.getValueType() == MVT::v4i32 &&
                    N100.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_214(N, X86::MOVLPSmr, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (and:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::AND8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (and:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND16mi:isVoid addr:iPTR:$dst, (imm:i16):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::AND16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (and:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND32mi:isVoid addr:iPTR:$dst, (imm:i32):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::AND32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (or:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::OR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (or:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR16mi:isVoid addr:iPTR:$dst, (imm:i16):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::OR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (or:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR32mi:isVoid addr:iPTR:$dst, (imm:i32):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::OR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (xor:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::XOR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (xor:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR16mi:isVoid addr:iPTR:$dst, (imm:i16):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::XOR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (xor:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR32mi:isVoid addr:iPTR:$dst, (imm:i32):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::XOR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (shl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SHL8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL16mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SHL16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL32mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SHL32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (srl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SHR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR16mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SHR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR32mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SHR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (sra:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SAR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sra:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR16mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SAR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sra:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR32mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::SAR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ROTL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (rotl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::ROL8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL16mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::ROL16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL32mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::ROL32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ROTR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (rotr:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::ROR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotr:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR16mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::ROR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (rotr:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR32mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32 &&
                      N11.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_181(N, X86::ROR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shld:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, (imm:i8):$src3), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHLD32mri8:isVoid addr:iPTR:$dst, GR32:i32:$src2, (imm:i8):$src3)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHLD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              if (N12.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N12.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_183(N, X86::SHLD32mri8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shrd:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, (imm:i8):$src3), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHRD32mri8:isVoid addr:iPTR:$dst, GR32:i32:$src2, (imm:i8):$src3)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHRD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              if (N12.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N12.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_183(N, X86::SHRD32mri8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shld:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, (imm:i8):$src3), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHLD16mri8:isVoid addr:iPTR:$dst, GR16:i16:$src2, (imm:i8):$src3)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHLD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              if (N12.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N12.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_183(N, X86::SHLD16mri8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shrd:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, (imm:i8):$src3), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHRD16mri8:isVoid addr:iPTR:$dst, GR16:i16:$src2, (imm:i8):$src3)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHRD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              if (N12.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N12.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_183(N, X86::SHRD16mri8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (add:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::ADD8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::ADD16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::ADD32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (adde:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADC8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_185(N, X86::ADC8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (adde:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADC16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_186(N, X86::ADC16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (adde:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADC32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_187(N, X86::ADC32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (sub:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::SUB8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sub:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::SUB16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sub:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::SUB32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUBE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (sube:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SBB8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_185(N, X86::SBB8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sube:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SBB16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_186(N, X86::SBB16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (sube:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SBB32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_187(N, X86::SBB32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (shl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHL64mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_181(N, X86::SHL64mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (srl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHR64mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_181(N, X86::SHR64mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (sra:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SAR64mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_181(N, X86::SAR64mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (rotl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ROL64mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ROTL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_181(N, X86::ROL64mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (rotr:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i8):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ROR64mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ROTR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              if (N11.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_181(N, X86::ROR64mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shld:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, (imm:i8):$src3), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHLD64mri8:isVoid addr:iPTR:$dst, GR64:i64:$src2, (imm:i8):$src3)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHLD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              if (N12.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N12.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_183(N, X86::SHLD64mri8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shrd:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, (imm:i8):$src3), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHRD64mri8:isVoid addr:iPTR:$dst, GR64:i64:$src2, (imm:i8):$src3)
      // Pattern complexity = 50  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHRD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              if (N12.getNode()->getOpcode() == ISD::Constant) {
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i64 &&
                    N12.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_183(N, X86::SHRD64mri8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86add_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::ADD8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::ADD16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::ADD32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86sub_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::SUB8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86sub_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::SUB16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86sub_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::SUB32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86or_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::OR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::OR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::OR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86xor_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::XOR8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::XOR16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::XOR32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86and_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND8mi:isVoid addr:iPTR:$dst, (imm:i8):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i8) {
                    SDNode *Result = Emit_177(N, X86::AND8mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND16mi:isVoid addr:iPTR:$dst, (imm:i16):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i16) {
                    SDNode *Result = Emit_178(N, X86::AND16mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND32mi:isVoid addr:iPTR:$dst, (imm:i32):$src2)
            // Pattern complexity = 50  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                if (N11.getNode()->getOpcode() == ISD::Constant) {
                  SDValue N2 = N->getOperand(2);
                  if (N101 == N2 &&
                      N1.getValueType() == MVT::i32) {
                    SDNode *Result = Emit_179(N, X86::AND32mi, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (vector_shuffle:v4f32 (ld:v4f32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, VR128:v4f32:$src2)<<P:Predicate_movlp>>, addr:iPTR:$src1)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOVLPSmr:isVoid addr:iPTR:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 48  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::VECTOR_SHUFFLE &&
          N1.hasOneUse() &&
          Predicate_movlp(N1.getNode())) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::v4f32) {
                SDNode *Result = Emit_213(N, X86::MOVLPSmr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::VECTOR_SHUFFLE &&
          N1.hasOneUse() &&
          Predicate_movlp(N1.getNode())) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (vector_shuffle:v2f64 (ld:v2f64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, VR128:v2f64:$src2)<<P:Predicate_movlp>>, addr:iPTR:$src1)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (MOVLPDmr:isVoid addr:iPTR:$src1, VR128:v16i8:$src2)
                // Pattern complexity = 48  cost = 1  size = 3
                if (N1.getValueType() == MVT::v2f64) {
                  SDNode *Result = Emit_213(N, X86::MOVLPDmr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (vector_shuffle:v2i64 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>, VR128:v2i64:$src2)<<P:Predicate_movlp>>, addr:iPTR:$src1)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (MOVLPDmr:isVoid addr:iPTR:$src1, VR128:v16i8:$src2)
                // Pattern complexity = 48  cost = 1  size = 3
                if (N1.getValueType() == MVT::v2i64) {
                  SDNode *Result = Emit_213(N, X86::MOVLPDmr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);

      // Pattern: (st:isVoid (X86inc_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC8m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::INC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi8(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i8 &&
                  N10.getValueType() == MVT::i8) {
                SDNode *Result = Emit_206(N, X86::INC8m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86dec_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (DEC8m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::DEC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi8(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i8 &&
                  N10.getValueType() == MVT::i8) {
                SDNode *Result = Emit_206(N, X86::DEC8m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((!Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);

      // Pattern: (st:isVoid (X86inc_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC16m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::INC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i16 &&
                  N10.getValueType() == MVT::i16) {
                SDNode *Result = Emit_206(N, X86::INC16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86dec_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (DEC16m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::DEC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i16 &&
                  N10.getValueType() == MVT::i16) {
                SDNode *Result = Emit_206(N, X86::DEC16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86inc_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC32m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::INC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i32 &&
                  N10.getValueType() == MVT::i32) {
                SDNode *Result = Emit_206(N, X86::INC32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86dec_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (DEC32m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::DEC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i32 &&
                  N10.getValueType() == MVT::i32) {
                SDNode *Result = Emit_206(N, X86::DEC32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);

      // Pattern: (st:isVoid (X86inc_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC64_16m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::INC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i16 &&
                  N10.getValueType() == MVT::i16) {
                SDNode *Result = Emit_206(N, X86::INC64_16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86dec_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (DEC64_16m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::DEC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i16 &&
                  N10.getValueType() == MVT::i16) {
                SDNode *Result = Emit_206(N, X86::DEC64_16m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86inc_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC64_32m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::INC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i32 &&
                  N10.getValueType() == MVT::i32) {
                SDNode *Result = Emit_206(N, X86::INC64_32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86dec_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (DEC64_32m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::DEC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i32 &&
                  N10.getValueType() == MVT::i32) {
                SDNode *Result = Emit_206(N, X86::DEC64_32m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);

      // Pattern: (st:isVoid (X86inc_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (INC64m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::INC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N10.getValueType() == MVT::i64) {
                SDNode *Result = Emit_206(N, X86::INC64m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86dec_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (DEC64m:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 2
      if (N1.getNode()->getOpcode() == X86ISD::DEC &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N10.getValueType() == MVT::i64) {
                SDNode *Result = Emit_206(N, X86::DEC64m, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (and:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::AND8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (and:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::AND16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (and:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::AND32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (or:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::OR8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (or:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::OR16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (or:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::OR32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (xor:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::XOR8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (xor:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::XOR16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (xor:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::XOR32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (shl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SHL8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (shl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SHL16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (shl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHL32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SHL32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (srl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SHR8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (srl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SHR16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (srl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SHR32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SHR32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (sra:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SAR8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (sra:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SAR16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (sra:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SAR32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::SAR32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ROTL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (rotl:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::ROL8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (rotl:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::ROL16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (rotl:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROL32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::ROL32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ROTR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (rotr:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR8mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::ROR8mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (rotr:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR16mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::ROR16mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (rotr:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ROR32mCL:isVoid addr:iPTR:$dst)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32 &&
                    N11.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_180(N, X86::ROR32mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shld:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHLD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHLD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i32 &&
                  N12.getValueType() == MVT::i8) {
                SDNode *Result = Emit_182(N, X86::SHLD32mrCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shrd:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHRD32mrCL:isVoid addr:iPTR:$dst, GR32:i32:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHRD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi32(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i32 &&
                  N12.getValueType() == MVT::i8) {
                SDNode *Result = Emit_182(N, X86::SHRD32mrCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shld:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHLD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHLD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i16 &&
                  N12.getValueType() == MVT::i8) {
                SDNode *Result = Emit_182(N, X86::SHLD16mrCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shrd:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHRD16mrCL:isVoid addr:iPTR:$dst, GR16:i16:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHRD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_loadi16(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i16 &&
                  N12.getValueType() == MVT::i8) {
                SDNode *Result = Emit_182(N, X86::SHRD16mrCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (add:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::ADD8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (add:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::ADD16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (add:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::ADD32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (adde:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_184(N, X86::ADC8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (adde:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_184(N, X86::ADC16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (adde:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_184(N, X86::ADC32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (sub:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::SUB8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (sub:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::SUB16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (sub:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SUB32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::SUB32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::SUBE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2) {

                // Pattern: (st:isVoid (sube:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_184(N, X86::SBB8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (sube:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_184(N, X86::SBB16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }

                // Pattern: (st:isVoid (sube:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (SBB32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_184(N, X86::SBB32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (add:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ADD64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::ADD64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (adde:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ADC64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_184(N, X86::ADC64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (sub:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SUB64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::SUB64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (sube:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SBB64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SUBE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_184(N, X86::SBB64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (shl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHL64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SHL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_180(N, X86::SHL64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (srl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHR64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_180(N, X86::SHR64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (sra:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SAR64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::SRA &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_180(N, X86::SAR64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (rotl:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ROL64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ROTL &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_180(N, X86::ROL64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (rotr:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ROR64mCL:isVoid addr:iPTR:$dst)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ROTR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N11.getValueType() == MVT::i8) {
                SDNode *Result = Emit_180(N, X86::ROR64mCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shld:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHLD64mrCL:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHLD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N12.getValueType() == MVT::i8) {
                SDNode *Result = Emit_182(N, X86::SHLD64mrCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86shrd:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, CL:i8), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SHRD64mrCL:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SHRD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N12 = N1.getNode()->getOperand(2);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64 &&
                  N12.getValueType() == MVT::i8) {
                SDNode *Result = Emit_182(N, X86::SHRD64mrCL, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (and:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (AND64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::AND64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (or:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (OR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::OR64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (xor:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (XOR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::XOR64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86add_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::ADD8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::ADD16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::ADD32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86sub_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::SUB8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86sub_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::SUB16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86sub_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (SUB32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::SUB32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86or_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::OR8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::OR16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::OR32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86xor_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::XOR8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::XOR16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::XOR32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode())) {

            // Pattern: (st:isVoid (X86and_flag:i8 (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N10.getNode()) &&
                Predicate_loadi8(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_176(N, X86::AND8mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i16 (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_176(N, X86::AND16mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i32 (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N10.getNode())) {
              SDValue N101 = N10.getNode()->getOperand(1);
              SDValue CPTmpN101_0;
              SDValue CPTmpN101_1;
              SDValue CPTmpN101_2;
              SDValue CPTmpN101_3;
              SDValue CPTmpN101_4;
              if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
                SDValue N11 = N1.getNode()->getOperand(1);
                SDValue N2 = N->getOperand(2);
                if (N101 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_176(N, X86::AND32mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86add_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ADD64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::ADD64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86sub_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (SUB64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::SUB &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::SUB64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86or_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (OR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::OR64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86xor_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (XOR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::XOR64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86and_flag:i64 (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (AND64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N10.getNode() || IsChainCompatible(Chain.getNode(), N10.getNode()))) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadi64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
              SDValue N11 = N1.getNode()->getOperand(1);
              SDValue N2 = N->getOperand(2);
              if (N101 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_176(N, X86::AND64mr, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
                return Result;
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2) {

                // Pattern: (st:isVoid (and:i8 GR8:i8:$src, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::AND8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (and:i16 GR16:i16:$src, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::AND16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (and:i32 GR32:i32:$src, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (AND32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::AND32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2) {

                // Pattern: (st:isVoid (or:i8 GR8:i8:$src, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::OR8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (or:i16 GR16:i16:$src, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::OR16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (or:i32 GR32:i32:$src, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (OR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::OR32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2) {

                // Pattern: (st:isVoid (xor:i8 GR8:i8:$src, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::XOR8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (xor:i16 GR16:i16:$src, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::XOR16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (xor:i32 GR32:i32:$src, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (XOR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::XOR32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2) {

                // Pattern: (st:isVoid (add:i8 GR8:i8:$src2, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::ADD8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (add:i16 GR16:i16:$src2, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::ADD16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (add:i32 GR32:i32:$src2, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADD32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::ADD32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2) {

                // Pattern: (st:isVoid (adde:i8 GR8:i8:$src2, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_217(N, X86::ADC8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (adde:i16 GR16:i16:$src2, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_217(N, X86::ADC16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }

                // Pattern: (st:isVoid (adde:i32 GR32:i32:$src2, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (ADC32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
                // Pattern complexity = 47  cost = 1  size = 3
                if (N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_217(N, X86::ADC32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (add:i64 GR64:i64:$src2, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ADD64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::ADD64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (adde:i64 GR64:i64:$src2, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ADC64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::ADDE &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_217(N, X86::ADC64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (and:i64 GR64:i64:$src, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (AND64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::AND64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (or:i64 GR64:i64:$src, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (OR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::OR64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (xor:i64 GR64:i64:$src, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (XOR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::XOR64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode())) {

            // Pattern: (st:isVoid (X86add_flag:i8 GR8:i8:$src2, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N11.getNode()) &&
                Predicate_loadi8(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::ADD8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i16 GR16:i16:$src2, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::ADD16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86add_flag:i32 GR32:i32:$src2, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (ADD32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::ADD32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode())) {

            // Pattern: (st:isVoid (X86or_flag:i8 GR8:i8:$src2, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N11.getNode()) &&
                Predicate_loadi8(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::OR8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i16 GR16:i16:$src2, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::OR16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86or_flag:i32 GR32:i32:$src2, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (OR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::OR32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode())) {

            // Pattern: (st:isVoid (X86xor_flag:i8 GR8:i8:$src2, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N11.getNode()) &&
                Predicate_loadi8(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::XOR8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i16 GR16:i16:$src2, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::XOR16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86xor_flag:i32 GR32:i32:$src2, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (XOR32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::XOR32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode())) {

            // Pattern: (st:isVoid (X86and_flag:i8 GR8:i8:$src2, (ld:i8 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND8mr:isVoid addr:iPTR:$dst, GR8:i8:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_load(N11.getNode()) &&
                Predicate_loadi8(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_216(N, X86::AND8mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i16 GR16:i16:$src2, (ld:i16 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND16mr:isVoid addr:iPTR:$dst, GR16:i16:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi16(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i16) {
                  SDNode *Result = Emit_216(N, X86::AND16mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }

            // Pattern: (st:isVoid (X86and_flag:i32 GR32:i32:$src2, (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (AND32mr:isVoid addr:iPTR:$dst, GR32:i32:$src2)
            // Pattern complexity = 47  cost = 1  size = 3
            if (Predicate_loadi32(N11.getNode())) {
              SDValue N111 = N11.getNode()->getOperand(1);
              SDValue CPTmpN111_0;
              SDValue CPTmpN111_1;
              SDValue CPTmpN111_2;
              SDValue CPTmpN111_3;
              SDValue CPTmpN111_4;
              if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
                SDValue N2 = N->getOperand(2);
                if (N111 == N2 &&
                    N1.getValueType() == MVT::i32) {
                  SDNode *Result = Emit_216(N, X86::AND32mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                  return Result;
                }
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86add_flag:i64 GR64:i64:$src2, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ADD64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::ADD &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode()) &&
              Predicate_loadi64(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::ADD64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86or_flag:i64 GR64:i64:$src2, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (OR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::OR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode()) &&
              Predicate_loadi64(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::OR64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86xor_flag:i64 GR64:i64:$src2, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (XOR64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::XOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode()) &&
              Predicate_loadi64(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::XOR64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (st:isVoid (X86and_flag:i64 GR64:i64:$src2, (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (AND64mr:isVoid addr:iPTR:$dst, GR64:i64:$src2)
      // Pattern complexity = 47  cost = 1  size = 3
      if (N1.getNode()->getOpcode() == X86ISD::AND &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::LOAD &&
            N11.hasOneUse() &&
            IsLegalAndProfitableToFold(N11.getNode(), N1.getNode(), N) &&
            (Chain.getNode() == N11.getNode() || IsChainCompatible(Chain.getNode(), N11.getNode()))) {
          SDValue Chain11 = N11.getNode()->getOperand(0);
          if (Predicate_unindexedload(N11.getNode()) &&
              Predicate_load(N11.getNode()) &&
              Predicate_loadi64(N11.getNode())) {
            SDValue N111 = N11.getNode()->getOperand(1);
            SDValue CPTmpN111_0;
            SDValue CPTmpN111_1;
            SDValue CPTmpN111_2;
            SDValue CPTmpN111_3;
            SDValue CPTmpN111_4;
            if (SelectAddr(N, N111, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4)) {
              SDValue N2 = N->getOperand(2);
              if (N111 == N2 &&
                  N1.getValueType() == MVT::i64) {
                SDNode *Result = Emit_216(N, X86::AND64mr, CPTmpN111_0, CPTmpN111_1, CPTmpN111_2, CPTmpN111_3, CPTmpN111_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (vector_extract:f64 (vector_shuffle:v2f64 (bitconvert:v2f64 VR128:v4f32:$src), (undef:v2f64))<<P:Predicate_unpckh>>, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOVHPSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
  // Pattern complexity = 40  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::VECTOR_SHUFFLE &&
            Predicate_unpckh(N10.getNode())) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::UNDEF) {
              SDValue N11 = N1.getNode()->getOperand(1);
              ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
              if (Tmp0) {
                int64_t CN1 = Tmp0->getSExtValue();
                if (CN1 == INT64_C(0)) {
                  SDValue N2 = N->getOperand(2);
                  SDValue CPTmpN2_0;
                  SDValue CPTmpN2_1;
                  SDValue CPTmpN2_2;
                  SDValue CPTmpN2_3;
                  SDValue CPTmpN2_4;
                  if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                      N1.getValueType() == MVT::f64 &&
                      N10.getValueType() == MVT::v2f64 &&
                      N1000.getValueType() == MVT::v4f32) {
                    SDNode *Result = Emit_195(N, X86::MOVHPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (vector_extract:f64 (vector_shuffle:v2f64 VR128:v2f64:$src, (undef:v2f64))<<P:Predicate_unpckh>>, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOVHPDmr:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
  // Pattern complexity = 37  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::VECTOR_SHUFFLE &&
            Predicate_unpckh(N10.getNode())) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N101 = N10.getNode()->getOperand(1);
          if (N101.getNode()->getOpcode() == ISD::UNDEF) {
            SDValue N11 = N1.getNode()->getOperand(1);
            ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N11.getNode());
            if (Tmp0) {
              int64_t CN1 = Tmp0->getSExtValue();
              if (CN1 == INT64_C(0)) {
                SDValue N2 = N->getOperand(2);
                SDValue CPTmpN2_0;
                SDValue CPTmpN2_1;
                SDValue CPTmpN2_2;
                SDValue CPTmpN2_3;
                SDValue CPTmpN2_4;
                if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                    N1.getValueType() == MVT::f64 &&
                    N10.getValueType() == MVT::v2f64) {
                  SDNode *Result = Emit_197(N, X86::MOVHPDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (trunc:i8 (srl:i64 GR64:i64:$src, 8:i8)<<P:Predicate_srl_su>>)<<P:Predicate_trunc_su>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOV8mr_NOREX:isVoid addr:i64:$dst, (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i64 GR64:i64:$src, GR64_ABCD:i64), 2:i32))
  // Pattern complexity = 35  cost = 3  size = 3
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::TRUNCATE &&
          Predicate_trunc_su(N1.getNode())) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRL &&
            Predicate_srl_su(N10.getNode())) {
          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(8)) {
              SDValue N2 = N->getOperand(2);
              SDValue CPTmpN2_0;
              SDValue CPTmpN2_1;
              SDValue CPTmpN2_2;
              SDValue CPTmpN2_3;
              SDValue CPTmpN2_4;
              if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                  N1.getValueType() == MVT::i8 &&
                  N10.getValueType() == MVT::i64 &&
                  N101.getValueType() == MVT::i8) {
                SDNode *Result = Emit_210(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOV8mr_NOREX, MVT::i64, MVT::i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::TRUNCATE &&
          Predicate_trunc_su(N1.getNode())) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SRL &&
            Predicate_srl_su(N10.getNode())) {
          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(8)) {
              SDValue N2 = N->getOperand(2);
              SDValue CPTmpN2_0;
              SDValue CPTmpN2_1;
              SDValue CPTmpN2_2;
              SDValue CPTmpN2_3;
              SDValue CPTmpN2_4;
              if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                  N1.getValueType() == MVT::i8) {

                // Pattern: (st:isVoid (trunc:i8 (srl:i32 GR32:i32:$src, 8:i8)<<P:Predicate_srl_su>>)<<P:Predicate_trunc_su>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (MOV8mr_NOREX:isVoid addr:i64:$dst, (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR32:i32:$src, GR32_ABCD:i32), 2:i32))
                // Pattern complexity = 35  cost = 3  size = 3
                if (N10.getValueType() == MVT::i32 &&
                    N101.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_211(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOV8mr_NOREX, MVT::i32, MVT::i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                  return Result;
                }

                // Pattern: (st:isVoid (trunc:i8 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)<<P:Predicate_trunc_su>>, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
                // Emits: (MOV8mr_NOREX:isVoid addr:i64:$dst, (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32))
                // Pattern complexity = 35  cost = 3  size = 3
                if (N10.getValueType() == MVT::i16 &&
                    N101.getValueType() == MVT::i8) {
                  SDNode *Result = Emit_212(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOV8mr_NOREX, MVT::i16, MVT::i8, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (bitconvert:f32 (extractelt:i32 (bitconvert:v4i32 VR128:v4f32:$src1), (imm:iPTR):$src2)), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (EXTRACTPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src1, (imm:i32):$src2)
  // Pattern complexity = 34  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N1000 = N100.getNode()->getOperand(0);
            SDValue N101 = N10.getNode()->getOperand(1);
            if (N101.getNode()->getOpcode() == ISD::Constant) {
              SDValue N2 = N->getOperand(2);
              SDValue CPTmpN2_0;
              SDValue CPTmpN2_1;
              SDValue CPTmpN2_2;
              SDValue CPTmpN2_3;
              SDValue CPTmpN2_4;
              if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                  N1.getValueType() == MVT::f32 &&
                  N10.getValueType() == MVT::i32 &&
                  N100.getValueType() == MVT::v4i32 &&
                  N1000.getValueType() == MVT::v4f32) {
                SDNode *Result = Emit_215(N, X86::EXTRACTPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (vector_extract:f64 (bitconvert:v2f64 VR128:v4f32:$src), 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOVLPSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
  // Pattern complexity = 33  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.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(0)) {
              SDValue N2 = N->getOperand(2);
              SDValue CPTmpN2_0;
              SDValue CPTmpN2_1;
              SDValue CPTmpN2_2;
              SDValue CPTmpN2_3;
              SDValue CPTmpN2_4;
              if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                  N1.getValueType() == MVT::f64 &&
                  N10.getValueType() == MVT::v2f64 &&
                  N100.getValueType() == MVT::v4f32) {
                SDNode *Result = Emit_194(N, X86::MOVLPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (extractelt:i32 (bitconvert:v4i32 VR128:v4f32:$src1), (imm:iPTR):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (EXTRACTPSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src1, (imm:i32):$src2)
  // Pattern complexity = 31  cost = 1  size = 3
  if ((Subtarget->hasSSE41())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
          SDValue N100 = N10.getNode()->getOperand(0);
          SDValue N11 = N1.getNode()->getOperand(1);
          if (N11.getNode()->getOpcode() == ISD::Constant) {
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                N1.getValueType() == MVT::i32 &&
                N10.getValueType() == MVT::v4i32 &&
                N100.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_198(N, X86::EXTRACTPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::SETCC) {
        SDValue N10 = N1.getNode()->getOperand(0);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N10.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();

          // Pattern: (st:isVoid (X86setcc:i8 4:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETEm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(4)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETEm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 9:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETNEm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(9)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETNEm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 7:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETLm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(7)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETLm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 6:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETGEm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(6)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETGEm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 8:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETLEm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(8)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETLEm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 5:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETGm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(5)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETGm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 2:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETBm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(2)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETBm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 1:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETAEm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(1)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETAEm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 3:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETBEm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(3)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETBEm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 0:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETAm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(0)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETAm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 15:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETSm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(15)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETSm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 12:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETNSm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(12)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETNSm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 14:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETPm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(14)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETPm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 11:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETNPm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(11)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETNPm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 13:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETOm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(13)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETOm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }

          // Pattern: (st:isVoid (X86setcc:i8 10:i8, EFLAGS:i32), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (SETNOm:isVoid addr:iPTR:$dst)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(10)) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
              SDNode *Result = Emit_188(N, X86::SETNOm, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid (vector_extract:f32 VR128:v4f32:$src, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MOVPS2SSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
  // Pattern complexity = 30  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        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(0)) {
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
                N1.getValueType() == MVT::f32 &&
                N10.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_196(N, X86::MOVPS2SSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        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(0)) {
            SDValue N2 = N->getOperand(2);
            SDValue CPTmpN2_0;
            SDValue CPTmpN2_1;
            SDValue CPTmpN2_2;
            SDValue CPTmpN2_3;
            SDValue CPTmpN2_4;
            if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

              // Pattern: (st:isVoid (vector_extract:f64 VR128:v2f64:$src, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
              // Emits: (MOVLPDmr:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
              // Pattern complexity = 30  cost = 1  size = 3
              if (N1.getValueType() == MVT::f64 &&
                  N10.getValueType() == MVT::v2f64) {
                SDNode *Result = Emit_196(N, X86::MOVLPDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }

              // Pattern: (st:isVoid (vector_extract:i64 VR128:v2i64:$src, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
              // Emits: (MOVPQI2QImr:isVoid addr:iPTR:$dst, VR128:v2i64:$src)
              // Pattern complexity = 30  cost = 1  size = 3
              if (N1.getValueType() == MVT::i64 &&
                  N10.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_196(N, X86::MOVPQI2QImr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }

              // Pattern: (st:isVoid (vector_extract:f64 VR128:v2f64:$src, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
              // Emits: (MOVPD2SDmr:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
              // Pattern complexity = 30  cost = 1  size = 3
              if (N1.getValueType() == MVT::f64 &&
                  N10.getValueType() == MVT::v2f64) {
                SDNode *Result = Emit_196(N, X86::MOVPD2SDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }

              // Pattern: (st:isVoid (vector_extract:i32 VR128:v4i32:$src, 0:iPTR), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
              // Emits: (MOVPDI2DImr:isVoid addr:iPTR:$dst, VR128:v4i32:$src)
              // Pattern complexity = 30  cost = 1  size = 3
              if (N1.getValueType() == MVT::i32 &&
                  N10.getValueType() == MVT::v4i32) {
                SDNode *Result = Emit_196(N, X86::MOVPDI2DImr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE41())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N11 = N1.getNode()->getOperand(1);
        if (N11.getNode()->getOpcode() == ISD::Constant) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

            // Pattern: (st:isVoid (extractelt:i64 VR128:v2i64:$src1, (imm:iPTR):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (PEXTRQmr:isVoid addr:iPTR:$dst, VR128:v2i64:$src1, (imm:i32):$src2)
            // Pattern complexity = 28  cost = 1  size = 3
            if (N1.getValueType() == MVT::i64 &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_193(N, X86::PEXTRQmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }

            // Pattern: (st:isVoid (extractelt:i32 VR128:v4i32:$src1, (imm:iPTR):$src2), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
            // Emits: (PEXTRDmr:isVoid addr:iPTR:$dst, VR128:v4i32:$src1, (imm:i32):$src2)
            // Pattern complexity = 28  cost = 1  size = 3
            if (N1.getValueType() == MVT::i32 &&
                N10.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_193(N, X86::PEXTRDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((TM.getCodeModel() == CodeModel::Small ||TM.getCodeModel() == CodeModel::Kernel) && (TM.getRelocationModel() == Reloc::Static)) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::Wrapper) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (st:isVoid (X86Wrapper:i64 (tconstpool:i64):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV64mi32:isVoid addr:iPTR:$dst, (tconstpool:i64):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetConstantPool) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_192(N, X86::MOV64mi32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid (X86Wrapper:i64 (tjumptable:i64):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV64mi32:isVoid addr:iPTR:$dst, (tjumptable:i64):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetJumpTable) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_192(N, X86::MOV64mi32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid (X86Wrapper:i64 (tglobaladdr:i64):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV64mi32:isVoid addr:iPTR:$dst, (tglobaladdr:i64):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_192(N, X86::MOV64mi32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid (X86Wrapper:i64 (texternalsym:i64):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV64mi32:isVoid addr:iPTR:$dst, (texternalsym:i64):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_192(N, X86::MOV64mi32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid (X86Wrapper:i64 (tblockaddress:i64):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV64mi32:isVoid addr:iPTR:$dst, (tblockaddress:i64):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetBlockAddress) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_192(N, X86::MOV64mi32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == X86ISD::Wrapper) {
        SDValue N10 = N1.getNode()->getOperand(0);

        // Pattern: (st:isVoid (X86Wrapper:i32 (tglobaladdr:i32):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV32mi:isVoid addr:iPTR:$dst, (tglobaladdr:i32):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_192(N, X86::MOV32mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid (X86Wrapper:i32 (texternalsym:i32):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV32mi:isVoid addr:iPTR:$dst, (texternalsym:i32):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_192(N, X86::MOV32mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid (X86Wrapper:i32 (tblockaddress:i32):$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV32mi:isVoid addr:iPTR:$dst, (tblockaddress:i32):$src)
        // Pattern complexity = 28  cost = 1  size = 3
        if (N10.getNode()->getOpcode() == ISD::TargetBlockAddress) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_192(N, X86::MOV32mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
      if (N1.getNode()->getOpcode() == ISD::Constant) {

        // Pattern: (st:isVoid (imm:i64)<<P:Predicate_i64immSExt32>>:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOV64mi32:isVoid addr:iPTR:$dst, (imm:i64):$src)
        // Pattern complexity = 26  cost = 1  size = 3
        if (Predicate_i64immSExt32(N1.getNode())) {
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_189(N, X86::MOV64mi32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

          // Pattern: (st:isVoid (imm:i8):$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV8mi:isVoid addr:iPTR:$dst, (imm:i8):$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i8) {
            SDNode *Result = Emit_169(N, X86::MOV8mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid (imm:i16):$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV16mi:isVoid addr:iPTR:$dst, (imm:i16):$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i16) {
            SDNode *Result = Emit_170(N, X86::MOV16mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid (imm:i32):$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV32mi:isVoid addr:iPTR:$dst, (imm:i32):$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_171(N, X86::MOV32mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

          // Pattern: (st:isVoid (bitconvert:i64 FR64:f64:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOVSDto64mr:isVoid addr:iPTR:$dst, FR64:f64:$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i64 &&
              N10.getValueType() == MVT::f64) {
            SDNode *Result = Emit_192(N, X86::MOVSDto64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid (bitconvert:i32 FR32:f32:$src), addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOVSS2DImr:isVoid addr:iPTR:$dst, FR32:f32:$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i32 &&
              N10.getValueType() == MVT::f32) {
            SDNode *Result = Emit_192(N, X86::MOVSS2DImr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_truncstore(N) &&
        Predicate_truncstorei16(N)) {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::Constant) {
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

          // Pattern: (st:isVoid (imm:i32):$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
          // Emits: (MOV16mi:isVoid addr:iPTR:$dst, (imm:i16):$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_170(N, X86::MOV16mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid (imm:i64):$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
          // Emits: (MOV16mi:isVoid addr:iPTR:$dst, (imm:i16):$src)
          // Pattern complexity = 25  cost = 1  size = 3
          if (N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_170(N, X86::MOV16mi, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (st:isVoid RFP32:f32:$src, addr:iPTR:$op)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (ST_Fp32m:isVoid addr:iPTR:$op, RFP32:f32:$src)
  // Pattern complexity = 22  cost = 1  size = 0
  if ((!Subtarget->hasSSE1())) {
    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;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
          N1.getValueType() == MVT::f32) {
        SDNode *Result = Emit_172(N, X86::ST_Fp32m, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }
  if ((!Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N)) {

      // Pattern: (st:isVoid RFP64:f64:$src, addr:iPTR:$op)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstoref32>>
      // Emits: (ST_Fp64m32:isVoid addr:iPTR:$op, RFP64:f64:$src)
      // Pattern complexity = 22  cost = 1  size = 0
      if (Predicate_truncstore(N) &&
          Predicate_truncstoref32(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
            N1.getValueType() == MVT::f64) {
          SDNode *Result = Emit_172(N, X86::ST_Fp64m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (st:isVoid RFP64:f64:$src, addr:iPTR:$op)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (ST_Fp64m:isVoid addr:iPTR:$op, RFP64:f64:$src)
      // Pattern complexity = 22  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;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
            N1.getValueType() == MVT::f64) {
          SDNode *Result = Emit_172(N, X86::ST_Fp64m, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N)) {
      if (Predicate_truncstore(N)) {

        // Pattern: (st:isVoid RFP80:f80:$src, addr:iPTR:$op)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstoref32>>
        // Emits: (ST_Fp80m32:isVoid addr:iPTR:$op, RFP80:f80:$src)
        // Pattern complexity = 22  cost = 1  size = 0
        if (Predicate_truncstoref32(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::f80) {
            SDNode *Result = Emit_172(N, X86::ST_Fp80m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }

        // Pattern: (st:isVoid RFP80:f80:$src, addr:iPTR:$op)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstoref64>>
        // Emits: (ST_Fp80m64:isVoid addr:iPTR:$op, RFP80:f80:$src)
        // Pattern complexity = 22  cost = 1  size = 0
        if (Predicate_truncstoref64(N)) {
          SDValue N1 = N->getOperand(1);
          SDValue N2 = N->getOperand(2);
          SDValue CPTmpN2_0;
          SDValue CPTmpN2_1;
          SDValue CPTmpN2_2;
          SDValue CPTmpN2_3;
          SDValue CPTmpN2_4;
          if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
              N1.getValueType() == MVT::f80) {
            SDNode *Result = Emit_172(N, X86::ST_Fp80m64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
      if (Predicate_store(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

          // Pattern: (st:isVoid RFP80:f80:$src, addr:iPTR:$op)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (ST_FpP80m:isVoid addr:iPTR:$op, RFP80:f80:$src)
          // Pattern complexity = 22  cost = 1  size = 0
          if (N1.getValueType() == MVT::f80) {
            SDNode *Result = Emit_172(N, X86::ST_FpP80m, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid GR8:i8:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV8mr:isVoid addr:iPTR:$dst, GR8:i8:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::i8) {
            SDNode *Result = Emit_172(N, X86::MOV8mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid GR16:i16:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV16mr:isVoid addr:iPTR:$dst, GR16:i16:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::i16) {
            SDNode *Result = Emit_172(N, X86::MOV16mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid GR32:i32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV32mr:isVoid addr:iPTR:$dst, GR32:i32:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::i32) {
            SDNode *Result = Emit_172(N, X86::MOV32mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid GR64:i64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
          // Emits: (MOV64mr:isVoid addr:iPTR:$dst, GR64:i64:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::i64) {
            SDNode *Result = Emit_172(N, X86::MOV64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {

      // Pattern: (st:isVoid FR32:f32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (MOVSSmr:isVoid addr:iPTR:$dst, FR32:f32:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
            N1.getValueType() == MVT::f32) {
          SDNode *Result = Emit_172(N, X86::MOVSSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (st:isVoid VR128:v4f32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><<P:Predicate_alignedstore>>
      // Emits: (MOVAPSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedstore(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
            N1.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_172(N, X86::MOVAPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (st:isVoid VR128:v4f32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (MOVUPSmr:isVoid addr:iPTR:$dst, VR128:v4f32:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
          N1.getValueType() == MVT::v4f32) {
        SDNode *Result = Emit_172(N, X86::MOVUPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {

      // Pattern: (st:isVoid FR64:f64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (MOVSDmr:isVoid addr:iPTR:$dst, FR64:f64:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
            N1.getValueType() == MVT::f64) {
          SDNode *Result = Emit_172(N, X86::MOVSDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (st:isVoid VR128:v2f64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><<P:Predicate_alignedstore>>
      // Emits: (MOVAPDmr:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_alignedstore(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
            N1.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_172(N, X86::MOVAPDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }

      // Pattern: (st:isVoid VR128:v2f64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
      // Emits: (MOVUPDmr:isVoid addr:iPTR:$dst, VR128:v2f64:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
          N1.getValueType() == MVT::v2f64) {
        SDNode *Result = Emit_172(N, X86::MOVUPDmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }

  // Pattern: (st:isVoid VR64:v1i64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
  // Emits: (MMX_MOVQ64mr:isVoid addr:iPTR:$dst, VR64:v1i64:$src)
  // Pattern complexity = 22  cost = 1  size = 3
  if ((Subtarget->hasMMX())) {
    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;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4) &&
          N1.getValueType() == MVT::v1i64) {
        SDNode *Result = Emit_172(N, X86::MMX_MOVQ64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    if (Predicate_unindexedstore(N) &&
        Predicate_store(N)) {
      if (Predicate_alignedstore(N)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        SDValue CPTmpN2_0;
        SDValue CPTmpN2_1;
        SDValue CPTmpN2_2;
        SDValue CPTmpN2_3;
        SDValue CPTmpN2_4;
        if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

          // Pattern: (st:isVoid VR128:v2i64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><<P:Predicate_alignedstore>>
          // Emits: (MOVAPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::v2i64) {
            SDNode *Result = Emit_172(N, X86::MOVAPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid VR128:v4i32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><<P:Predicate_alignedstore>>
          // Emits: (MOVAPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::v4i32) {
            SDNode *Result = Emit_172(N, X86::MOVAPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid VR128:v8i16:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><<P:Predicate_alignedstore>>
          // Emits: (MOVAPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::v8i16) {
            SDNode *Result = Emit_172(N, X86::MOVAPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }

          // Pattern: (st:isVoid VR128:v16i8:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>><<P:Predicate_alignedstore>>
          // Emits: (MOVAPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
          // Pattern complexity = 22  cost = 1  size = 3
          if (N1.getValueType() == MVT::v16i8) {
            SDNode *Result = Emit_172(N, X86::MOVAPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
            return Result;
          }
        }
      }
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

        // Pattern: (st:isVoid VR128:v2i64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOVUPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_172(N, X86::MOVUPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR128:v4i32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOVUPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v4i32) {
          SDNode *Result = Emit_172(N, X86::MOVUPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR128:v8i16:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOVUPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v8i16) {
          SDNode *Result = Emit_172(N, X86::MOVUPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR128:v16i8:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MOVUPSmr:isVoid addr:iPTR:$dst, VR128:v16i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v16i8) {
          SDNode *Result = Emit_172(N, X86::MOVUPSmr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }
  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;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

        // Pattern: (st:isVoid VR64:v8i8:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MMX_MOVQ64mr:isVoid addr:iPTR:$dst, VR64:v8i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v8i8) {
          SDNode *Result = Emit_172(N, X86::MMX_MOVQ64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR64:v4i16:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MMX_MOVQ64mr:isVoid addr:iPTR:$dst, VR64:v8i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v4i16) {
          SDNode *Result = Emit_172(N, X86::MMX_MOVQ64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR64:v2i32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MMX_MOVQ64mr:isVoid addr:iPTR:$dst, VR64:v8i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v2i32) {
          SDNode *Result = Emit_172(N, X86::MMX_MOVQ64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR64:v2f32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MMX_MOVQ64mr:isVoid addr:iPTR:$dst, VR64:v8i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v2f32) {
          SDNode *Result = Emit_172(N, X86::MMX_MOVQ64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid VR64:v1i64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_store>>
        // Emits: (MMX_MOVQ64mr:isVoid addr:iPTR:$dst, VR64:v8i8:$src)
        // Pattern complexity = 22  cost = 1  size = 3
        if (N1.getValueType() == MVT::v1i64) {
          SDNode *Result = Emit_172(N, X86::MMX_MOVQ64mr, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
    if (Predicate_truncstore(N) &&
        Predicate_truncstorei16(N)) {
      SDValue N1 = N->getOperand(1);
      SDValue N2 = N->getOperand(2);
      SDValue CPTmpN2_0;
      SDValue CPTmpN2_1;
      SDValue CPTmpN2_2;
      SDValue CPTmpN2_3;
      SDValue CPTmpN2_4;
      if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

        // Pattern: (st:isVoid GR32:i32:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
        // Emits: (MOV16mr:isVoid addr:iPTR:$dst, (EXTRACT_SUBREG:i16 GR32:i32:$src, 3:i32))
        // Pattern complexity = 22  cost = 2  size = 3
        if (N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_207(N, TargetOpcode::EXTRACT_SUBREG, X86::MOV16mr, MVT::i16, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }

        // Pattern: (st:isVoid GR64:i64:$src, addr:iPTR:$dst)<<P:Predicate_unindexedstore>><<P:Predicate_truncstore>><<P:Predicate_truncstorei16>>
        // Emits: (MOV16mr:isVoid addr:iPTR:$dst, (EXTRACT_SUBREG:i16 GR64:i64:$src, 3:i32))
        // Pattern complexity = 22  cost = 2  size = 3
        if (N1.getValueType() == MVT::i64) {
          SDNode *Result = Emit_207(N, TargetOpcode::EXTRACT_SUBREG, X86::MOV16mr, MVT::i16, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
          return Result;
        }
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (sub:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SUB8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::SUB8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (sub:i8 0:i8, GR8:i8:$src)
    // Emits: (NEG8r:i8 GR8:i8:$src)
    // Pattern complexity = 8  cost = 1  size = 2
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDNode *Result = Emit_222(N, X86::NEG8r, MVT::i8);
          return Result;
        }
      }
    }

    // Pattern: (sub:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (SUB8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::SUB8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (sub:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (SUB8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB8rr, MVT::i8);
  return Result;
}

SDNode *Select_ISD_SUB_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (sub:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SUB16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::SUB16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (sub:i16 0:i16, GR16:i16:$src)
    // Emits: (NEG16r:i16 GR16:i16:$src)
    // Pattern complexity = 8  cost = 1  size = 2
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDNode *Result = Emit_222(N, X86::NEG16r, MVT::i16);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (sub:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (SUB16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::SUB16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (sub:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (SUB16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::SUB16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (sub:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (SUB16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB16rr, MVT::i16);
  return Result;
}

SDNode *Select_ISD_SUB_i32(SDNode *N) {

  // Pattern: (sub:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (SUB32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_2(N, X86::SUB32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (sub:i32 0:i32, GR32:i32:$src)
    // Emits: (NEG32r:i32 GR32:i32:$src)
    // Pattern complexity = 8  cost = 1  size = 2
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDNode *Result = Emit_222(N, X86::NEG32r, MVT::i32);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (sub:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (SUB32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::SUB32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (sub:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (SUB32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::SUB32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sub:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (SUB32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB32rr, MVT::i32);
  return Result;
}

SDNode *Select_ISD_SUB_i64(SDNode *N) {

  // Pattern: (sub:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (SUB64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_2(N, X86::SUB64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: lea64addr:i64:$src
  // Emits: (LEA64r:i64 lea64addr:i64:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (sub:i64 0:i64, GR64:i64:$src)
    // Emits: (NEG64r:i64 GR64:i64:$src)
    // Pattern complexity = 8  cost = 1  size = 2
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {
          SDNode *Result = Emit_222(N, X86::NEG64r, MVT::i64);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (sub:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (SUB64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::SUB64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (sub:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (SUB64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::SUB64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (sub:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (SUB64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB64rr, MVT::i64);
  return Result;
}

SDNode *Select_ISD_SUB_v8i8(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (sub:v8i8 VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PSUBBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PSUBBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Emits: (MMX_PSUBBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PSUBBrr, MVT::v8i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v16i8(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (sub:v16i8 VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
    // Emits: (PSUBBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PSUBBrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Emits: (PSUBBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PSUBBrr, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v4i16(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (sub:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PSUBWrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PSUBWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Emits: (MMX_PSUBWrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PSUBWrr, MVT::v4i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v8i16(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (sub:v8i16 VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
    // Emits: (PSUBWrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PSUBWrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Emits: (PSUBWrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PSUBWrr, MVT::v8i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v2i32(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (sub:v2i32 VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PSUBDrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PSUBDrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
    // Emits: (MMX_PSUBDrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PSUBDrr, MVT::v2i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (sub:v4i32 VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
    // Emits: (PSUBDrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PSUBDrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
    // Emits: (PSUBDrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PSUBDrr, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v1i64(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (sub:v1i64 VR64:v1i64:$src1, (bitconvert:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PSUBQrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PSUBQrm, MVT::v1i64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (sub:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Emits: (MMX_PSUBQrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PSUBQrr, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUB_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (sub:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PSUBQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PSUBQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (sub:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Emits: (PSUBQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PSUBQrr, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_SUBC_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (subc:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SUB32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_21(N, X86::SUB32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (subc:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (SUB32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_22(N, X86::SUB32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (subc:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (SUB32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_22(N, X86::SUB32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (subc:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (SUB32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_20(N, X86::SUB32rr, MVT::i32);
  return Result;
}

SDNode *Select_ISD_SUBC_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (subc:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SUB64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_21(N, X86::SUB64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (subc:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (SUB64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_24(N, X86::SUB64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (subc:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Emits: (SUB64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_24(N, X86::SUB64ri32, MVT::i64);
      return Result;
    }
  }

  // Pattern: (subc:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (SUB64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_20(N, X86::SUB64rr, MVT::i64);
  return Result;
}

SDNode *Select_ISD_SUBE_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sube:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SBB8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_26(N, X86::SBB8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }

    // Pattern: (sube:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (SBB8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_27(N, X86::SBB8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (sube:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (SBB8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::SBB8rr, MVT::i8);
  return Result;
}

SDNode *Select_ISD_SUBE_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sube:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SBB16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_26(N, X86::SBB16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (sube:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (SBB16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_29(N, X86::SBB16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (sube:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (SBB16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_29(N, X86::SBB16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (sube:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (SBB16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::SBB16rr, MVT::i16);
  return Result;
}

SDNode *Select_ISD_SUBE_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sube:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SBB32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_26(N, X86::SBB32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (sube:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (SBB32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_30(N, X86::SBB32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (sube:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (SBB32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_30(N, X86::SBB32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (sube:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (SBB32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::SBB32rr, MVT::i32);
  return Result;
}

SDNode *Select_ISD_SUBE_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (sube:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (SBB64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_26(N, X86::SBB64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (sube:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (SBB64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_31(N, X86::SBB64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (sube:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (SBB64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_31(N, X86::SBB64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (sube:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (SBB64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_25(N, X86::SBB64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_223(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Chain);
}
SDNode *Select_ISD_TRAP(SDNode *N) {
  SDNode *Result = Emit_223(N, X86::TRAP);
  return Result;
}

DISABLE_INLINE SDNode *Emit_224(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(X86::GR32_ABCDRegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2, Tmp3);
}
DISABLE_INLINE SDNode *Emit_225(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp2(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N0, Tmp1), 0);
  SDValue Tmp3 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp2, Tmp3);
}
DISABLE_INLINE SDNode *Emit_226(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 Tmp3 = CurDAG->getTargetConstant(X86::GR16_ABCDRegClassID, MVT::i32);
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp3), 0);
  SDValue Tmp5 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp4, Tmp5);
}
DISABLE_INLINE SDNode *Emit_227(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 Tmp3 = CurDAG->getTargetConstant(X86::GR32_ABCDRegClassID, MVT::i32);
  SDValue Tmp4(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0, N00, Tmp3), 0);
  SDValue Tmp5 = CurDAG->getTargetConstant(0x2ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp4, Tmp5);
}
DISABLE_INLINE SDNode *Emit_228(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0x1ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1);
}
SDNode *Select_ISD_TRUNCATE_i8(SDNode *N) {
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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(8)) {

          // Pattern: (trunc:i8 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
          // Emits: (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR16:i16:$src, GR16_ABCD:i16), 2:i32)
          // Pattern complexity = 12  cost = 2  size = 0
          if (N0.getValueType() == MVT::i16 &&
              N01.getValueType() == MVT::i8) {
            SDNode *Result = Emit_226(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, MVT::i32, MVT::i8);
            return Result;
          }

          // Pattern: (trunc:i8 (srl:i32 GR32:i32:$src, 8:i8)<<P:Predicate_srl_su>>)
          // Emits: (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR32:i32:$src, GR32_ABCD:i32), 2:i32)
          // Pattern complexity = 12  cost = 2  size = 0
          if (N0.getValueType() == MVT::i32 &&
              N01.getValueType() == MVT::i8) {
            SDNode *Result = Emit_227(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, MVT::i16, MVT::i8);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (trunc:i8 GR64:i64:$src)
  // Emits: (EXTRACT_SUBREG:i8 GR64:i64:$src, 1:i32)
  // Pattern complexity = 3  cost = 1  size = 0
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_228(N, TargetOpcode::EXTRACT_SUBREG, MVT::i8);
      return Result;
    }
  }
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (trunc:i8 GR32:i32:$src)
    // Emits: (EXTRACT_SUBREG:i8 GR32:i32:$src, 1:i32)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_228(N, TargetOpcode::EXTRACT_SUBREG, MVT::i8);
      return Result;
    }

    // Pattern: (trunc:i8 GR16:i16:$src)
    // Emits: (EXTRACT_SUBREG:i8 GR16:i16:$src, 1:i32)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_228(N, TargetOpcode::EXTRACT_SUBREG, MVT::i8);
      return Result;
    }
  }
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (trunc:i8 GR32:i32:$src)
    // Emits: (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i32 GR32:i32:$src, GR32_ABCD:i32), 1:i32)
    // Pattern complexity = 3  cost = 2  size = 0
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_224(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, MVT::i32, MVT::i8);
      return Result;
    }

    // Pattern: (trunc:i8 GR16:i16:$src)
    // Emits: (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 1:i32)
    // Pattern complexity = 3  cost = 2  size = 0
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_225(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, MVT::i16, MVT::i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_229(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0x3ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1);
}
SDNode *Select_ISD_TRUNCATE_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (trunc:i16 GR32:i32:$src)
  // Emits: (EXTRACT_SUBREG:i16 GR32:i32:$src, 3:i32)
  // Pattern complexity = 3  cost = 1  size = 0
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_229(N, TargetOpcode::EXTRACT_SUBREG, MVT::i16);
    return Result;
  }

  // Pattern: (trunc:i16 GR64:i64:$src)
  // Emits: (EXTRACT_SUBREG:i16 GR64:i64:$src, 3:i32)
  // Pattern complexity = 3  cost = 1  size = 0
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_229(N, TargetOpcode::EXTRACT_SUBREG, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_230(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1 = CurDAG->getTargetConstant(0x4ULL, MVT::i32);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1);
}
SDNode *Select_ISD_TRUNCATE_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_230(N, TargetOpcode::EXTRACT_SUBREG, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_VECTOR_SHUFFLE_v8i8(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (vector_shuffle:v8i8 VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckh>>
    // Emits: (MMX_PUNPCKHBWrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_mmx_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PUNPCKHBWrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v8i8 VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckl>>
    // Emits: (MMX_PUNPCKLBWrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_mmx_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PUNPCKLBWrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v8i8 VR64:v8i8:$src, (undef:v8i8))<<P:Predicate_mmx_unpckl_undef>>
  // Emits: (MMX_PUNPCKLBWrr:v8i8 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 17  cost = 1  size = 3
  if (Predicate_mmx_unpckl_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MMX_PUNPCKLBWrr, MVT::v8i8);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v8i8 VR64:v8i8:$src, (undef:v8i8))<<P:Predicate_mmx_unpckh_undef>>
  // Emits: (MMX_PUNPCKHBWrr:v8i8 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 17  cost = 1  size = 3
  if (Predicate_mmx_unpckh_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MMX_PUNPCKHBWrr, MVT::v8i8);
      return Result;
    }
  }
  if ((Subtarget->hasMMX())) {

    // Pattern: (vector_shuffle:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)<<P:Predicate_mmx_unpckh>>
    // Emits: (MMX_PUNPCKHBWrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_mmx_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::MMX_PUNPCKHBWrr, MVT::v8i8);
      return Result;
    }

    // Pattern: (vector_shuffle:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)<<P:Predicate_mmx_unpckl>>
    // Emits: (MMX_PUNPCKLBWrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_mmx_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::MMX_PUNPCKLBWrr, MVT::v8i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_231(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = Transform_SHUFFLE_get_palign_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N0, Tmp3);
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v16i8(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLBWrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PUNPCKLBWrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src1, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHBWrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PUNPCKHBWrm, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src, (undef:v16i8))<<P:Predicate_unpckl_undef>>
    // Emits: (PUNPCKLBWrr:v16i8 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckl_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKLBWrr, MVT::v16i8);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src, (undef:v16i8))<<P:Predicate_unpckh_undef>>
    // Emits: (PUNPCKHBWrr:v16i8 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckh_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKHBWrr, MVT::v16i8);
        return Result;
      }
    }
  }

  // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)<<P:Predicate_palign>><<X:SHUFFLE_get_palign_imm>>:$src3
  // Emits: (PALIGNR128rr:v16i8 VR128:v16i8:$src2, VR128:v16i8:$src1, (SHUFFLE_get_palign_imm:i8 VR128:i8:$src3))
  // Pattern complexity = 9  cost = 1  size = 3
  if ((Subtarget->hasSSSE3()) &&
      Predicate_palign(N)) {
    SDNode *Result = Emit_231(N, X86::PALIGNR128rr, MVT::v16i8);
    return Result;
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLBWrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKLBWrr, MVT::v16i8);
      return Result;
    }

    // Pattern: (vector_shuffle:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHBWrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKHBWrr, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(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 Tmp2 = Transform_MMX_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2);
}
DISABLE_INLINE SDNode *Emit_233(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_MMX_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp2, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v4i16(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (vector_shuffle:v4i16 (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>), (undef:v4i16))<<P:Predicate_mmx_pshufw>><<X:MMX_SHUFFLE_get_shuf_imm>>:$src2
    // Emits: (MMX_PSHUFWmi:v4i16 addr:iPTR:$src1, (MMX_SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v4i16 (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>>), (undef:v4i16)):$src2))
    // Pattern complexity = 32  cost = 1  size = 3
    if (Predicate_mmx_pshufw(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v1i64) {
                SDNode *Result = Emit_233(N, X86::MMX_PSHUFWmi, MVT::v4i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckh>>
    // Emits: (MMX_PUNPCKHWDrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_mmx_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PUNPCKHWDrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckl>>
    // Emits: (MMX_PUNPCKLWDrm:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_mmx_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PUNPCKLWDrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src, (undef:v4i16))<<P:Predicate_mmx_unpckl_undef>>
  // Emits: (MMX_PUNPCKLWDrr:v4i16 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 17  cost = 1  size = 3
  if (Predicate_mmx_unpckl_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MMX_PUNPCKLWDrr, MVT::v4i16);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src, (undef:v4i16))<<P:Predicate_mmx_unpckh_undef>>
  // Emits: (MMX_PUNPCKHWDrr:v4i16 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 17  cost = 1  size = 3
  if (Predicate_mmx_unpckh_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MMX_PUNPCKHWDrr, MVT::v4i16);
      return Result;
    }
  }
  if ((Subtarget->hasMMX())) {

    // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src1, (undef:v4i16))<<P:Predicate_mmx_pshufw>><<X:MMX_SHUFFLE_get_shuf_imm>>:$src2
    // Emits: (MMX_PSHUFWri:v4i16 VR64:v4i16:$src1, (MMX_SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v4i16 VR64:v4i16:$src1, (undef:v4i16)):$src2))
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_mmx_pshufw(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_232(N, X86::MMX_PSHUFWri, MVT::v4i16);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)<<P:Predicate_mmx_unpckh>>
    // Emits: (MMX_PUNPCKHWDrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_mmx_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::MMX_PUNPCKHWDrr, MVT::v4i16);
      return Result;
    }

    // Pattern: (vector_shuffle:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)<<P:Predicate_mmx_unpckl>>
    // Emits: (MMX_PUNPCKLWDrr:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_mmx_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::MMX_PUNPCKLWDrr, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_234(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_SHUFFLE_get_pshufhw_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2);
}
DISABLE_INLINE SDNode *Emit_235(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_SHUFFLE_get_pshufhw_imm(SDValue(N, 0).getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp2, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_236(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_SHUFFLE_get_pshuflw_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2);
}
DISABLE_INLINE SDNode *Emit_237(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_SHUFFLE_get_pshuflw_imm(SDValue(N, 0).getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp2, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v8i16(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v8i16 (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v8i16))<<P:Predicate_pshufhw>><<X:SHUFFLE_get_pshufhw_imm>>:$src2
    // Emits: (PSHUFHWmi:v8i16 addr:iPTR:$src1, (SHUFFLE_get_pshufhw_imm:i8 (vector_shuffle:v8i16 (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v8i16)):$src2))
    // Pattern complexity = 32  cost = 1  size = 3
    if (Predicate_pshufhw(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_235(N, X86::PSHUFHWmi, MVT::v8i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v8i16 (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v8i16))<<P:Predicate_pshuflw>><<X:SHUFFLE_get_pshuflw_imm>>:$src2
    // Emits: (PSHUFLWmi:v8i16 addr:iPTR:$src1, (SHUFFLE_get_pshuflw_imm:i8 (vector_shuffle:v8i16 (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v8i16)):$src2))
    // Pattern complexity = 32  cost = 1  size = 3
    if (Predicate_pshuflw(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_237(N, X86::PSHUFLWmi, MVT::v8i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLWDrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PUNPCKLWDrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, (bitconvert:v8i16 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHWDrm:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PUNPCKHWDrm, MVT::v8i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src, (undef:v8i16))<<P:Predicate_unpckl_undef>>
    // Emits: (PUNPCKLWDrr:v8i16 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckl_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKLWDrr, MVT::v8i16);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src, (undef:v8i16))<<P:Predicate_unpckh_undef>>
    // Emits: (PUNPCKHWDrr:v8i16 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckh_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKHWDrr, MVT::v8i16);
        return Result;
      }
    }
  }

  // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)<<P:Predicate_palign>><<X:SHUFFLE_get_palign_imm>>:$src3
  // Emits: (PALIGNR128rr:v8i16 VR128:v16i8:$src2, VR128:v16i8:$src1, (SHUFFLE_get_palign_imm:i8 VR128:i8:$src3))
  // Pattern complexity = 9  cost = 1  size = 3
  if ((Subtarget->hasSSSE3()) &&
      Predicate_palign(N)) {
    SDNode *Result = Emit_231(N, X86::PALIGNR128rr, MVT::v8i16);
    return Result;
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, (undef:v8i16))<<P:Predicate_pshufhw>><<X:SHUFFLE_get_pshufhw_imm>>:$src2
    // Emits: (PSHUFHWri:v8i16 VR128:v8i16:$src1, (SHUFFLE_get_pshufhw_imm:i8 (vector_shuffle:v8i16 VR128:v8i16:$src1, (undef:v8i16)):$src2))
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_pshufhw(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_234(N, X86::PSHUFHWri, MVT::v8i16);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, (undef:v8i16))<<P:Predicate_pshuflw>><<X:SHUFFLE_get_pshuflw_imm>>:$src2
    // Emits: (PSHUFLWri:v8i16 VR128:v8i16:$src1, (SHUFFLE_get_pshuflw_imm:i8 (vector_shuffle:v8i16 VR128:v8i16:$src1, (undef:v8i16)):$src2))
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_pshuflw(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_236(N, X86::PSHUFLWri, MVT::v8i16);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLWDrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKLWDrr, MVT::v8i16);
      return Result;
    }

    // Pattern: (vector_shuffle:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHWDrr:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKHWDrr, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_VECTOR_SHUFFLE_v2i32(SDNode *N) {
  if ((Subtarget->hasMMX())) {

    // Pattern: (vector_shuffle:v2i32 VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckh>>
    // Emits: (MMX_PUNPCKHDQrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_mmx_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PUNPCKHDQrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2i32 VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))<<P:Predicate_mmx_unpckl>>
    // Emits: (MMX_PUNPCKLDQrm:v2i32 VR64:v2i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_mmx_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PUNPCKLDQrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v2i32 VR64:v2i32:$src, (undef:v2i32))<<P:Predicate_mmx_unpckl_undef>>
  // Emits: (MMX_PUNPCKLDQrr:v2i32 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 17  cost = 1  size = 3
  if (Predicate_mmx_unpckl_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MMX_PUNPCKLDQrr, MVT::v2i32);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v2i32 VR64:v2i32:$src, (undef:v2i32))<<P:Predicate_mmx_unpckh_undef>>
  // Emits: (MMX_PUNPCKHDQrr:v2i32 VR64:v8i8:$src, VR64:v8i8:$src)
  // Pattern complexity = 17  cost = 1  size = 3
  if (Predicate_mmx_unpckh_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MMX_PUNPCKHDQrr, MVT::v2i32);
      return Result;
    }
  }
  if ((Subtarget->hasMMX())) {

    // Pattern: (vector_shuffle:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)<<P:Predicate_mmx_unpckh>>
    // Emits: (MMX_PUNPCKHDQrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_mmx_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::MMX_PUNPCKHDQrr, MVT::v2i32);
      return Result;
    }

    // Pattern: (vector_shuffle:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)<<P:Predicate_mmx_unpckl>>
    // Emits: (MMX_PUNPCKLDQrr:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_mmx_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::MMX_PUNPCKLDQrr, MVT::v2i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_238(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2);
}
DISABLE_INLINE SDNode *Emit_239(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp2 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp2, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_240(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Ops0[] = { N0, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_241(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_242(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, Tmp3);
}
DISABLE_INLINE SDNode *Emit_243(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue Tmp3 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp3, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v4i32(SDNode *N) {
  if ((Subtarget->hasSSE3())) {

    // Pattern: (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4i32))<<P:Predicate_movshdup>>
    // Emits: (MOVSHDUPrm:v4i32 addr:iPTR:$src)
    // Pattern complexity = 52  cost = 1  size = 3
    if (Predicate_movshdup(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_241(N, X86::MOVSHDUPrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4i32))<<P:Predicate_movsldup>>
    // Emits: (MOVSLDUPrm:v4i32 addr:iPTR:$src)
    // Pattern complexity = 52  cost = 1  size = 3
    if (Predicate_movsldup(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_241(N, X86::MOVSLDUPrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)<<P:Predicate_movlp>>
    // Emits: (MOVLPSrm:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 46  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MOVLPSrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4i32))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src2
    // Emits: (PSHUFDmi:v4i32 addr:iPTR:$src1, (SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4i32)):$src2))
    // Pattern complexity = 37  cost = 1  size = 3
    if (Predicate_pshufd(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v2i64) {
                SDNode *Result = Emit_239(N, X86::PSHUFDmi, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4i32))<<P:Predicate_movddup>>
  // Emits: (MOVDDUPrm:v4i32 addr:iPTR:$src)
  // Pattern complexity = 37  cost = 1  size = 3
  if ((Subtarget->hasSSE3()) &&
      Predicate_movddup(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode()) &&
            Predicate_memop(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                N00.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_241(N, X86::MOVDDUPrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v4i32 (bitconvert:v4i32 (ld:v4f32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4i32))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src2
    // Emits: (PSHUFDmi:v4i32 addr:iPTR:$src1, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src2))
    // Pattern complexity = 32  cost = 1  size = 3
    if (Predicate_pshufd(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N0.hasOneUse()) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getNode()->getOpcode() == ISD::LOAD &&
            N00.hasOneUse() &&
            IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
          SDValue Chain00 = N00.getNode()->getOperand(0);
          if (Predicate_unindexedload(N00.getNode()) &&
              Predicate_load(N00.getNode()) &&
              Predicate_memop(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v4f32) {
                SDNode *Result = Emit_239(N, X86::PSHUFDmi, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLDQrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PUNPCKLDQrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHDQrm:v4i32 VR128:v4i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PUNPCKHDQrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPSrmi:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_243(N, X86::SHUFPSrmi, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (bitconvert:v4i32 (X86vzload:v2i64 addr:iPTR:$src2)))<<P:Predicate_movlhps>>
  // Emits: (MOVHPSrm:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if (Predicate_movlhps(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N1.hasOneUse()) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == X86ISD::VZEXT_LOAD &&
          N10.hasOneUse() &&
          IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
        SDValue Chain10 = N10.getNode()->getOperand(0);
        SDValue N101 = N10.getNode()->getOperand(1);
        SDValue CPTmpN101_0;
        SDValue CPTmpN101_1;
        SDValue CPTmpN101_2;
        SDValue CPTmpN101_3;
        SDValue CPTmpN101_4;
        if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
            N10.getValueType() == MVT::v2i64) {
          SDNode *Result = Emit_240(N, X86::MOVHPSrm, MVT::v4i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (undef:v4i32))<<P:Predicate_movhlps_undef>>
  // Emits: (MOVHLPSrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src1)
  // Pattern complexity = 27  cost = 1  size = 3
  if (Predicate_movhlps_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MOVHLPSrr, MVT::v4i32);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_movlhps>>
  // Emits: (MOVLHPSrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 24  cost = 1  size = 3
  if (Predicate_movlhps(N)) {
    SDNode *Result = Emit_15(N, X86::MOVLHPSrr, MVT::v4i32);
    return Result;
  }

  // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_movhlps>>
  // Emits: (MOVHLPSrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 24  cost = 1  size = 3
  if (Predicate_movhlps(N)) {
    SDNode *Result = Emit_15(N, X86::MOVHLPSrr, MVT::v4i32);
    return Result;
  }
  if ((Subtarget->hasSSE3())) {

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src, (undef:v4i32))<<P:Predicate_movshdup>>
    // Emits: (MOVSHDUPrr:v4i32 VR128:v16i8:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_movshdup(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_93(N, X86::MOVSHDUPrr, MVT::v4i32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src, (undef:v4i32))<<P:Predicate_movsldup>>
    // Emits: (MOVSLDUPrr:v4i32 VR128:v16i8:$src)
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_movsldup(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_93(N, X86::MOVSLDUPrr, MVT::v4i32);
        return Result;
      }
    }
  }
  if ((!OptForSize) && (Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src, (undef:v4i32))<<P:Predicate_unpckl_undef>>:$src2
    // Emits: (PSHUFDri:v4i32 VR128:v16i8:$src, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src2))
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_unpckl_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_238(N, X86::PSHUFDri, MVT::v4i32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src, (undef:v4i32))<<P:Predicate_unpckh_undef>>:$src2
    // Emits: (PSHUFDri:v4i32 VR128:v16i8:$src, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src2))
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_unpckh_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_238(N, X86::PSHUFDri, MVT::v4i32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_movl>>
    // Emits: (MOVLPSrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 19  cost = 1  size = 3
    if (Predicate_movl(N)) {
      SDNode *Result = Emit_15(N, X86::MOVLPSrr, MVT::v4i32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_movlp>>
    // Emits: (MOVLPDrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 19  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDNode *Result = Emit_15(N, X86::MOVLPDrr, MVT::v4i32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src, (undef:v4i32))<<P:Predicate_unpckl_undef>>
    // Emits: (PUNPCKLDQrr:v4i32 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckl_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKLDQrr, MVT::v4i32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src, (undef:v4i32))<<P:Predicate_unpckh_undef>>
    // Emits: (PUNPCKHDQrr:v4i32 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckh_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKHDQrr, MVT::v4i32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, (undef:v4i32))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src2
    // Emits: (PSHUFDri:v4i32 VR128:v4i32:$src1, (SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v4i32 VR128:v4i32:$src1, (undef:v4i32)):$src2))
    // Pattern complexity = 12  cost = 1  size = 3
    if (Predicate_pshufd(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_238(N, X86::PSHUFDri, MVT::v4i32);
        return Result;
      }
    }
  }

  // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_palign>><<X:SHUFFLE_get_palign_imm>>:$src3
  // Emits: (PALIGNR128rr:v4i32 VR128:v16i8:$src2, VR128:v16i8:$src1, (SHUFFLE_get_palign_imm:i8 VR128:i8:$src3))
  // Pattern complexity = 9  cost = 1  size = 3
  if ((Subtarget->hasSSSE3()) &&
      Predicate_palign(N)) {
    SDNode *Result = Emit_231(N, X86::PALIGNR128rr, MVT::v4i32);
    return Result;
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLDQrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKLDQrr, MVT::v4i32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHDQrr:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKHDQrr, MVT::v4i32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPSrri:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDNode *Result = Emit_242(N, X86::SHUFPSrri, MVT::v4i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_244(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);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N100);
}
DISABLE_INLINE SDNode *Emit_245(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_246(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N0, Tmp3);
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v2i64(SDNode *N) {

  // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)<<P:Predicate_movlp>>
  // Emits: (MOVLPDrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 46  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) &&
      Predicate_movlp(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::MOVLPDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v2i64 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (undef:v2i64))<<P:Predicate_movddup>>
  // Emits: (MOVDDUPrm:v2i64 addr:iPTR:$src)
  // Pattern complexity = 34  cost = 1  size = 3
  if ((Subtarget->hasSSE3()) &&
      Predicate_movddup(N)) {
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::UNDEF) {
            SDNode *Result = Emit_245(N, X86::MOVDDUPrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src, (undef:v2i64))<<P:Predicate_movddup>>
  // Emits: (MOVLHPSrr:v2i64 VR128:v16i8:$src, VR128:v16i8:$src)
  // Pattern complexity = 27  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) &&
      Predicate_movddup(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MOVLHPSrr, MVT::v2i64);
      return Result;
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLQDQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 26  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PUNPCKLQDQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHQDQrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 26  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PUNPCKHQDQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)<<P:Predicate_movl>>
    // Emits: (MOVLPDrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
    // Pattern complexity = 19  cost = 1  size = 3
    if (Predicate_movl(N)) {
      SDNode *Result = Emit_15(N, X86::MOVLPDrr, MVT::v2i64);
      return Result;
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src, (undef:v2i64))<<P:Predicate_splat_lo>>
    // Emits: (PUNPCKLQDQrr:v2i64 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_splat_lo(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKLQDQrr, MVT::v2i64);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src, (undef:v2i64))<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHQDQrr:v2i64 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::PUNPCKHQDQrr, MVT::v2i64);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v2i64 (build_vector:v2i64)<<P:Predicate_immAllZerosV>>, (scalar_to_vector:v2i64 (bitconvert:i64 VR64:v8i8:$src)))<<P:Predicate_movl>>
    // Emits: (MMX_MOVQ2DQrr:v2i64 VR64:v8i8:$src)
    // Pattern complexity = 14  cost = 1  size = 3
    if (Predicate_movl(N)) {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::BUILD_VECTOR &&
          Predicate_immAllZerosV(N0.getNode())) {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR) {
          SDValue N10 = N1.getNode()->getOperand(0);
          if (N10.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N100 = N10.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::i64 &&
                N100.getValueType() == MVT::v8i8) {
              SDNode *Result = Emit_244(N, X86::MMX_MOVQ2DQrr, MVT::v2i64);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, (undef:v2i64))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPDrri:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src1, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_pshufd(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_246(N, X86::SHUFPDrri, MVT::v2i64);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)<<P:Predicate_unpckl>>
    // Emits: (PUNPCKLQDQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKLQDQrr, MVT::v2i64);
      return Result;
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)<<P:Predicate_unpckh>>
    // Emits: (PUNPCKHQDQrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::PUNPCKHQDQrr, MVT::v2i64);
      return Result;
    }

    // Pattern: (vector_shuffle:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPDrri:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDNode *Result = Emit_242(N, X86::SHUFPDrri, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_247(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1001_0, SDValue &CPTmpN1001_1, SDValue &CPTmpN1001_2, SDValue &CPTmpN1001_3, SDValue &CPTmpN1001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue N100 = N10.getNode()->getOperand(0);
  SDValue Chain100 = N100.getNode()->getOperand(0);
  SDValue N1001 = N100.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N100.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4, Chain100 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N100.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_248(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  SDValue Tmp3 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Tmp3, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_249(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp3 = Transform_SHUFFLE_get_shuf_imm(SDValue(N, 0).getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N1, N0, Tmp3);
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (bitconvert:v4f32 (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)))<<P:Predicate_movlp>>
    // Emits: (MOVLPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 52  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
            N10.hasOneUse()) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::LOAD &&
              N100.hasOneUse() &&
              IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
            SDValue Chain100 = N100.getNode()->getOperand(0);
            if (Predicate_unindexedload(N100.getNode()) &&
                Predicate_load(N100.getNode()) &&
                Predicate_loadf64(N100.getNode())) {
              SDValue N1001 = N100.getNode()->getOperand(1);
              SDValue CPTmpN1001_0;
              SDValue CPTmpN1001_1;
              SDValue CPTmpN1001_2;
              SDValue CPTmpN1001_3;
              SDValue CPTmpN1001_4;
              if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                  N10.getValueType() == MVT::v2f64 &&
                  N100.getValueType() == MVT::f64) {
                SDNode *Result = Emit_247(N, X86::MOVLPSrm, MVT::v4f32, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (bitconvert:v4f32 (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)))<<P:Predicate_movlhps>>
    // Emits: (MOVHPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 52  cost = 1  size = 3
    if (Predicate_movlhps(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
            N10.hasOneUse()) {
          SDValue N100 = N10.getNode()->getOperand(0);
          if (N100.getNode()->getOpcode() == ISD::LOAD &&
              N100.hasOneUse() &&
              IsLegalAndProfitableToFold(N100.getNode(), N10.getNode(), N)) {
            SDValue Chain100 = N100.getNode()->getOperand(0);
            if (Predicate_unindexedload(N100.getNode()) &&
                Predicate_load(N100.getNode()) &&
                Predicate_loadf64(N100.getNode())) {
              SDValue N1001 = N100.getNode()->getOperand(1);
              SDValue CPTmpN1001_0;
              SDValue CPTmpN1001_1;
              SDValue CPTmpN1001_2;
              SDValue CPTmpN1001_3;
              SDValue CPTmpN1001_4;
              if (SelectAddr(N, N1001, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4) &&
                  N10.getValueType() == MVT::v2f64 &&
                  N100.getValueType() == MVT::f64) {
                SDNode *Result = Emit_247(N, X86::MOVHPSrm, MVT::v4f32, CPTmpN1001_0, CPTmpN1001_1, CPTmpN1001_2, CPTmpN1001_3, CPTmpN1001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)<<P:Predicate_movlp>>
    // Emits: (MOVLPSrm:v4f32 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 46  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MOVLPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v4f32 (bitconvert:v4f32 (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>), (undef:v4f32))<<P:Predicate_movddup>>
  // Emits: (MOVDDUPrm:v4f32 addr:iPTR:$src)
  // Pattern complexity = 37  cost = 1  size = 3
  if ((Subtarget->hasSSE3()) &&
      Predicate_movddup(N)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode()) &&
            Predicate_memop(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                N00.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_241(N, X86::MOVDDUPrm, MVT::v4f32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_unpckh>>
    // Emits: (UNPCKHPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 36  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::UNPCKHPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_unpckl>>
    // Emits: (UNPCKLPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 36  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::UNPCKLPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE3())) {

    // Pattern: (vector_shuffle:v4f32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (undef:v4f32))<<P:Predicate_movshdup>>
    // Emits: (MOVSHDUPrm:v4f32 addr:iPTR:$src)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_movshdup(N)) {
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::UNDEF) {
              SDNode *Result = Emit_245(N, X86::MOVSHDUPrm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4f32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (undef:v4f32))<<P:Predicate_movsldup>>
    // Emits: (MOVSLDUPrm:v4f32 addr:iPTR:$src)
    // Pattern complexity = 29  cost = 1  size = 3
    if (Predicate_movsldup(N)) {
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::UNDEF) {
              SDNode *Result = Emit_245(N, X86::MOVSLDUPrm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_movddup>>
  // Emits: (MOVLHPSrr:v4f32 VR128:v16i8:$src, VR128:v16i8:$src)
  // Pattern complexity = 27  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) &&
      Predicate_movddup(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MOVLHPSrr, MVT::v4f32);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (undef:v4f32))<<P:Predicate_movhlps_undef>>
  // Emits: (MOVHLPSrr:v4f32 VR128:v16i8:$src1, VR128:v16i8:$src1)
  // Pattern complexity = 27  cost = 1  size = 3
  if (Predicate_movhlps_undef(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_161(N, X86::MOVHLPSrr, MVT::v4f32);
      return Result;
    }
  }
  if ((Subtarget->hasSSE1())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPSrmi:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2, (SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>):$src3))
    // Pattern complexity = 26  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_248(N, X86::SHUFPSrmi, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_movlhps>>
    // Emits: (MOVLHPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 24  cost = 1  size = 3
    if (Predicate_movlhps(N)) {
      SDNode *Result = Emit_15(N, X86::MOVLHPSrr, MVT::v4f32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_movhlps>>
    // Emits: (MOVHLPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 24  cost = 1  size = 3
    if (Predicate_movhlps(N)) {
      SDNode *Result = Emit_15(N, X86::MOVHLPSrr, MVT::v4f32);
      return Result;
    }
  }
  if ((!OptForSize) && (Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_unpckl_undef>>:$src2
    // Emits: (PSHUFDri:v4f32 VR128:v16i8:$src, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src2))
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_unpckl_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_238(N, X86::PSHUFDri, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_unpckh_undef>>:$src2
    // Emits: (PSHUFDri:v4f32 VR128:v16i8:$src, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src2))
    // Pattern complexity = 22  cost = 1  size = 3
    if (Predicate_unpckh_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_238(N, X86::PSHUFDri, MVT::v4f32);
        return Result;
      }
    }
  }

  // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_movl>>
  // Emits: (MOVLPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
  // Pattern complexity = 19  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) &&
      Predicate_movl(N)) {
    SDNode *Result = Emit_15(N, X86::MOVLPSrr, MVT::v4f32);
    return Result;
  }

  // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_movlp>>
  // Emits: (MOVLPDrr:v4f32 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 19  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) &&
      Predicate_movlp(N)) {
    SDNode *Result = Emit_15(N, X86::MOVLPDrr, MVT::v4f32);
    return Result;
  }
  if ((Subtarget->hasSSE1())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_unpckl_undef>>
    // Emits: (UNPCKLPSrr:v4f32 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckl_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::UNPCKLPSrr, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_unpckh_undef>>
    // Emits: (UNPCKHPSrr:v4f32 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_unpckh_undef(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::UNPCKHPSrr, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_unpckh>>
    // Emits: (UNPCKHPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 14  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDNode *Result = Emit_15(N, X86::UNPCKHPSrr, MVT::v4f32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_unpckl>>
    // Emits: (UNPCKLPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 14  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::UNPCKLPSrr, MVT::v4f32);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (undef:v4f32))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src2
  // Emits: (PSHUFDri:v4f32 VR128:v16i8:$src1, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src2))
  // Pattern complexity = 12  cost = 1  size = 3
  if ((Subtarget->hasSSE2()) &&
      Predicate_pshufd(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_238(N, X86::PSHUFDri, MVT::v4f32);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_palign>><<X:SHUFFLE_get_palign_imm>>:$src3
  // Emits: (PALIGNR128rr:v4f32 VR128:v16i8:$src2, VR128:v16i8:$src1, (SHUFFLE_get_palign_imm:i8 VR128:i8:$src3))
  // Pattern complexity = 9  cost = 1  size = 3
  if ((Subtarget->hasSSSE3()) &&
      Predicate_palign(N)) {
    SDNode *Result = Emit_231(N, X86::PALIGNR128rr, MVT::v4f32);
    return Result;
  }
  if ((Subtarget->hasSSE3())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_movshdup>>
    // Emits: (MOVSHDUPrr:v4f32 VR128:v4f32:$src)
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_movshdup(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_93(N, X86::MOVSHDUPrr, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src, (undef:v4f32))<<P:Predicate_movsldup>>
    // Emits: (MOVSLDUPrr:v4f32 VR128:v4f32:$src)
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_movsldup(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_93(N, X86::MOVSLDUPrr, MVT::v4f32);
        return Result;
      }
    }
  }
  if ((Subtarget->hasSSE1())) {

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, (undef:v4f32))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPSrri:v4f32 VR128:v16i8:$src1, VR128:v16i8:$src1, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_pshufd(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_246(N, X86::SHUFPSrri, MVT::v4f32);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPSrri:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2, (SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2):$src3))
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDNode *Result = Emit_242(N, X86::SHUFPSrri, MVT::v4f32);
      return Result;
    }

    // Pattern: (vector_shuffle:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)<<P:Predicate_movlp>>:$src3
    // Emits: (SHUFPSrri:v4f32 VR128:v16i8:$src2, VR128:v16i8:$src1, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDNode *Result = Emit_249(N, X86::SHUFPSrri, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_250(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0001_0, SDValue &CPTmpN0001_1, SDValue &CPTmpN0001_2, SDValue &CPTmpN0001_3, SDValue &CPTmpN0001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue Chain000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N000.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN0001_0, CPTmpN0001_1, CPTmpN0001_2, CPTmpN0001_3, CPTmpN0001_4, Chain000 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N000.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_ISD_VECTOR_SHUFFLE_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>))<<P:Predicate_movlp>>
    // Emits: (MOVLPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 49  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadf64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::f64) {
              SDNode *Result = Emit_16(N, X86::MOVLPDrm, MVT::v2f64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>))<<P:Predicate_movlhps>>
    // Emits: (MOVHPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 49  cost = 1  size = 3
    if (Predicate_movlhps(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_loadf64(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::f64) {
              SDNode *Result = Emit_16(N, X86::MOVHPDrm, MVT::v2f64, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)<<P:Predicate_movlp>>
    // Emits: (MOVLPDrm:v2f64 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 46  cost = 1  size = 3
    if (Predicate_movlp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MOVLPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_unpckh>>
    // Emits: (UNPCKHPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 36  cost = 1  size = 3
    if (Predicate_unpckh(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::UNPCKHPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_unpckl>>
    // Emits: (UNPCKLPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 36  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::UNPCKLPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE3()) &&
      Predicate_movddup(N)) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (vector_shuffle:v2f64 (bitconvert:v2f64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)), (undef:v2f64))<<P:Predicate_movddup>>
    // Emits: (MOVDDUPrm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 35  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
          N00.hasOneUse()) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::LOAD &&
            N000.hasOneUse() &&
            IsLegalAndProfitableToFold(N000.getNode(), N00.getNode(), N)) {
          SDValue Chain000 = N000.getNode()->getOperand(0);
          if (Predicate_unindexedload(N000.getNode()) &&
              Predicate_load(N000.getNode()) &&
              Predicate_loadi64(N000.getNode())) {
            SDValue N0001 = N000.getNode()->getOperand(1);
            SDValue CPTmpN0001_0;
            SDValue CPTmpN0001_1;
            SDValue CPTmpN0001_2;
            SDValue CPTmpN0001_3;
            SDValue CPTmpN0001_4;
            if (SelectAddr(N, N0001, CPTmpN0001_0, CPTmpN0001_1, CPTmpN0001_2, CPTmpN0001_3, CPTmpN0001_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                  N00.getValueType() == MVT::v2i64 &&
                  N000.getValueType() == MVT::i64) {
                SDNode *Result = Emit_250(N, X86::MOVDDUPrm, MVT::v2f64, CPTmpN0001_0, CPTmpN0001_1, CPTmpN0001_2, CPTmpN0001_3, CPTmpN0001_4);
                return Result;
              }
            }
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2f64 (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (undef:v2f64))<<P:Predicate_movddup>>
    // Emits: (MOVDDUPrm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 34  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::UNDEF) {
            SDNode *Result = Emit_245(N, X86::MOVDDUPrm, MVT::v2f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (vector_shuffle:v2f64 (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>), (undef:v2f64))<<P:Predicate_movddup>>
    // Emits: (MOVDDUPrm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 32  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode()) &&
            Predicate_loadf64(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::UNDEF &&
                N00.getValueType() == MVT::f64) {
              SDNode *Result = Emit_241(N, X86::MOVDDUPrm, MVT::v2f64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPDrmi:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2, (SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>):$src3))
    // Pattern complexity = 26  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_248(N, X86::SHUFPDrmi, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
    if (Predicate_movl(N)) {

      // Pattern: (vector_shuffle:v2f64 (bitconvert:v2f64)<<P:Predicate_immAllZerosV_bc>>, VR128:v2f64:$src)<<P:Predicate_movl>>
      // Emits: (MOVZPQILo2PQIrr:v2f64 VR128:v16i8:$src)
      // Pattern complexity = 23  cost = 1  size = 3
      {
        SDValue N0 = N->getOperand(0);
        if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
            Predicate_immAllZerosV_bc(N0.getNode())) {
          SDNode *Result = Emit_107(N, X86::MOVZPQILo2PQIrr, MVT::v2f64);
          return Result;
        }
      }

      // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)<<P:Predicate_movl>>
      // Emits: (MOVLPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 19  cost = 1  size = 3
      SDNode *Result = Emit_15(N, X86::MOVLPDrr, MVT::v2f64);
      return Result;
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src, (undef:v2f64))<<P:Predicate_splat_lo>>
    // Emits: (UNPCKLPDrr:v2f64 VR128:v16i8:$src, VR128:v16i8:$src)
    // Pattern complexity = 17  cost = 1  size = 3
    if (Predicate_splat_lo(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_161(N, X86::UNPCKLPDrr, MVT::v2f64);
        return Result;
      }
    }
    if (Predicate_unpckh(N)) {

      // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src, (undef:v2f64))<<P:Predicate_unpckh>>
      // Emits: (UNPCKHPDrr:v2f64 VR128:v16i8:$src, VR128:v16i8:$src)
      // Pattern complexity = 17  cost = 1  size = 3
      {
        SDValue N0 = N->getOperand(0);
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::UNDEF) {
          SDNode *Result = Emit_161(N, X86::UNPCKHPDrr, MVT::v2f64);
          return Result;
        }
      }

      // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)<<P:Predicate_unpckh>>
      // Emits: (UNPCKHPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
      // Pattern complexity = 14  cost = 1  size = 3
      SDNode *Result = Emit_15(N, X86::UNPCKHPDrr, MVT::v2f64);
      return Result;
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)<<P:Predicate_unpckl>>
    // Emits: (UNPCKLPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 14  cost = 1  size = 3
    if (Predicate_unpckl(N)) {
      SDNode *Result = Emit_15(N, X86::UNPCKLPDrr, MVT::v2f64);
      return Result;
    }
  }

  // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src, (undef:v2f64))<<P:Predicate_movddup>>
  // Emits: (MOVDDUPrr:v2f64 VR128:v2f64:$src)
  // Pattern complexity = 7  cost = 1  size = 3
  if ((Subtarget->hasSSE3()) &&
      Predicate_movddup(N)) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::UNDEF) {
      SDNode *Result = Emit_93(N, X86::MOVDDUPrr, MVT::v2f64);
      return Result;
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, (undef:v2f64))<<P:Predicate_pshufd>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPDrri:v2f64 VR128:v16i8:$src1, VR128:v16i8:$src1, (SHUFFLE_get_shuf_imm:i8 VR128:i8:$src3))
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_pshufd(N)) {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::UNDEF) {
        SDNode *Result = Emit_246(N, X86::SHUFPDrri, MVT::v2f64);
        return Result;
      }
    }

    // Pattern: (vector_shuffle:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)<<P:Predicate_shufp>><<X:SHUFFLE_get_shuf_imm>>:$src3
    // Emits: (SHUFPDrri:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2, (SHUFFLE_get_shuf_imm:i8 (vector_shuffle:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2):$src3))
    // Pattern complexity = 4  cost = 1  size = 3
    if (Predicate_shufp(N)) {
      SDNode *Result = Emit_242(N, X86::SHUFPDrri, MVT::v2f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_XOR_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (XOR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (xor:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR8:i8:$src1)
    // Emits: (XOR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (xor:i8 GR8:i8:$src, (imm:i8)<<P:Predicate_immAllOnes>>)
      // Emits: (NOT8r:i8 GR8:i8:$src)
      // Pattern complexity = 22  cost = 1  size = 2
      if (Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_93(N, X86::NOT8r, MVT::i8);
        return Result;
      }

      // Pattern: (xor:i8 GR8:i8:$src1, (imm:i8):$src2)
      // Emits: (XOR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_3(N, X86::XOR8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (xor:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (XOR8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR8rr, MVT::i8);
  return Result;
}

SDNode *Select_ISD_XOR_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (XOR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (xor:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR16:i16:$src1)
    // Emits: (XOR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (xor:i16 GR16:i16:$src, (imm:i16)<<P:Predicate_immAllOnes>>)
      // Emits: (NOT16r:i16 GR16:i16:$src)
      // Pattern complexity = 22  cost = 1  size = 2
      if (Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_93(N, X86::NOT16r, MVT::i16);
        return Result;
      }

      // Pattern: (xor:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (XOR16ri8:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::XOR16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (xor:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (XOR16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::XOR16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (xor:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (XOR16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR16rr, MVT::i16);
  return Result;
}

SDNode *Select_ISD_XOR_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (XOR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (xor:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR32:i32:$src1)
    // Emits: (XOR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (xor:i32 GR32:i32:$src, (imm:i32)<<P:Predicate_immAllOnes>>)
      // Emits: (NOT32r:i32 GR32:i32:$src)
      // Pattern complexity = 22  cost = 1  size = 2
      if (Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_93(N, X86::NOT32r, MVT::i32);
        return Result;
      }

      // Pattern: (xor:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (XOR32ri8:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::XOR32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (xor:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (XOR32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::XOR32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (xor:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (XOR32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR32rr, MVT::i32);
  return Result;
}

SDNode *Select_ISD_XOR_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (XOR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (xor:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, GR64:i64:$src1)
    // Emits: (XOR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (xor:i64 GR64:i64:$src, (imm:i64)<<P:Predicate_immAllOnes>>)
      // Emits: (NOT64r:i64 GR64:i64:$src)
      // Pattern complexity = 22  cost = 1  size = 3
      if (Predicate_immAllOnes(N1.getNode())) {
        SDNode *Result = Emit_93(N, X86::NOT64r, MVT::i64);
        return Result;
      }

      // Pattern: (xor:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (XOR64ri8:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::XOR64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (xor:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (XOR64ri32:i64 GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::XOR64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (xor:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (XOR64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR64rr, MVT::i64);
  return Result;
}

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

      // Pattern: (xor:v1i64 VR64:v1i64:$src1, (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
      // Emits: (MMX_PXORrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          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;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::MMX_PXORrm, MVT::v1i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (xor:v1i64 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>, VR64:v1i64:$src1)
      // Emits: (MMX_PXORrm:v1i64 VR64:v1i64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::MMX_PXORrm, MVT::v1i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (xor:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Emits: (MMX_PXORrr:v1i64 VR64:v1i64:$src1, VR64:v1i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MMX_PXORrr, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_XOR_v2i64(SDNode *N) {

  // Pattern: (xor:v2i64 (bitconvert:v2i64 VR128:v4f32:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (XORPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
              N00.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_57(N, X86::XORPSrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (xor:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (XORPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
              N00.getValueType() == MVT::v2f64) {
            SDNode *Result = Emit_57(N, X86::XORPDrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (xor:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (bitconvert:v2i64 VR128:v4f32:$src1))
  // Emits: (XORPSrm:v2i64 VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_62(N, X86::XORPSrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (xor:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (bitconvert:v2i64 VR128:v2f64:$src1))
    // Emits: (XORPDrm:v2i64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
            SDValue N10 = N1.getNode()->getOperand(0);
            if (N10.getValueType() == MVT::v2f64) {
              SDNode *Result = Emit_62(N, X86::XORPDrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (xor:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PXORrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PXORrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (xor:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2i64:$src1)
    // Emits: (PXORrm:v2i64 VR128:v2i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PXORrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (xor:v2i64 (bitconvert:v2i64 VR128:v2f64:$src1), (bitconvert:v2i64 VR128:v2f64:$src2))
    // Emits: (XORPDrr:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 9  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT) {
      SDValue N00 = N0.getNode()->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N00.getValueType() == MVT::v2f64 &&
            N10.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_59(N, X86::XORPDrr, MVT::v2i64);
          return Result;
        }
      }
    }
  }

  // Pattern: (xor:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (XORPSrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_15(N, X86::XORPSrr, MVT::v2i64);
    return Result;
  }

  // Pattern: (xor:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (PXORrr:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDNode *Result = Emit_15(N, X86::PXORrr, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ZERO_EXTEND_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVZX16rr8, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ZERO_EXTEND_i32(SDNode *N) {

  // Pattern: (zext:i32 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
  // Emits: (MOVZX32rr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32))
  // Pattern complexity = 12  cost = 3  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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(8) &&
            N0.getValueType() == MVT::i16 &&
            N01.getValueType() == MVT::i8) {
          SDNode *Result = Emit_74(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32rr8, MVT::i16, MVT::i8, MVT::i32);
          return Result;
        }
      }
    }
  }

  // Pattern: (zext:i32 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
  // Emits: (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32))
  // Pattern complexity = 12  cost = 3  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SRL &&
        Predicate_srl_su(N0.getNode())) {
      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(8) &&
            N0.getValueType() == MVT::i16 &&
            N01.getValueType() == MVT::i8) {
          SDNode *Result = Emit_74(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, MVT::i16, MVT::i8, MVT::i32);
          return Result;
        }
      }
    }
  }
  SDValue N0 = N->getOperand(0);

  // Pattern: (zext:i32 GR8:i8:$src)
  // Emits: (MOVZX32rr8:i32 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVZX32rr8, MVT::i32);
    return Result;
  }

  // Pattern: (zext:i32 GR16:i16:$src)
  // Emits: (MOVZX32rr16:i32 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_72(N, X86::MOVZX32rr16, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_ISD_ZERO_EXTEND_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (zext:i64 (srl:i16 GR16:i16:$src, 8:i8)<<P:Predicate_srl_su>>)
  // Emits: (SUBREG_TO_REG:i64 0:i64, (MOVZX32_NOREXrr8:i32 (EXTRACT_SUBREG:i8 (COPY_TO_REGCLASS:i16 GR16:i16:$src, GR16_ABCD:i16), 2:i32)), 4:i32)
  // Pattern complexity = 12  cost = 4  size = 3
  if (N0.getNode()->getOpcode() == ISD::SRL &&
      Predicate_srl_su(N0.getNode())) {
    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(8) &&
          N0.getValueType() == MVT::i16 &&
          N01.getValueType() == MVT::i8) {
        SDNode *Result = Emit_76(N, TargetOpcode::COPY_TO_REGCLASS, TargetOpcode::EXTRACT_SUBREG, X86::MOVZX32_NOREXrr8, TargetOpcode::SUBREG_TO_REG, MVT::i16, MVT::i8, MVT::i32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (zext:i64 GR32:i32<<P:Predicate_def32>>:$src)
  // Emits: (SUBREG_TO_REG:i64 0:i64, GR32:i32:$src, 4:i32)
  // Pattern complexity = 4  cost = 1  size = 0
  if (Predicate_def32(N0.getNode()) &&
      N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_75(N, TargetOpcode::SUBREG_TO_REG, MVT::i64);
    return Result;
  }

  // Pattern: (zext:i64 GR8:i8:$src)
  // Emits: (MOVZX64rr8:i64 GR8:i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_72(N, X86::MOVZX64rr8, MVT::i64);
    return Result;
  }

  // Pattern: (zext:i64 GR16:i16:$src)
  // Emits: (MOVZX64rr16:i64 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_72(N, X86::MOVZX64rr16, MVT::i64);
    return Result;
  }

  // Pattern: (zext:i64 GR32:i32:$src)
  // Emits: (MOVZX64rr32:i64 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_72(N, X86::MOVZX64rr32, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_ADD_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86add_flag:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
    // Emits: (ADD8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi8(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86add_flag:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src1)
    // Emits: (ADD8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi8(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (X86add_flag:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (ADD8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::ADD8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (X86add_flag:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (ADD8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD8rr, MVT::i8);
  return Result;
}

SDNode *Select_X86ISD_ADD_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86add_flag:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (ADD16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi16(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86add_flag:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1)
    // Emits: (ADD16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86add_flag:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (ADD16ri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::ADD16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (X86add_flag:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (ADD16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::ADD16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86add_flag:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (ADD16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_ADD_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86add_flag:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (ADD32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86add_flag:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1)
    // Emits: (ADD32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86add_flag:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (ADD32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::ADD32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (X86add_flag:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (ADD32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::ADD32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86add_flag:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (ADD32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_ADD_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86add_flag:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (ADD64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::ADD64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86add_flag:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src1)
    // Emits: (ADD64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::ADD64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86add_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (ADD64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::ADD64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (X86add_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (ADD64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::ADD64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (X86add_flag:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (ADD64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::ADD64rr, MVT::i64);
  return Result;
}

SDNode *Select_X86ISD_AND_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86and_flag:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
    // Emits: (AND8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi8(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86and_flag:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src1)
    // Emits: (AND8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi8(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (X86and_flag:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (AND8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::AND8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (X86and_flag:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (AND8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND8rr, MVT::i8);
  return Result;
}

SDNode *Select_X86ISD_AND_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86and_flag:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (AND16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi16(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86and_flag:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1)
    // Emits: (AND16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86and_flag:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (AND16ri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::AND16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (X86and_flag:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (AND16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::AND16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86and_flag:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (AND16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_AND_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86and_flag:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (AND32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86and_flag:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1)
    // Emits: (AND32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86and_flag:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (AND32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::AND32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (X86and_flag:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (AND32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::AND32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86and_flag:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (AND32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_AND_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86and_flag:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (AND64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::AND64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86and_flag:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src1)
    // Emits: (AND64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::AND64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86and_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (AND64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::AND64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (X86and_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (AND64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::AND64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (X86and_flag:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (AND64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::AND64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_251(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 InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EFLAGS, N3, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, N1, Chain, InFlag);
}
SDNode *Select_X86ISD_BRCOND(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::BasicBlock) {
    SDValue N2 = N->getOperand(2);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 13:i8, EFLAGS:i32)
      // Emits: (JO_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(13)) {
        SDNode *Result = Emit_251(N, X86::JO_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 10:i8, EFLAGS:i32)
      // Emits: (JNO_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(10)) {
        SDNode *Result = Emit_251(N, X86::JNO_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 2:i8, EFLAGS:i32)
      // Emits: (JB_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(2)) {
        SDNode *Result = Emit_251(N, X86::JB_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 1:i8, EFLAGS:i32)
      // Emits: (JAE_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_251(N, X86::JAE_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 4:i8, EFLAGS:i32)
      // Emits: (JE_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(4)) {
        SDNode *Result = Emit_251(N, X86::JE_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 9:i8, EFLAGS:i32)
      // Emits: (JNE_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(9)) {
        SDNode *Result = Emit_251(N, X86::JNE_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 3:i8, EFLAGS:i32)
      // Emits: (JBE_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(3)) {
        SDNode *Result = Emit_251(N, X86::JBE_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 0:i8, EFLAGS:i32)
      // Emits: (JA_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(0)) {
        SDNode *Result = Emit_251(N, X86::JA_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 15:i8, EFLAGS:i32)
      // Emits: (JS_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(15)) {
        SDNode *Result = Emit_251(N, X86::JS_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 12:i8, EFLAGS:i32)
      // Emits: (JNS_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(12)) {
        SDNode *Result = Emit_251(N, X86::JNS_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 14:i8, EFLAGS:i32)
      // Emits: (JP_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(14)) {
        SDNode *Result = Emit_251(N, X86::JP_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 11:i8, EFLAGS:i32)
      // Emits: (JNP_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(11)) {
        SDNode *Result = Emit_251(N, X86::JNP_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 7:i8, EFLAGS:i32)
      // Emits: (JL_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(7)) {
        SDNode *Result = Emit_251(N, X86::JL_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 6:i8, EFLAGS:i32)
      // Emits: (JGE_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(6)) {
        SDNode *Result = Emit_251(N, X86::JGE_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 8:i8, EFLAGS:i32)
      // Emits: (JLE_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(8)) {
        SDNode *Result = Emit_251(N, X86::JLE_4);
        return Result;
      }

      // Pattern: (X86brcond:isVoid (bb:Other):$dst, 5:i8, EFLAGS:i32)
      // Emits: (JG_4:isVoid (bb:Other):$dst)
      // Pattern complexity = 8  cost = 1  size = 3
      if (CN1 == INT64_C(5)) {
        SDNode *Result = Emit_251(N, X86::JG_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_252(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0);
}
DISABLE_INLINE SDNode *Emit_253(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 2));
  return ResNode;
}
SDNode *Select_X86ISD_BSF_i16(SDNode *N) {

  // Pattern: (X86bsf:i16 (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
  // Emits: (BSF16rm:i16 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_253(N, X86::BSF16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86bsf:i16 GR16:i16:$src)
  // Emits: (BSF16rr:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_252(N, X86::BSF16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_BSF_i32(SDNode *N) {

  // Pattern: (X86bsf:i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
  // Emits: (BSF32rm:i32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_253(N, X86::BSF32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86bsf:i32 GR32:i32:$src)
  // Emits: (BSF32rr:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_252(N, X86::BSF32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_BSF_i64(SDNode *N) {

  // Pattern: (X86bsf:i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
  // Emits: (BSF64rm:i64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_253(N, X86::BSF64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86bsf:i64 GR64:i64:$src)
  // Emits: (BSF64rr:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_252(N, X86::BSF64rr, MVT::i64);
  return Result;
}

SDNode *Select_X86ISD_BSR_i16(SDNode *N) {

  // Pattern: (X86bsr:i16 (ld:i16 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
  // Emits: (BSR16rm:i16 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_253(N, X86::BSR16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86bsr:i16 GR16:i16:$src)
  // Emits: (BSR16rr:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_252(N, X86::BSR16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_BSR_i32(SDNode *N) {

  // Pattern: (X86bsr:i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
  // Emits: (BSR32rm:i32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_253(N, X86::BSR32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86bsr:i32 GR32:i32:$src)
  // Emits: (BSR32rr:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_252(N, X86::BSR32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_BSR_i64(SDNode *N) {

  // Pattern: (X86bsr:i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
  // Emits: (BSR64rm:i64 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_253(N, X86::BSR64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86bsr:i64 GR64:i64:$src)
  // Emits: (BSR64rr:i64 GR64:i64:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_252(N, X86::BSR64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_254(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, N1);
}
DISABLE_INLINE SDNode *Emit_255(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_256(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);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_257(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_258(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  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();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_259(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_260(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_BT(SDNode *N) {
  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())) {

      // Pattern: (X86bt:isVoid (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (BT16mi8:isVoid addr:iPTR:$src1, (imm:i16):$src2)
      // Pattern complexity = 29  cost = 1  size = 3
      if (Predicate_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant &&
              Predicate_i16immSExt8(N1.getNode()) &&
              N0.getValueType() == MVT::i16) {
            SDNode *Result = Emit_257(N, X86::BT16mi8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }

      // Pattern: (X86bt:isVoid (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (BT32mi8:isVoid addr:iPTR:$src1, (imm:i32):$src2)
      // Pattern complexity = 29  cost = 1  size = 3
      if (Predicate_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant &&
              Predicate_i32immSExt8(N1.getNode()) &&
              N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_258(N, X86::BT32mi8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }

      // Pattern: (X86bt:isVoid (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (BT64mi8:isVoid addr:iPTR:$src1, (imm:i64):$src2)
      // Pattern complexity = 29  cost = 1  size = 3
      if (Predicate_load(N0.getNode()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant &&
              Predicate_i64immSExt8(N1.getNode()) &&
              N0.getValueType() == MVT::i64) {
            SDNode *Result = Emit_260(N, X86::BT64mi8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant) {

    // Pattern: (X86bt:isVoid GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
    // Emits: (BT16ri8:isVoid GR16:i16:$src1, (imm:i16):$src2)
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_i16immSExt8(N1.getNode()) &&
        N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_255(N, X86::BT16ri8);
      return Result;
    }

    // Pattern: (X86bt:isVoid GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
    // Emits: (BT32ri8:isVoid GR32:i32:$src1, (imm:i32):$src2)
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_i32immSExt8(N1.getNode()) &&
        N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_256(N, X86::BT32ri8);
      return Result;
    }

    // Pattern: (X86bt:isVoid GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
    // Emits: (BT64ri8:isVoid GR64:i64:$src1, (imm:i64):$src2)
    // Pattern complexity = 7  cost = 1  size = 3
    if (Predicate_i64immSExt8(N1.getNode()) &&
        N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_259(N, X86::BT64ri8);
      return Result;
    }
  }

  // Pattern: (X86bt:isVoid GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (BT16rr:isVoid GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i16) {
    SDNode *Result = Emit_254(N, X86::BT16rr);
    return Result;
  }

  // Pattern: (X86bt:isVoid GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (BT32rr:isVoid GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i32) {
    SDNode *Result = Emit_254(N, X86::BT32rr);
    return Result;
  }

  // Pattern: (X86bt:isVoid GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (BT64rr:isVoid GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_254(N, X86::BT64rr);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_261(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;
}
DISABLE_INLINE SDNode *Emit_262(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4, unsigned NumInputRootOps) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SmallVector<SDValue, 8> Ops0;
  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 InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  Ops0.push_back(CPTmpN11_0);
  Ops0.push_back(CPTmpN11_1);
  Ops0.push_back(CPTmpN11_2);
  Ops0.push_back(CPTmpN11_3);
  Ops0.push_back(CPTmpN11_4);
  for (unsigned i = NumInputRootOps + 1, e = N->getNumOperands()-(HasInFlag?1:0); i != e; ++i) {
    Ops0.push_back(N->getOperand(i));
  }
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  Ops0.push_back(Chain1);
  if (HasInFlag)
    Ops0.push_back(InFlag);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, &Ops0[0], Ops0.size());
  Chain1 = SDValue(ResNode, 0);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  InFlag = SDValue(ResNode, 1);
  const SDValue Froms[] = {
    SDValue(N1.getNode(), 1),
    SDValue(N, 1),
    SDValue(N, 0)
  };
  const SDValue Tos[] = {
    SDValue(ResNode, 0),
    InFlag,
    SDValue(Chain1.getNode(), Chain1.getResNo())
  };
  ReplaceUses(Froms, Tos, 3);
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_263(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 Tmp0 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i32);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  Ops0.push_back(Tmp0);
  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_X86ISD_CALL(SDNode *N) {

  // Pattern: (X86call:isVoid (ld:i32 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
  // Emits: (CALL32m:isVoid addr:iPTR:$dst)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    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_loadi32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N1.getValueType() == MVT::i32) {
          SDNode *Result = Emit_262(N, X86::CALL32m, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, 1);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86call:isVoid (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
  // Emits: (CALL64m:isVoid addr:iPTR:$dst)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((!Subtarget->isTargetWin64())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    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()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N1.getValueType() == MVT::i64) {
          SDNode *Result = Emit_262(N, X86::CALL64m, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, 1);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86call:isVoid (ld:i64 addr:iPTR:$dst)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
  // Emits: (WINCALL64m:isVoid addr:iPTR:$dst)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->isTargetWin64())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    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()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N1.getValueType() == MVT::i64) {
          SDNode *Result = Emit_262(N, X86::WINCALL64m, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, 1);
          return Result;
        }
      }
    }
  }
  if ((!Subtarget->isTargetWin64())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86call:isVoid (tglobaladdr:i64):$dst)
    // Emits: (CALL64pcrel32:isVoid (tglobaladdr:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_261(N, X86::CALL64pcrel32, 1);
      return Result;
    }

    // Pattern: (X86call:isVoid (texternalsym:i64):$dst)
    // Emits: (CALL64pcrel32:isVoid (texternalsym:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_261(N, X86::CALL64pcrel32, 1);
      return Result;
    }
  }
  if ((Subtarget->isTargetWin64())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86call:isVoid (tglobaladdr:i64):$dst)
    // Emits: (WINCALL64pcrel32:isVoid (tglobaladdr:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_261(N, X86::WINCALL64pcrel32, 1);
      return Result;
    }

    // Pattern: (X86call:isVoid (texternalsym:i64):$dst)
    // Emits: (WINCALL64pcrel32:isVoid (texternalsym:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_261(N, X86::WINCALL64pcrel32, 1);
      return Result;
    }
  }
  {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86call:isVoid (tglobaladdr:i32):$dst)
    // Emits: (CALLpcrel32:isVoid (tglobaladdr:i32):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_261(N, X86::CALLpcrel32, 1);
      return Result;
    }

    // Pattern: (X86call:isVoid (texternalsym:i32):$dst)
    // Emits: (CALLpcrel32:isVoid (texternalsym:i32):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_261(N, X86::CALLpcrel32, 1);
      return Result;
    }
  }

  // Pattern: (X86call:isVoid (imm:i32):$dst)
  // Emits: (CALLpcrel32:isVoid (imm:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((Subtarget->IsLegalToCallImmediateAddr(TM))) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_263(N, X86::CALLpcrel32, 1);
      return Result;
    }
  }

  // Pattern: (X86call:isVoid GR32:i32:$dst)
  // Emits: (CALL32r:isVoid GR32:i32:$dst)
  // Pattern complexity = 3  cost = 1  size = 3
  {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_261(N, X86::CALL32r, 1);
      return Result;
    }
  }

  // Pattern: (X86call:isVoid GR64:i64:$dst)
  // Emits: (CALL64r:isVoid GR64:i64:$dst)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((!Subtarget->isTargetWin64())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_261(N, X86::CALL64r, 1);
      return Result;
    }
  }

  // Pattern: (X86call:isVoid GR64:i64:$dst)
  // Emits: (WINCALL64r:isVoid GR64:i64:$dst)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->isTargetWin64())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_261(N, X86::WINCALL64r, 1);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_264(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 Tmp2 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i8);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EFLAGS, N3, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  SDValue Ops0[] = { N0, N1, Tmp2, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, Ops0, 4);
}
SDNode *Select_X86ISD_CMOV_i8(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_264(N, X86::CMOV_GR8, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_265(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 Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EFLAGS, N3, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, InFlag);
}
DISABLE_INLINE SDNode *Emit_266(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = 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);
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain1, N->getDebugLoc(), X86::EFLAGS, N3, InFlag).getNode();
  Chain1 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_267(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain0, N->getDebugLoc(), X86::EFLAGS, N3, InFlag).getNode();
  Chain0 = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { N1, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Chain0, InFlag };
  ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_CMOV_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  {
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_loadi16(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 2:i8, EFLAGS:i32)
            // Emits: (CMOVB16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(2)) {
              SDNode *Result = Emit_266(N, X86::CMOVB16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 1:i8, EFLAGS:i32)
            // Emits: (CMOVAE16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(1)) {
              SDNode *Result = Emit_266(N, X86::CMOVAE16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 4:i8, EFLAGS:i32)
            // Emits: (CMOVE16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(4)) {
              SDNode *Result = Emit_266(N, X86::CMOVE16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 9:i8, EFLAGS:i32)
            // Emits: (CMOVNE16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(9)) {
              SDNode *Result = Emit_266(N, X86::CMOVNE16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 3:i8, EFLAGS:i32)
            // Emits: (CMOVBE16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(3)) {
              SDNode *Result = Emit_266(N, X86::CMOVBE16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 0:i8, EFLAGS:i32)
            // Emits: (CMOVA16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(0)) {
              SDNode *Result = Emit_266(N, X86::CMOVA16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 7:i8, EFLAGS:i32)
            // Emits: (CMOVL16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(7)) {
              SDNode *Result = Emit_266(N, X86::CMOVL16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 6:i8, EFLAGS:i32)
            // Emits: (CMOVGE16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(6)) {
              SDNode *Result = Emit_266(N, X86::CMOVGE16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 8:i8, EFLAGS:i32)
            // Emits: (CMOVLE16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(8)) {
              SDNode *Result = Emit_266(N, X86::CMOVLE16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 5:i8, EFLAGS:i32)
            // Emits: (CMOVG16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(5)) {
              SDNode *Result = Emit_266(N, X86::CMOVG16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 15:i8, EFLAGS:i32)
            // Emits: (CMOVS16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(15)) {
              SDNode *Result = Emit_266(N, X86::CMOVS16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 12:i8, EFLAGS:i32)
            // Emits: (CMOVNS16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(12)) {
              SDNode *Result = Emit_266(N, X86::CMOVNS16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 14:i8, EFLAGS:i32)
            // Emits: (CMOVP16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(14)) {
              SDNode *Result = Emit_266(N, X86::CMOVP16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 11:i8, EFLAGS:i32)
            // Emits: (CMOVNP16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(11)) {
              SDNode *Result = Emit_266(N, X86::CMOVNP16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 13:i8, EFLAGS:i32)
            // Emits: (CMOVO16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(13)) {
              SDNode *Result = Emit_266(N, X86::CMOVO16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, 10:i8, EFLAGS:i32)
            // Emits: (CMOVNO16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(10)) {
              SDNode *Result = Emit_266(N, X86::CMOVNO16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  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_loadi16(N0.getNode())) {
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      SDValue CPTmpN01_3;
      SDValue CPTmpN01_4;
      if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 6:i8, EFLAGS:i32)
          // Emits: (CMOVL16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(6)) {
            SDNode *Result = Emit_267(N, X86::CMOVL16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 8:i8, EFLAGS:i32)
          // Emits: (CMOVG16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(8)) {
            SDNode *Result = Emit_267(N, X86::CMOVG16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 5:i8, EFLAGS:i32)
          // Emits: (CMOVLE16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(5)) {
            SDNode *Result = Emit_267(N, X86::CMOVLE16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 14:i8, EFLAGS:i32)
          // Emits: (CMOVNP16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(14)) {
            SDNode *Result = Emit_267(N, X86::CMOVNP16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 11:i8, EFLAGS:i32)
          // Emits: (CMOVP16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(11)) {
            SDNode *Result = Emit_267(N, X86::CMOVP16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 15:i8, EFLAGS:i32)
          // Emits: (CMOVNS16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(15)) {
            SDNode *Result = Emit_267(N, X86::CMOVNS16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 12:i8, EFLAGS:i32)
          // Emits: (CMOVS16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(12)) {
            SDNode *Result = Emit_267(N, X86::CMOVS16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 13:i8, EFLAGS:i32)
          // Emits: (CMOVNO16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(13)) {
            SDNode *Result = Emit_267(N, X86::CMOVNO16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 10:i8, EFLAGS:i32)
          // Emits: (CMOVO16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(10)) {
            SDNode *Result = Emit_267(N, X86::CMOVO16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 2:i8, EFLAGS:i32)
          // Emits: (CMOVAE16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(2)) {
            SDNode *Result = Emit_267(N, X86::CMOVAE16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 1:i8, EFLAGS:i32)
          // Emits: (CMOVB16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(1)) {
            SDNode *Result = Emit_267(N, X86::CMOVB16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 4:i8, EFLAGS:i32)
          // Emits: (CMOVNE16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(4)) {
            SDNode *Result = Emit_267(N, X86::CMOVNE16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 9:i8, EFLAGS:i32)
          // Emits: (CMOVE16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(9)) {
            SDNode *Result = Emit_267(N, X86::CMOVE16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 3:i8, EFLAGS:i32)
          // Emits: (CMOVA16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(3)) {
            SDNode *Result = Emit_267(N, X86::CMOVA16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 0:i8, EFLAGS:i32)
          // Emits: (CMOVBE16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(0)) {
            SDNode *Result = Emit_267(N, X86::CMOVBE16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2, 7:i8, EFLAGS:i32)
          // Emits: (CMOVGE16rm:i16 GR16:i16:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(7)) {
            SDNode *Result = Emit_267(N, X86::CMOVGE16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 2:i8, EFLAGS:i32)
    // Emits: (CMOVB16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_265(N, X86::CMOVB16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 1:i8, EFLAGS:i32)
    // Emits: (CMOVAE16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(1)) {
      SDNode *Result = Emit_265(N, X86::CMOVAE16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 4:i8, EFLAGS:i32)
    // Emits: (CMOVE16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(4)) {
      SDNode *Result = Emit_265(N, X86::CMOVE16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 9:i8, EFLAGS:i32)
    // Emits: (CMOVNE16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(9)) {
      SDNode *Result = Emit_265(N, X86::CMOVNE16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 3:i8, EFLAGS:i32)
    // Emits: (CMOVBE16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(3)) {
      SDNode *Result = Emit_265(N, X86::CMOVBE16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 0:i8, EFLAGS:i32)
    // Emits: (CMOVA16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(0)) {
      SDNode *Result = Emit_265(N, X86::CMOVA16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 7:i8, EFLAGS:i32)
    // Emits: (CMOVL16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(7)) {
      SDNode *Result = Emit_265(N, X86::CMOVL16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 6:i8, EFLAGS:i32)
    // Emits: (CMOVGE16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(6)) {
      SDNode *Result = Emit_265(N, X86::CMOVGE16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 8:i8, EFLAGS:i32)
    // Emits: (CMOVLE16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(8)) {
      SDNode *Result = Emit_265(N, X86::CMOVLE16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 5:i8, EFLAGS:i32)
    // Emits: (CMOVG16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(5)) {
      SDNode *Result = Emit_265(N, X86::CMOVG16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 15:i8, EFLAGS:i32)
    // Emits: (CMOVS16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(15)) {
      SDNode *Result = Emit_265(N, X86::CMOVS16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 12:i8, EFLAGS:i32)
    // Emits: (CMOVNS16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(12)) {
      SDNode *Result = Emit_265(N, X86::CMOVNS16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 14:i8, EFLAGS:i32)
    // Emits: (CMOVP16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(14)) {
      SDNode *Result = Emit_265(N, X86::CMOVP16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 11:i8, EFLAGS:i32)
    // Emits: (CMOVNP16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(11)) {
      SDNode *Result = Emit_265(N, X86::CMOVNP16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 13:i8, EFLAGS:i32)
    // Emits: (CMOVO16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(13)) {
      SDNode *Result = Emit_265(N, X86::CMOVO16rr, MVT::i16);
      return Result;
    }

    // Pattern: (X86cmov:i16 GR16:i16:$src1, GR16:i16:$src2, 10:i8, EFLAGS:i32)
    // Emits: (CMOVNO16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(10)) {
      SDNode *Result = Emit_265(N, X86::CMOVNO16rr, MVT::i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  {
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_loadi32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 2:i8, EFLAGS:i32)
            // Emits: (CMOVB32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(2)) {
              SDNode *Result = Emit_266(N, X86::CMOVB32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 1:i8, EFLAGS:i32)
            // Emits: (CMOVAE32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(1)) {
              SDNode *Result = Emit_266(N, X86::CMOVAE32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 4:i8, EFLAGS:i32)
            // Emits: (CMOVE32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(4)) {
              SDNode *Result = Emit_266(N, X86::CMOVE32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 9:i8, EFLAGS:i32)
            // Emits: (CMOVNE32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(9)) {
              SDNode *Result = Emit_266(N, X86::CMOVNE32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 3:i8, EFLAGS:i32)
            // Emits: (CMOVBE32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(3)) {
              SDNode *Result = Emit_266(N, X86::CMOVBE32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 0:i8, EFLAGS:i32)
            // Emits: (CMOVA32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(0)) {
              SDNode *Result = Emit_266(N, X86::CMOVA32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 7:i8, EFLAGS:i32)
            // Emits: (CMOVL32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(7)) {
              SDNode *Result = Emit_266(N, X86::CMOVL32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 6:i8, EFLAGS:i32)
            // Emits: (CMOVGE32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(6)) {
              SDNode *Result = Emit_266(N, X86::CMOVGE32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 8:i8, EFLAGS:i32)
            // Emits: (CMOVLE32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(8)) {
              SDNode *Result = Emit_266(N, X86::CMOVLE32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 5:i8, EFLAGS:i32)
            // Emits: (CMOVG32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(5)) {
              SDNode *Result = Emit_266(N, X86::CMOVG32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 15:i8, EFLAGS:i32)
            // Emits: (CMOVS32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(15)) {
              SDNode *Result = Emit_266(N, X86::CMOVS32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 12:i8, EFLAGS:i32)
            // Emits: (CMOVNS32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(12)) {
              SDNode *Result = Emit_266(N, X86::CMOVNS32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 14:i8, EFLAGS:i32)
            // Emits: (CMOVP32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(14)) {
              SDNode *Result = Emit_266(N, X86::CMOVP32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 11:i8, EFLAGS:i32)
            // Emits: (CMOVNP32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(11)) {
              SDNode *Result = Emit_266(N, X86::CMOVNP32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 13:i8, EFLAGS:i32)
            // Emits: (CMOVO32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(13)) {
              SDNode *Result = Emit_266(N, X86::CMOVO32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, 10:i8, EFLAGS:i32)
            // Emits: (CMOVNO32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(10)) {
              SDNode *Result = Emit_266(N, X86::CMOVNO32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  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_loadi32(N0.getNode())) {
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      SDValue CPTmpN01_3;
      SDValue CPTmpN01_4;
      if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 6:i8, EFLAGS:i32)
          // Emits: (CMOVL32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(6)) {
            SDNode *Result = Emit_267(N, X86::CMOVL32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 8:i8, EFLAGS:i32)
          // Emits: (CMOVG32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(8)) {
            SDNode *Result = Emit_267(N, X86::CMOVG32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 5:i8, EFLAGS:i32)
          // Emits: (CMOVLE32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(5)) {
            SDNode *Result = Emit_267(N, X86::CMOVLE32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 14:i8, EFLAGS:i32)
          // Emits: (CMOVNP32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(14)) {
            SDNode *Result = Emit_267(N, X86::CMOVNP32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 11:i8, EFLAGS:i32)
          // Emits: (CMOVP32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(11)) {
            SDNode *Result = Emit_267(N, X86::CMOVP32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 15:i8, EFLAGS:i32)
          // Emits: (CMOVNS32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(15)) {
            SDNode *Result = Emit_267(N, X86::CMOVNS32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 12:i8, EFLAGS:i32)
          // Emits: (CMOVS32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(12)) {
            SDNode *Result = Emit_267(N, X86::CMOVS32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 13:i8, EFLAGS:i32)
          // Emits: (CMOVNO32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(13)) {
            SDNode *Result = Emit_267(N, X86::CMOVNO32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 10:i8, EFLAGS:i32)
          // Emits: (CMOVO32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(10)) {
            SDNode *Result = Emit_267(N, X86::CMOVO32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 2:i8, EFLAGS:i32)
          // Emits: (CMOVAE32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(2)) {
            SDNode *Result = Emit_267(N, X86::CMOVAE32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 1:i8, EFLAGS:i32)
          // Emits: (CMOVB32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(1)) {
            SDNode *Result = Emit_267(N, X86::CMOVB32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 4:i8, EFLAGS:i32)
          // Emits: (CMOVNE32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(4)) {
            SDNode *Result = Emit_267(N, X86::CMOVNE32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 9:i8, EFLAGS:i32)
          // Emits: (CMOVE32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(9)) {
            SDNode *Result = Emit_267(N, X86::CMOVE32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 3:i8, EFLAGS:i32)
          // Emits: (CMOVA32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(3)) {
            SDNode *Result = Emit_267(N, X86::CMOVA32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 0:i8, EFLAGS:i32)
          // Emits: (CMOVBE32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(0)) {
            SDNode *Result = Emit_267(N, X86::CMOVBE32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2, 7:i8, EFLAGS:i32)
          // Emits: (CMOVGE32rm:i32 GR32:i32:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(7)) {
            SDNode *Result = Emit_267(N, X86::CMOVGE32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 2:i8, EFLAGS:i32)
    // Emits: (CMOVB32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_265(N, X86::CMOVB32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 1:i8, EFLAGS:i32)
    // Emits: (CMOVAE32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(1)) {
      SDNode *Result = Emit_265(N, X86::CMOVAE32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 4:i8, EFLAGS:i32)
    // Emits: (CMOVE32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(4)) {
      SDNode *Result = Emit_265(N, X86::CMOVE32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 9:i8, EFLAGS:i32)
    // Emits: (CMOVNE32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(9)) {
      SDNode *Result = Emit_265(N, X86::CMOVNE32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 3:i8, EFLAGS:i32)
    // Emits: (CMOVBE32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(3)) {
      SDNode *Result = Emit_265(N, X86::CMOVBE32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 0:i8, EFLAGS:i32)
    // Emits: (CMOVA32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(0)) {
      SDNode *Result = Emit_265(N, X86::CMOVA32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 7:i8, EFLAGS:i32)
    // Emits: (CMOVL32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(7)) {
      SDNode *Result = Emit_265(N, X86::CMOVL32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 6:i8, EFLAGS:i32)
    // Emits: (CMOVGE32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(6)) {
      SDNode *Result = Emit_265(N, X86::CMOVGE32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 8:i8, EFLAGS:i32)
    // Emits: (CMOVLE32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(8)) {
      SDNode *Result = Emit_265(N, X86::CMOVLE32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 5:i8, EFLAGS:i32)
    // Emits: (CMOVG32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(5)) {
      SDNode *Result = Emit_265(N, X86::CMOVG32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 15:i8, EFLAGS:i32)
    // Emits: (CMOVS32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(15)) {
      SDNode *Result = Emit_265(N, X86::CMOVS32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 12:i8, EFLAGS:i32)
    // Emits: (CMOVNS32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(12)) {
      SDNode *Result = Emit_265(N, X86::CMOVNS32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 14:i8, EFLAGS:i32)
    // Emits: (CMOVP32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(14)) {
      SDNode *Result = Emit_265(N, X86::CMOVP32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 11:i8, EFLAGS:i32)
    // Emits: (CMOVNP32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(11)) {
      SDNode *Result = Emit_265(N, X86::CMOVNP32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 13:i8, EFLAGS:i32)
    // Emits: (CMOVO32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(13)) {
      SDNode *Result = Emit_265(N, X86::CMOVO32rr, MVT::i32);
      return Result;
    }

    // Pattern: (X86cmov:i32 GR32:i32:$src1, GR32:i32:$src2, 10:i8, EFLAGS:i32)
    // Emits: (CMOVNO32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(10)) {
      SDNode *Result = Emit_265(N, X86::CMOVNO32rr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  {
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 2:i8, EFLAGS:i32)
            // Emits: (CMOVB64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(2)) {
              SDNode *Result = Emit_266(N, X86::CMOVB64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 1:i8, EFLAGS:i32)
            // Emits: (CMOVAE64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(1)) {
              SDNode *Result = Emit_266(N, X86::CMOVAE64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 4:i8, EFLAGS:i32)
            // Emits: (CMOVE64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(4)) {
              SDNode *Result = Emit_266(N, X86::CMOVE64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 9:i8, EFLAGS:i32)
            // Emits: (CMOVNE64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(9)) {
              SDNode *Result = Emit_266(N, X86::CMOVNE64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 3:i8, EFLAGS:i32)
            // Emits: (CMOVBE64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(3)) {
              SDNode *Result = Emit_266(N, X86::CMOVBE64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 0:i8, EFLAGS:i32)
            // Emits: (CMOVA64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(0)) {
              SDNode *Result = Emit_266(N, X86::CMOVA64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 7:i8, EFLAGS:i32)
            // Emits: (CMOVL64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(7)) {
              SDNode *Result = Emit_266(N, X86::CMOVL64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 6:i8, EFLAGS:i32)
            // Emits: (CMOVGE64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(6)) {
              SDNode *Result = Emit_266(N, X86::CMOVGE64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 8:i8, EFLAGS:i32)
            // Emits: (CMOVLE64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(8)) {
              SDNode *Result = Emit_266(N, X86::CMOVLE64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 5:i8, EFLAGS:i32)
            // Emits: (CMOVG64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(5)) {
              SDNode *Result = Emit_266(N, X86::CMOVG64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 15:i8, EFLAGS:i32)
            // Emits: (CMOVS64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(15)) {
              SDNode *Result = Emit_266(N, X86::CMOVS64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 12:i8, EFLAGS:i32)
            // Emits: (CMOVNS64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(12)) {
              SDNode *Result = Emit_266(N, X86::CMOVNS64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 14:i8, EFLAGS:i32)
            // Emits: (CMOVP64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(14)) {
              SDNode *Result = Emit_266(N, X86::CMOVP64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 11:i8, EFLAGS:i32)
            // Emits: (CMOVNP64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(11)) {
              SDNode *Result = Emit_266(N, X86::CMOVNP64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 13:i8, EFLAGS:i32)
            // Emits: (CMOVO64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(13)) {
              SDNode *Result = Emit_266(N, X86::CMOVO64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }

            // Pattern: (X86cmov:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, 10:i8, EFLAGS:i32)
            // Emits: (CMOVNO64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 30  cost = 1  size = 3
            if (CN1 == INT64_C(10)) {
              SDNode *Result = Emit_266(N, X86::CMOVNO64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }
  }
  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()) &&
        Predicate_loadi64(N0.getNode())) {
      SDValue N01 = N0.getNode()->getOperand(1);
      SDValue CPTmpN01_0;
      SDValue CPTmpN01_1;
      SDValue CPTmpN01_2;
      SDValue CPTmpN01_3;
      SDValue CPTmpN01_4;
      if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
        SDValue N1 = N->getOperand(1);
        SDValue N2 = N->getOperand(2);
        ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
        if (Tmp0) {
          int64_t CN1 = Tmp0->getSExtValue();

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 2:i8, EFLAGS:i32)
          // Emits: (CMOVAE64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(2)) {
            SDNode *Result = Emit_267(N, X86::CMOVAE64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 1:i8, EFLAGS:i32)
          // Emits: (CMOVB64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(1)) {
            SDNode *Result = Emit_267(N, X86::CMOVB64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 4:i8, EFLAGS:i32)
          // Emits: (CMOVNE64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(4)) {
            SDNode *Result = Emit_267(N, X86::CMOVNE64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 9:i8, EFLAGS:i32)
          // Emits: (CMOVE64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(9)) {
            SDNode *Result = Emit_267(N, X86::CMOVE64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 3:i8, EFLAGS:i32)
          // Emits: (CMOVA64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(3)) {
            SDNode *Result = Emit_267(N, X86::CMOVA64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 0:i8, EFLAGS:i32)
          // Emits: (CMOVBE64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(0)) {
            SDNode *Result = Emit_267(N, X86::CMOVBE64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 7:i8, EFLAGS:i32)
          // Emits: (CMOVGE64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(7)) {
            SDNode *Result = Emit_267(N, X86::CMOVGE64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 6:i8, EFLAGS:i32)
          // Emits: (CMOVL64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(6)) {
            SDNode *Result = Emit_267(N, X86::CMOVL64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 8:i8, EFLAGS:i32)
          // Emits: (CMOVG64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(8)) {
            SDNode *Result = Emit_267(N, X86::CMOVG64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 5:i8, EFLAGS:i32)
          // Emits: (CMOVLE64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(5)) {
            SDNode *Result = Emit_267(N, X86::CMOVLE64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 14:i8, EFLAGS:i32)
          // Emits: (CMOVNP64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(14)) {
            SDNode *Result = Emit_267(N, X86::CMOVNP64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 11:i8, EFLAGS:i32)
          // Emits: (CMOVP64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(11)) {
            SDNode *Result = Emit_267(N, X86::CMOVP64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 15:i8, EFLAGS:i32)
          // Emits: (CMOVNS64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(15)) {
            SDNode *Result = Emit_267(N, X86::CMOVNS64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 12:i8, EFLAGS:i32)
          // Emits: (CMOVS64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(12)) {
            SDNode *Result = Emit_267(N, X86::CMOVS64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 13:i8, EFLAGS:i32)
          // Emits: (CMOVNO64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(13)) {
            SDNode *Result = Emit_267(N, X86::CMOVNO64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }

          // Pattern: (X86cmov:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2, 10:i8, EFLAGS:i32)
          // Emits: (CMOVO64rm:i64 GR64:i64:$src2, addr:iPTR:$src1)
          // Pattern complexity = 30  cost = 1  size = 3
          if (CN1 == INT64_C(10)) {
            SDNode *Result = Emit_267(N, X86::CMOVO64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }
  }
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 2:i8, EFLAGS:i32)
    // Emits: (CMOVB64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_265(N, X86::CMOVB64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 1:i8, EFLAGS:i32)
    // Emits: (CMOVAE64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(1)) {
      SDNode *Result = Emit_265(N, X86::CMOVAE64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 4:i8, EFLAGS:i32)
    // Emits: (CMOVE64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(4)) {
      SDNode *Result = Emit_265(N, X86::CMOVE64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 9:i8, EFLAGS:i32)
    // Emits: (CMOVNE64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(9)) {
      SDNode *Result = Emit_265(N, X86::CMOVNE64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 3:i8, EFLAGS:i32)
    // Emits: (CMOVBE64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(3)) {
      SDNode *Result = Emit_265(N, X86::CMOVBE64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 0:i8, EFLAGS:i32)
    // Emits: (CMOVA64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(0)) {
      SDNode *Result = Emit_265(N, X86::CMOVA64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 7:i8, EFLAGS:i32)
    // Emits: (CMOVL64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(7)) {
      SDNode *Result = Emit_265(N, X86::CMOVL64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 6:i8, EFLAGS:i32)
    // Emits: (CMOVGE64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(6)) {
      SDNode *Result = Emit_265(N, X86::CMOVGE64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 8:i8, EFLAGS:i32)
    // Emits: (CMOVLE64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(8)) {
      SDNode *Result = Emit_265(N, X86::CMOVLE64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 5:i8, EFLAGS:i32)
    // Emits: (CMOVG64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(5)) {
      SDNode *Result = Emit_265(N, X86::CMOVG64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 15:i8, EFLAGS:i32)
    // Emits: (CMOVS64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(15)) {
      SDNode *Result = Emit_265(N, X86::CMOVS64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 12:i8, EFLAGS:i32)
    // Emits: (CMOVNS64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(12)) {
      SDNode *Result = Emit_265(N, X86::CMOVNS64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 14:i8, EFLAGS:i32)
    // Emits: (CMOVP64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(14)) {
      SDNode *Result = Emit_265(N, X86::CMOVP64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 11:i8, EFLAGS:i32)
    // Emits: (CMOVNP64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(11)) {
      SDNode *Result = Emit_265(N, X86::CMOVNP64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 13:i8, EFLAGS:i32)
    // Emits: (CMOVO64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(13)) {
      SDNode *Result = Emit_265(N, X86::CMOVO64rr, MVT::i64);
      return Result;
    }

    // Pattern: (X86cmov:i64 GR64:i64:$src1, GR64:i64:$src2, 10:i8, EFLAGS:i32)
    // Emits: (CMOVNO64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(10)) {
      SDNode *Result = Emit_265(N, X86::CMOVNO64rr, MVT::i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 2:i8, EFLAGS:i32)
      // Emits: (CMOVB_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(2)) {
        SDNode *Result = Emit_265(N, X86::CMOVB_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 3:i8, EFLAGS:i32)
      // Emits: (CMOVBE_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(3)) {
        SDNode *Result = Emit_265(N, X86::CMOVBE_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 4:i8, EFLAGS:i32)
      // Emits: (CMOVE_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(4)) {
        SDNode *Result = Emit_265(N, X86::CMOVE_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 14:i8, EFLAGS:i32)
      // Emits: (CMOVP_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(14)) {
        SDNode *Result = Emit_265(N, X86::CMOVP_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 1:i8, EFLAGS:i32)
      // Emits: (CMOVNB_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_265(N, X86::CMOVNB_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 0:i8, EFLAGS:i32)
      // Emits: (CMOVNBE_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(0)) {
        SDNode *Result = Emit_265(N, X86::CMOVNBE_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 9:i8, EFLAGS:i32)
      // Emits: (CMOVNE_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDNode *Result = Emit_265(N, X86::CMOVNE_Fp32, MVT::f32);
        return Result;
      }

      // Pattern: (X86cmov:f32 RFP32:f32:$src1, RFP32:f32:$src2, 11:i8, EFLAGS:i32)
      // Emits: (CMOVNP_Fp32:f32 RFP32:f32:$src1, RFP32:f32:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDNode *Result = Emit_265(N, X86::CMOVNP_Fp32, MVT::f32);
        return Result;
      }
    }
  }

  // Pattern: (X86cmov:f32 FR32:f32:$t, FR32:f32:$f, (imm:i8):$cond, EFLAGS:i32)
  // Emits: (CMOV_FR32:f32 FR32:f32:$t, FR32:f32:$f, (imm:i8):$cond)
  // Pattern complexity = 6  cost = 11  size = 3
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDNode *Result = Emit_264(N, X86::CMOV_FR32, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 2:i8, EFLAGS:i32)
      // Emits: (CMOVB_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(2)) {
        SDNode *Result = Emit_265(N, X86::CMOVB_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 3:i8, EFLAGS:i32)
      // Emits: (CMOVBE_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(3)) {
        SDNode *Result = Emit_265(N, X86::CMOVBE_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 4:i8, EFLAGS:i32)
      // Emits: (CMOVE_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(4)) {
        SDNode *Result = Emit_265(N, X86::CMOVE_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 14:i8, EFLAGS:i32)
      // Emits: (CMOVP_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(14)) {
        SDNode *Result = Emit_265(N, X86::CMOVP_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 1:i8, EFLAGS:i32)
      // Emits: (CMOVNB_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(1)) {
        SDNode *Result = Emit_265(N, X86::CMOVNB_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 0:i8, EFLAGS:i32)
      // Emits: (CMOVNBE_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(0)) {
        SDNode *Result = Emit_265(N, X86::CMOVNBE_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 9:i8, EFLAGS:i32)
      // Emits: (CMOVNE_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(9)) {
        SDNode *Result = Emit_265(N, X86::CMOVNE_Fp64, MVT::f64);
        return Result;
      }

      // Pattern: (X86cmov:f64 RFP64:f64:$src1, RFP64:f64:$src2, 11:i8, EFLAGS:i32)
      // Emits: (CMOVNP_Fp64:f64 RFP64:f64:$src1, RFP64:f64:$src2)
      // Pattern complexity = 8  cost = 1  size = 0
      if (CN1 == INT64_C(11)) {
        SDNode *Result = Emit_265(N, X86::CMOVNP_Fp64, MVT::f64);
        return Result;
      }
    }
  }

  // Pattern: (X86cmov:f64 FR64:f64:$t, FR64:f64:$f, (imm:i8):$cond, EFLAGS:i32)
  // Emits: (CMOV_FR64:f64 FR64:f64:$t, FR64:f64:$f, (imm:i8):$cond)
  // Pattern complexity = 6  cost = 11  size = 3
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDNode *Result = Emit_264(N, X86::CMOV_FR64, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_f80(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N2.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 2:i8, EFLAGS:i32)
    // Emits: (CMOVB_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_265(N, X86::CMOVB_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 3:i8, EFLAGS:i32)
    // Emits: (CMOVBE_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(3)) {
      SDNode *Result = Emit_265(N, X86::CMOVBE_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 4:i8, EFLAGS:i32)
    // Emits: (CMOVE_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(4)) {
      SDNode *Result = Emit_265(N, X86::CMOVE_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 14:i8, EFLAGS:i32)
    // Emits: (CMOVP_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(14)) {
      SDNode *Result = Emit_265(N, X86::CMOVP_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 1:i8, EFLAGS:i32)
    // Emits: (CMOVNB_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(1)) {
      SDNode *Result = Emit_265(N, X86::CMOVNB_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 0:i8, EFLAGS:i32)
    // Emits: (CMOVNBE_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(0)) {
      SDNode *Result = Emit_265(N, X86::CMOVNBE_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 9:i8, EFLAGS:i32)
    // Emits: (CMOVNE_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(9)) {
      SDNode *Result = Emit_265(N, X86::CMOVNE_Fp80, MVT::f80);
      return Result;
    }

    // Pattern: (X86cmov:f80 RFP80:f80:$src1, RFP80:f80:$src2, 11:i8, EFLAGS:i32)
    // Emits: (CMOVNP_Fp80:f80 RFP80:f80:$src1, RFP80:f80:$src2)
    // Pattern complexity = 8  cost = 1  size = 0
    if (CN1 == INT64_C(11)) {
      SDNode *Result = Emit_265(N, X86::CMOVNP_Fp80, MVT::f80);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_v1i64(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_264(N, X86::CMOV_V1I64, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_v2i64(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_264(N, X86::CMOV_V2I64, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_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_264(N, X86::CMOV_V4F32, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMOV_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_264(N, X86::CMOV_V2F64, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_268(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);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N00, N01);
}
DISABLE_INLINE SDNode *Emit_269(SDNode *N, unsigned Opc0, SDValue &CPTmpN011_0, SDValue &CPTmpN011_1, SDValue &CPTmpN011_2, SDValue &CPTmpN011_3, SDValue &CPTmpN011_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue Chain01 = N01.getNode()->getOperand(0);
  SDValue N011 = N01.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N01.getNode())->getMemOperand();
  SDValue Ops0[] = { N00, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4, Chain01 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N01.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_270(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 char) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N00, Tmp3);
}
DISABLE_INLINE SDNode *Emit_271(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 short) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N00, Tmp3);
}
DISABLE_INLINE SDNode *Emit_272(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);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N00, Tmp3);
}
DISABLE_INLINE SDNode *Emit_273(SDNode *N, unsigned Opc0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = 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 char) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp3, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_274(SDNode *N, unsigned Opc0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = 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 short) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp3, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_275(SDNode *N, unsigned Opc0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = 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>(N01)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp3, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_276(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, N1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_277(SDNode *N, unsigned Opc0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain1 = N1.getNode()->getOperand(0);
  SDValue N11 = N1.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_278(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, Tmp1);
}
DISABLE_INLINE SDNode *Emit_279(SDNode *N, unsigned Opc0, SDValue &CPTmpN01_0, SDValue &CPTmpN01_1, SDValue &CPTmpN01_2, SDValue &CPTmpN01_3, SDValue &CPTmpN01_4) {
  SDValue N0 = N->getOperand(0);
  SDValue Chain0 = N0.getNode()->getOperand(0);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N0.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4, Tmp1, Chain0 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N0.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_280(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(((uint64_t) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i64);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N00, Tmp3);
}
DISABLE_INLINE SDNode *Emit_281(SDNode *N, unsigned Opc0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = 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(((uint64_t) cast<ConstantSDNode>(N01)->getZExtValue()), MVT::i64);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Tmp3, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_282(SDNode *N, unsigned Opc0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::i32, N0, N0);
}
DISABLE_INLINE SDNode *Emit_283(SDNode *N, unsigned Opc0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  SDValue N01 = N0.getNode()->getOperand(1);
  SDValue N1 = N->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { N01, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::i32, MVT::Other, Ops0, 7);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_CMP(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode())) {
          if (Predicate_load(N00.getNode())) {

            // Pattern: (X86cmp:isVoid (and:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), 0:i64)
            // Emits: (TEST64mi32:isVoid addr:iPTR:$src1, (imm:i64):$src2)
            // Pattern complexity = 37  cost = 1  size = 3
            if (Predicate_loadi64(N00.getNode())) {
              SDValue N001 = N00.getNode()->getOperand(1);
              SDValue CPTmpN001_0;
              SDValue CPTmpN001_1;
              SDValue CPTmpN001_2;
              SDValue CPTmpN001_3;
              SDValue CPTmpN001_4;
              if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::Constant &&
                    Predicate_i64immSExt32(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::i64) {
                      SDNode *Result = Emit_281(N, X86::TEST64mi32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                      return Result;
                    }
                  }
                }
              }
            }

            // Pattern: (X86cmp:isVoid (and:i8 (ld:i8 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2), 0:i8)
            // Emits: (TEST8mi:isVoid addr:iPTR:$src1, (imm:i8):$src2)
            // Pattern complexity = 36  cost = 1  size = 3
            if (Predicate_loadi8(N00.getNode())) {
              SDValue N001 = N00.getNode()->getOperand(1);
              SDValue CPTmpN001_0;
              SDValue CPTmpN001_1;
              SDValue CPTmpN001_2;
              SDValue CPTmpN001_3;
              SDValue CPTmpN001_4;
              if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
                SDValue N01 = N0.getNode()->getOperand(1);
                if (N01.getNode()->getOpcode() == ISD::Constant) {
                  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::i8) {
                      SDNode *Result = Emit_273(N, X86::TEST8mi, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                      return Result;
                    }
                  }
                }
              }
            }
          }

          // Pattern: (X86cmp:isVoid (and:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2), 0:i16)
          // Emits: (TEST16mi:isVoid addr:iPTR:$src1, (imm:i16):$src2)
          // Pattern complexity = 36  cost = 1  size = 3
          if (Predicate_loadi16(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N01 = N0.getNode()->getOperand(1);
              if (N01.getNode()->getOpcode() == ISD::Constant) {
                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::i16) {
                    SDNode *Result = Emit_274(N, X86::TEST16mi, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                    return Result;
                  }
                }
              }
            }
          }

          // Pattern: (X86cmp:isVoid (and:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2), 0:i32)
          // Emits: (TEST32mi:isVoid addr:iPTR:$src1, (imm:i32):$src2)
          // Pattern complexity = 36  cost = 1  size = 3
          if (Predicate_loadi32(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              SDValue N01 = N0.getNode()->getOperand(1);
              if (N01.getNode()->getOpcode() == ISD::Constant) {
                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_275(N, X86::TEST32mi, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      {
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::LOAD &&
            N01.hasOneUse() &&
            IsLegalAndProfitableToFold(N01.getNode(), N0.getNode(), N)) {
          SDValue Chain01 = N01.getNode()->getOperand(0);
          if (Predicate_unindexedload(N01.getNode())) {

            // Pattern: (X86cmp:isVoid (and:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>), 0:i8)
            // Emits: (TEST8rm:isVoid GR8:i8:$src1, addr:iPTR:$src2)
            // Pattern complexity = 33  cost = 1  size = 3
            if (Predicate_load(N01.getNode()) &&
                Predicate_loadi8(N01.getNode())) {
              SDValue N011 = N01.getNode()->getOperand(1);
              SDValue CPTmpN011_0;
              SDValue CPTmpN011_1;
              SDValue CPTmpN011_2;
              SDValue CPTmpN011_3;
              SDValue CPTmpN011_4;
              if (SelectAddr(N, N011, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4)) {
                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::i8) {
                    SDNode *Result = Emit_269(N, X86::TEST8rm, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (X86cmp:isVoid (and:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), 0:i16)
            // Emits: (TEST16rm:isVoid GR16:i16:$src1, addr:iPTR:$src2)
            // Pattern complexity = 33  cost = 1  size = 3
            if (Predicate_loadi16(N01.getNode())) {
              SDValue N011 = N01.getNode()->getOperand(1);
              SDValue CPTmpN011_0;
              SDValue CPTmpN011_1;
              SDValue CPTmpN011_2;
              SDValue CPTmpN011_3;
              SDValue CPTmpN011_4;
              if (SelectAddr(N, N011, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4)) {
                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::i16) {
                    SDNode *Result = Emit_269(N, X86::TEST16rm, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (X86cmp:isVoid (and:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>), 0:i32)
            // Emits: (TEST32rm:isVoid GR32:i32:$src1, addr:iPTR:$src2)
            // Pattern complexity = 33  cost = 1  size = 3
            if (Predicate_loadi32(N01.getNode())) {
              SDValue N011 = N01.getNode()->getOperand(1);
              SDValue CPTmpN011_0;
              SDValue CPTmpN011_1;
              SDValue CPTmpN011_2;
              SDValue CPTmpN011_3;
              SDValue CPTmpN011_4;
              if (SelectAddr(N, N011, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4)) {
                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_269(N, X86::TEST32rm, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4);
                    return Result;
                  }
                }
              }
            }

            // Pattern: (X86cmp:isVoid (and:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>), 0:i64)
            // Emits: (TEST64rm:isVoid GR64:i64:$src1, addr:iPTR:$src2)
            // Pattern complexity = 33  cost = 1  size = 3
            if (Predicate_load(N01.getNode()) &&
                Predicate_loadi64(N01.getNode())) {
              SDValue N011 = N01.getNode()->getOperand(1);
              SDValue CPTmpN011_0;
              SDValue CPTmpN011_1;
              SDValue CPTmpN011_2;
              SDValue CPTmpN011_3;
              SDValue CPTmpN011_4;
              if (SelectAddr(N, N011, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4)) {
                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::i64) {
                    SDNode *Result = Emit_269(N, X86::TEST64rm, CPTmpN011_0, CPTmpN011_1, CPTmpN011_2, CPTmpN011_3, CPTmpN011_4);
                    return Result;
                  }
                }
              }
            }
          }
        }
      }
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode())) {

          // Pattern: (X86cmp:isVoid (and:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src1), 0:i8)
          // Emits: (TEST8rm:isVoid GR8:i8:$src1, addr:iPTR:$src2)
          // Pattern complexity = 33  cost = 1  size = 3
          if (Predicate_load(N00.getNode()) &&
              Predicate_loadi8(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              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::i8) {
                  SDNode *Result = Emit_283(N, X86::TEST8rm, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                  return Result;
                }
              }
            }
          }

          // Pattern: (X86cmp:isVoid (and:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1), 0:i16)
          // Emits: (TEST16rm:isVoid GR16:i16:$src1, addr:iPTR:$src2)
          // Pattern complexity = 33  cost = 1  size = 3
          if (Predicate_loadi16(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              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::i16) {
                  SDNode *Result = Emit_283(N, X86::TEST16rm, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                  return Result;
                }
              }
            }
          }

          // Pattern: (X86cmp:isVoid (and:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1), 0:i32)
          // Emits: (TEST32rm:isVoid GR32:i32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 33  cost = 1  size = 3
          if (Predicate_loadi32(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              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_283(N, X86::TEST32rm, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                  return Result;
                }
              }
            }
          }

          // Pattern: (X86cmp:isVoid (and:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src1), 0:i64)
          // Emits: (TEST64rm:isVoid GR64:i64:$src1, addr:iPTR:$src2)
          // Pattern complexity = 33  cost = 1  size = 3
          if (Predicate_load(N00.getNode()) &&
              Predicate_loadi64(N00.getNode())) {
            SDValue N001 = N00.getNode()->getOperand(1);
            SDValue CPTmpN001_0;
            SDValue CPTmpN001_1;
            SDValue CPTmpN001_2;
            SDValue CPTmpN001_3;
            SDValue CPTmpN001_4;
            if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
              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::i64) {
                  SDNode *Result = Emit_283(N, X86::TEST64rm, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
                  return Result;
                }
              }
            }
          }
        }
      }
    }
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse() &&
        IsLegalAndProfitableToFold(N0.getNode(), N, N)) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode())) {

        // Pattern: (X86cmp:isVoid (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
        // Emits: (CMP16mi8:isVoid addr:iPTR:$src1, (imm:i16):$src2)
        // Pattern complexity = 29  cost = 1  size = 3
        if (Predicate_loadi16(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::Constant &&
                Predicate_i16immSExt8(N1.getNode()) &&
                N0.getValueType() == MVT::i16) {
              SDNode *Result = Emit_257(N, X86::CMP16mi8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }

        // Pattern: (X86cmp:isVoid (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
        // Emits: (CMP32mi8:isVoid addr:iPTR:$src1, (imm:i32):$src2)
        // Pattern complexity = 29  cost = 1  size = 3
        if (Predicate_loadi32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::Constant &&
                Predicate_i32immSExt8(N1.getNode()) &&
                N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_258(N, X86::CMP32mi8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
        if (Predicate_load(N0.getNode())) {
          if (Predicate_loadi64(N0.getNode())) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue CPTmpN01_0;
            SDValue CPTmpN01_1;
            SDValue CPTmpN01_2;
            SDValue CPTmpN01_3;
            SDValue CPTmpN01_4;
            if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::Constant) {

                // Pattern: (X86cmp:isVoid (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
                // Emits: (CMP64mi8:isVoid addr:iPTR:$src1, (imm:i64):$src2)
                // Pattern complexity = 29  cost = 1  size = 3
                if (Predicate_i64immSExt8(N1.getNode()) &&
                    N0.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_260(N, X86::CMP64mi8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }

                // Pattern: (X86cmp:isVoid (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
                // Emits: (CMP64mi32:isVoid addr:iPTR:$src1, (imm:i64):$src2)
                // Pattern complexity = 29  cost = 1  size = 3
                if (Predicate_i64immSExt32(N1.getNode()) &&
                    N0.getValueType() == MVT::i64) {
                  SDNode *Result = Emit_260(N, X86::CMP64mi32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                  return Result;
                }
              }
            }
          }

          // Pattern: (X86cmp:isVoid (ld:i8 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, (imm:i8):$src2)
          // Emits: (CMP8mi:isVoid addr:iPTR:$src1, (imm:i8):$src2)
          // Pattern complexity = 28  cost = 1  size = 3
          if (Predicate_loadi8(N0.getNode())) {
            SDValue N01 = N0.getNode()->getOperand(1);
            SDValue CPTmpN01_0;
            SDValue CPTmpN01_1;
            SDValue CPTmpN01_2;
            SDValue CPTmpN01_3;
            SDValue CPTmpN01_4;
            if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
              SDValue N1 = N->getOperand(1);
              if (N1.getNode()->getOpcode() == ISD::Constant &&
                  N0.getValueType() == MVT::i8) {
                SDNode *Result = Emit_279(N, X86::CMP8mi, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
                return Result;
              }
            }
          }
        }

        // Pattern: (X86cmp:isVoid (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2)
        // Emits: (CMP16mi:isVoid addr:iPTR:$src1, (imm:i16):$src2)
        // Pattern complexity = 28  cost = 1  size = 3
        if (Predicate_loadi16(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::Constant &&
                N0.getValueType() == MVT::i16) {
              SDNode *Result = Emit_257(N, X86::CMP16mi, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }

        // Pattern: (X86cmp:isVoid (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2)
        // Emits: (CMP32mi:isVoid addr:iPTR:$src1, (imm:i32):$src2)
        // Pattern complexity = 28  cost = 1  size = 3
        if (Predicate_loadi32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N1.getNode()->getOpcode() == ISD::Constant &&
                N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_258(N, X86::CMP32mi, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }

        // Pattern: (X86cmp:isVoid (ld:i8 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src2)
        // Emits: (CMP8mr:isVoid addr:iPTR:$src1, GR8:i8:$src2)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_load(N0.getNode()) &&
            Predicate_loadi8(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i8) {
              SDNode *Result = Emit_276(N, X86::CMP8mr, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }

        // Pattern: (X86cmp:isVoid (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src2)
        // Emits: (CMP16mr:isVoid addr:iPTR:$src1, GR16:i16:$src2)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_loadi16(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i16) {
              SDNode *Result = Emit_276(N, X86::CMP16mr, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }

        // Pattern: (X86cmp:isVoid (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src2)
        // Emits: (CMP32mr:isVoid addr:iPTR:$src1, GR32:i32:$src2)
        // Pattern complexity = 25  cost = 1  size = 3
        if (Predicate_loadi32(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDValue N1 = N->getOperand(1);
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_276(N, X86::CMP32mr, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode())) {

          // Pattern: (X86cmp:isVoid GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
          // Emits: (CMP8rm:isVoid GR8:i8:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 3
          if (Predicate_load(N1.getNode()) &&
              Predicate_loadi8(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                N0.getValueType() == MVT::i8) {
              SDNode *Result = Emit_277(N, X86::CMP8rm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }

          // Pattern: (X86cmp:isVoid GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
          // Emits: (CMP16rm:isVoid GR16:i16:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 3
          if (Predicate_loadi16(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                N0.getValueType() == MVT::i16) {
              SDNode *Result = Emit_277(N, X86::CMP16rm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }

          // Pattern: (X86cmp:isVoid GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
          // Emits: (CMP32rm:isVoid GR32:i32:$src1, addr:iPTR:$src2)
          // Pattern complexity = 25  cost = 1  size = 3
          if (Predicate_loadi32(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
                N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_277(N, X86::CMP32rm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86cmp:isVoid (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src2)
    // Emits: (CMP64mr:isVoid addr:iPTR:$src1, GR64:i64:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N0.getValueType() == MVT::i64) {
            SDNode *Result = Emit_276(N, X86::CMP64mr, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86cmp:isVoid GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (CMP64rm:isVoid GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::i64) {
          SDNode *Result = Emit_277(N, X86::CMP64rm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86cmp:isVoid FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>)
  // Emits: (UCOMISSrm:isVoid FR32:f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadf32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::f32) {
          SDNode *Result = Emit_277(N, X86::UCOMISSrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86cmp:isVoid FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>)
  // Emits: (UCOMISDrm:isVoid FR64:f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadf64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::f64) {
          SDNode *Result = Emit_277(N, X86::UCOMISDrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::AND) {
      if (Predicate_and_su(N0.getNode())) {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant) {
          SDValue N1 = N->getOperand(1);
          ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
          if (Tmp0) {
            int64_t CN1 = Tmp0->getSExtValue();
            if (CN1 == INT64_C(0)) {

              // Pattern: (X86cmp:isVoid (and:i8 GR8:i8:$src1, (imm:i8):$src2)<<P:Predicate_and_su>>, 0:i8)
              // Emits: (TEST8ri:isVoid GR8:i8:$src1, (imm:i8):$src2)
              // Pattern complexity = 15  cost = 1  size = 3
              if (N0.getValueType() == MVT::i8) {
                SDNode *Result = Emit_270(N, X86::TEST8ri);
                return Result;
              }

              // Pattern: (X86cmp:isVoid (and:i16 GR16:i16:$src1, (imm:i16):$src2)<<P:Predicate_and_su>>, 0:i16)
              // Emits: (TEST16ri:isVoid GR16:i16:$src1, (imm:i16):$src2)
              // Pattern complexity = 15  cost = 1  size = 3
              if (N0.getValueType() == MVT::i16) {
                SDNode *Result = Emit_271(N, X86::TEST16ri);
                return Result;
              }

              // Pattern: (X86cmp:isVoid (and:i32 GR32:i32:$src1, (imm:i32):$src2)<<P:Predicate_and_su>>, 0:i32)
              // Emits: (TEST32ri:isVoid GR32:i32:$src1, (imm:i32):$src2)
              // Pattern complexity = 15  cost = 1  size = 3
              if (N0.getValueType() == MVT::i32) {
                SDNode *Result = Emit_272(N, X86::TEST32ri);
                return Result;
              }
            }
          }
        }
      }

      // Pattern: (X86cmp:isVoid (and:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2), 0:i64)
      // Emits: (TEST64ri32:isVoid GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 15  cost = 1  size = 3
      {
        SDValue N00 = N0.getNode()->getOperand(0);
        SDValue N01 = N0.getNode()->getOperand(1);
        if (N01.getNode()->getOpcode() == ISD::Constant &&
            Predicate_i64immSExt32(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::i64) {
              SDNode *Result = Emit_280(N, X86::TEST64ri32);
              return Result;
            }
          }
        }
      }
      if (Predicate_and_su(N0.getNode())) {
        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)) {

            // Pattern: (X86cmp:isVoid (and:i8 GR8:i8:$src1, GR8:i8:$src2)<<P:Predicate_and_su>>, 0:i8)
            // Emits: (TEST8rr:isVoid GR8:i8:$src1, GR8:i8:$src2)
            // Pattern complexity = 12  cost = 1  size = 3
            if (N0.getValueType() == MVT::i8) {
              SDNode *Result = Emit_268(N, X86::TEST8rr);
              return Result;
            }

            // Pattern: (X86cmp:isVoid (and:i16 GR16:i16:$src1, GR16:i16:$src2)<<P:Predicate_and_su>>, 0:i16)
            // Emits: (TEST16rr:isVoid GR16:i16:$src1, GR16:i16:$src2)
            // Pattern complexity = 12  cost = 1  size = 3
            if (N0.getValueType() == MVT::i16) {
              SDNode *Result = Emit_268(N, X86::TEST16rr);
              return Result;
            }

            // Pattern: (X86cmp:isVoid (and:i32 GR32:i32:$src1, GR32:i32:$src2)<<P:Predicate_and_su>>, 0:i32)
            // Emits: (TEST32rr:isVoid GR32:i32:$src1, GR32:i32:$src2)
            // Pattern complexity = 12  cost = 1  size = 3
            if (N0.getValueType() == MVT::i32) {
              SDNode *Result = Emit_268(N, X86::TEST32rr);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86cmp:isVoid (and:i64 GR64:i64:$src1, GR64:i64:$src2), 0:i64)
      // Emits: (TEST64rr:isVoid GR64:i64:$src1, GR64:i64:$src2)
      // Pattern complexity = 11  cost = 1  size = 3
      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::i64) {
          SDNode *Result = Emit_268(N, X86::TEST64rr);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(0)) {

          // Pattern: (X86cmp:isVoid GR64:i64:$src1, 0:i64)
          // Emits: (TEST64rr:isVoid GR64:i64:$src1, GR64:i64:$src1)
          // Pattern complexity = 8  cost = 1  size = 3
          if (N0.getValueType() == MVT::i64) {
            SDNode *Result = Emit_282(N, X86::TEST64rr);
            return Result;
          }

          // Pattern: (X86cmp:isVoid GR8:i8:$src1, 0:i8)
          // Emits: (TEST8rr:isVoid GR8:i8:$src1, GR8:i8:$src1)
          // Pattern complexity = 8  cost = 1  size = 3
          if (N0.getValueType() == MVT::i8) {
            SDNode *Result = Emit_282(N, X86::TEST8rr);
            return Result;
          }

          // Pattern: (X86cmp:isVoid GR16:i16:$src1, 0:i16)
          // Emits: (TEST16rr:isVoid GR16:i16:$src1, GR16:i16:$src1)
          // Pattern complexity = 8  cost = 1  size = 3
          if (N0.getValueType() == MVT::i16) {
            SDNode *Result = Emit_282(N, X86::TEST16rr);
            return Result;
          }

          // Pattern: (X86cmp:isVoid GR32:i32:$src1, 0:i32)
          // Emits: (TEST32rr:isVoid GR32:i32:$src1, GR32:i32:$src1)
          // Pattern complexity = 8  cost = 1  size = 3
          if (N0.getValueType() == MVT::i32) {
            SDNode *Result = Emit_282(N, X86::TEST32rr);
            return Result;
          }
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86cmp:isVoid GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (CMP16ri8:isVoid GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode()) &&
          N0.getValueType() == MVT::i16) {
        SDNode *Result = Emit_255(N, X86::CMP16ri8);
        return Result;
      }

      // Pattern: (X86cmp:isVoid GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (CMP32ri8:isVoid GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode()) &&
          N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_256(N, X86::CMP32ri8);
        return Result;
      }

      // Pattern: (X86cmp:isVoid GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (CMP64ri8:isVoid GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode()) &&
          N0.getValueType() == MVT::i64) {
        SDNode *Result = Emit_259(N, X86::CMP64ri8);
        return Result;
      }

      // Pattern: (X86cmp:isVoid GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (CMP64ri32:isVoid GR64:i64:$src1, (imm:i64):$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode()) &&
          N0.getValueType() == MVT::i64) {
        SDNode *Result = Emit_259(N, X86::CMP64ri32);
        return Result;
      }

      // Pattern: (X86cmp:isVoid GR8:i8:$src1, (imm:i8):$src2)
      // Emits: (CMP8ri:isVoid GR8:i8:$src1, (imm:i8):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      if (N0.getValueType() == MVT::i8) {
        SDNode *Result = Emit_278(N, X86::CMP8ri);
        return Result;
      }

      // Pattern: (X86cmp:isVoid GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (CMP16ri:isVoid GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      if (N0.getValueType() == MVT::i16) {
        SDNode *Result = Emit_255(N, X86::CMP16ri);
        return Result;
      }

      // Pattern: (X86cmp:isVoid GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (CMP32ri:isVoid GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      if (N0.getValueType() == MVT::i32) {
        SDNode *Result = Emit_256(N, X86::CMP32ri);
        return Result;
      }
    }
  }

  // Pattern: (X86cmp:isVoid RFP32:f32:$lhs, RFP32:f32:$rhs)
  // Emits: (UCOM_FpIr32:isVoid RFP32:f32:$lhs, RFP32:f32:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_254(N, X86::UCOM_FpIr32);
      return Result;
    }
  }

  // Pattern: (X86cmp:isVoid RFP64:f64:$lhs, RFP64:f64:$rhs)
  // Emits: (UCOM_FpIr64:isVoid RFP64:f64:$lhs, RFP64:f64:$rhs)
  // Pattern complexity = 3  cost = 1  size = 0
  if ((!Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_254(N, X86::UCOM_FpIr64);
      return Result;
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86cmp:isVoid RFP80:f80:$lhs, RFP80:f80:$rhs)
    // Emits: (UCOM_FpIr80:isVoid RFP80:f80:$lhs, RFP80:f80:$rhs)
    // Pattern complexity = 3  cost = 1  size = 0
    if (N0.getValueType() == MVT::f80) {
      SDNode *Result = Emit_254(N, X86::UCOM_FpIr80);
      return Result;
    }

    // Pattern: (X86cmp:isVoid GR8:i8:$src1, GR8:i8:$src2)
    // Emits: (CMP8rr:isVoid GR8:i8:$src1, GR8:i8:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i8) {
      SDNode *Result = Emit_254(N, X86::CMP8rr);
      return Result;
    }

    // Pattern: (X86cmp:isVoid GR16:i16:$src1, GR16:i16:$src2)
    // Emits: (CMP16rr:isVoid GR16:i16:$src1, GR16:i16:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_254(N, X86::CMP16rr);
      return Result;
    }

    // Pattern: (X86cmp:isVoid GR32:i32:$src1, GR32:i32:$src2)
    // Emits: (CMP32rr:isVoid GR32:i32:$src1, GR32:i32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_254(N, X86::CMP32rr);
      return Result;
    }

    // Pattern: (X86cmp:isVoid GR64:i64:$src1, GR64:i64:$src2)
    // Emits: (CMP64rr:isVoid GR64:i64:$src1, GR64:i64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    if (N0.getValueType() == MVT::i64) {
      SDNode *Result = Emit_254(N, X86::CMP64rr);
      return Result;
    }
  }

  // Pattern: (X86cmp:isVoid FR32:f32:$src1, FR32:f32:$src2)
  // Emits: (UCOMISSrr:isVoid FR32:f32:$src1, FR32:f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::f32) {
      SDNode *Result = Emit_254(N, X86::UCOMISSrr);
      return Result;
    }
  }

  // Pattern: (X86cmp:isVoid FR64:f64:$src1, FR64:f64:$src2)
  // Emits: (UCOMISDrr:isVoid FR64:f64:$src1, FR64:f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::f64) {
      SDNode *Result = Emit_254(N, X86::UCOMISDrr);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_284(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 char) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i8);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_285(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN11_0, SDValue &CPTmpN11_1, SDValue &CPTmpN11_2, SDValue &CPTmpN11_3, SDValue &CPTmpN11_4) {
  SDValue N0 = 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 Tmp2 = CurDAG->getTargetConstant(((unsigned char) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i8);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N1.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4, Tmp2, Chain1 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N1.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_CMPPD_v2i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86cmppd:v2i64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i8):$cc)
  // Emits: (CMPPDrmi:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$cc)
  // Pattern complexity = 28  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::LOAD &&
      N1.hasOneUse() &&
      IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
    SDValue Chain1 = N1.getNode()->getOperand(0);
    if (Predicate_unindexedload(N1.getNode()) &&
        Predicate_load(N1.getNode()) &&
        Predicate_memop(N1.getNode())) {
      SDValue N11 = N1.getNode()->getOperand(1);
      SDValue CPTmpN11_0;
      SDValue CPTmpN11_1;
      SDValue CPTmpN11_2;
      SDValue CPTmpN11_3;
      SDValue CPTmpN11_4;
      if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N0.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_285(N, X86::CMPPDrmi, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86cmppd:v2i64 VR128:v2f64:$src1, VR128:v2f64:$src2, (imm:i8):$cc)
  // Emits: (CMPPDrri:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$cc)
  // Pattern complexity = 6  cost = 1  size = 3
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v2f64) {
    SDNode *Result = Emit_284(N, X86::CMPPDrri, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_CMPPS_v4i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86cmpps:v4i32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, (imm:i8):$cc)
  // Emits: (CMPPSrmi:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i8):$cc)
  // Pattern complexity = 28  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::LOAD &&
      N1.hasOneUse() &&
      IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
    SDValue Chain1 = N1.getNode()->getOperand(0);
    if (Predicate_unindexedload(N1.getNode()) &&
        Predicate_load(N1.getNode()) &&
        Predicate_memop(N1.getNode())) {
      SDValue N11 = N1.getNode()->getOperand(1);
      SDValue CPTmpN11_0;
      SDValue CPTmpN11_1;
      SDValue CPTmpN11_2;
      SDValue CPTmpN11_3;
      SDValue CPTmpN11_4;
      if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
        SDValue N2 = N->getOperand(2);
        if (N2.getNode()->getOpcode() == ISD::Constant &&
            N0.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_285(N, X86::CMPPSrmi, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86cmpps:v4i32 VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i8):$cc)
  // Emits: (CMPPSrri:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2, (imm:i8):$cc)
  // Pattern complexity = 6  cost = 1  size = 3
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N0.getValueType() == MVT::v4f32) {
    SDNode *Result = Emit_284(N, X86::CMPPSrri, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_COMI(SDNode *N) {

  // Pattern: (X86comi:isVoid VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (Int_COMISSrm:isVoid VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_277(N, X86::Int_COMISSrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86comi:isVoid VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (Int_COMISDrm:isVoid VR128:v2f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_277(N, X86::Int_COMISDrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86comi:isVoid VR128:v4f32:$src1, VR128:v4f32:$src2)
  // Emits: (Int_COMISSrr:isVoid VR128:v4f32:$src1, VR128:v4f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_254(N, X86::Int_COMISSrr);
      return Result;
    }
  }

  // Pattern: (X86comi:isVoid VR128:v2f64:$src1, VR128:v2f64:$src2)
  // Emits: (Int_COMISDrr:isVoid VR128:v2f64:$src1, VR128:v2f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_254(N, X86::Int_COMISDrr);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_DEC_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_252(N, X86::DEC8r, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_DEC_i16(SDNode *N) {

  // Pattern: (X86dec_flag:i16 GR16:i16:$src)
  // Emits: (DEC16r:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 1
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_252(N, X86::DEC16r, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86dec_flag:i16 GR16:i16:$src)
  // Emits: (DEC64_16r:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 2
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_252(N, X86::DEC64_16r, MVT::i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_DEC_i32(SDNode *N) {

  // Pattern: (X86dec_flag:i32 GR32:i32:$src)
  // Emits: (DEC32r:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 1
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_252(N, X86::DEC32r, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86dec_flag:i32 GR32:i32:$src)
  // Emits: (DEC64_32r:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 2
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_252(N, X86::DEC64_32r, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_DEC_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_252(N, X86::DEC64r, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_EH_RETURN(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86ehret:isVoid GR32:i32:$addr)
  // Emits: (EH_RETURN:isVoid GR32:i32:$addr)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i32) {
    SDNode *Result = Emit_83(N, X86::EH_RETURN);
    return Result;
  }

  // Pattern: (X86ehret:isVoid GR64:i64:$addr)
  // Emits: (EH_RETURN64:isVoid GR64:i64:$addr)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N1.getValueType() == MVT::i64) {
    SDNode *Result = Emit_83(N, X86::EH_RETURN64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (X86fand:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (FsANDPSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::FsANDPSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86fand:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, FR32:f32:$src1)
      // Emits: (FsANDPSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::FsANDPSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fand:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Emits: (FsANDPSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::FsANDPSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (X86fand:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (FsANDPDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::FsANDPDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86fand:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, FR64:f64:$src1)
      // Emits: (FsANDPDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::FsANDPDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fand:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Emits: (FsANDPDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::FsANDPDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_286(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
}
SDNode *Select_X86ISD_FILD_f32(SDNode *N) {
  if ((!Subtarget->hasSSE1())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDValue N2 = N->getOperand(2);

      // Pattern: (X86fild:f32 addr:iPTR:$src, i16:Other)
      // Emits: (ILD_Fp16m32:f32 addr:iPTR:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i16) {
        SDNode *Result = Emit_286(N, X86::ILD_Fp16m32, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86fild:f32 addr:iPTR:$src, i32:Other)
      // Emits: (ILD_Fp32m32:f32 addr:iPTR:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i32) {
        SDNode *Result = Emit_286(N, X86::ILD_Fp32m32, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86fild:f32 addr:iPTR:$src, i64:Other)
      // Emits: (ILD_Fp64m32:f32 addr:iPTR:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i64) {
        SDNode *Result = Emit_286(N, X86::ILD_Fp64m32, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FILD_f64(SDNode *N) {
  if ((!Subtarget->hasSSE2())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    SDValue CPTmpN1_4;
    if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
      SDValue N2 = N->getOperand(2);

      // Pattern: (X86fild:f64 addr:iPTR:$src, i16:Other)
      // Emits: (ILD_Fp16m64:f64 addr:iPTR:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i16) {
        SDNode *Result = Emit_286(N, X86::ILD_Fp16m64, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86fild:f64 addr:iPTR:$src, i32:Other)
      // Emits: (ILD_Fp32m64:f64 addr:iPTR:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i32) {
        SDNode *Result = Emit_286(N, X86::ILD_Fp32m64, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86fild:f64 addr:iPTR:$src, i64:Other)
      // Emits: (ILD_Fp64m64:f64 addr:iPTR:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i64) {
        SDNode *Result = Emit_286(N, X86::ILD_Fp64m64, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FILD_f80(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDValue N2 = N->getOperand(2);

    // Pattern: (X86fild:f80 addr:iPTR:$src, i16:Other)
    // Emits: (ILD_Fp16m80:f80 addr:iPTR:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i16) {
      SDNode *Result = Emit_286(N, X86::ILD_Fp16m80, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }

    // Pattern: (X86fild:f80 addr:iPTR:$src, i32:Other)
    // Emits: (ILD_Fp32m80:f80 addr:iPTR:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i32) {
      SDNode *Result = Emit_286(N, X86::ILD_Fp32m80, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }

    // Pattern: (X86fild:f80 addr:iPTR:$src, i64:Other)
    // Emits: (ILD_Fp64m80:f80 addr:iPTR:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i64) {
      SDNode *Result = Emit_286(N, X86::ILD_Fp64m80, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_287(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, MVT::Flag, Ops0, 6);
  Chain = SDValue(ResNode, 1);
  SDValue InFlag(ResNode, 2);
  const SDValue Froms[] = {
    SDValue(N, 2),
    SDValue(N, 1)
  };
  const SDValue Tos[] = {
    InFlag,
    SDValue(Chain.getNode(), Chain.getResNo())
  };
  ReplaceUses(Froms, Tos, 2);
  return ResNode;
}
SDNode *Select_X86ISD_FILD_FLAG_f64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDValue N2 = N->getOperand(2);
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::i64) {
      SDNode *Result = Emit_287(N, X86::ILD_Fp64m64, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FLD_f32(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDValue N2 = N->getOperand(2);
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::f32) {
      SDNode *Result = Emit_286(N, X86::LD_Fp32m, MVT::f32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FLD_f64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDValue N2 = N->getOperand(2);
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::f64) {
      SDNode *Result = Emit_286(N, X86::LD_Fp64m, MVT::f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FLD_f80(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDValue N2 = N->getOperand(2);
    if (cast<VTSDNode>(N2.getNode())->getVT() == MVT::f80) {
      SDNode *Result = Emit_286(N, X86::LD_Fp80m, MVT::f80, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMAX_f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86fmax:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MAXSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MAXSSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmax:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Emits: (MAXSSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MAXSSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMAX_f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (X86fmax:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MAXSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MAXSDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmax:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Emits: (MAXSDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MAXSDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMAX_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86fmax:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (MAXPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MAXPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmax:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (MAXPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MAXPSrr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMAX_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (X86fmax:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (MAXPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MAXPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmax:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Emits: (MAXPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MAXPDrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMIN_f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86fmin:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MINSSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MINSSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmin:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Emits: (MINSSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MINSSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMIN_f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (X86fmin:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MINSDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MINSDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmin:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Emits: (MINSDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MINSDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMIN_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86fmin:v4f32 VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (MINPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MINPSrm, MVT::v4f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmin:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (MINPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MINPSrr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FMIN_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {

    // Pattern: (X86fmin:v2f64 VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (MINPDrm:v2f64 VR128:v2f64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::MINPDrm, MVT::v2f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fmin:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Emits: (MINPDrr:v2f64 VR128:v2f64:$src1, VR128:v2f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::MINPDrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_288(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 6);
}
SDNode *Select_X86ISD_FNSTCW16m(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDNode *Result = Emit_288(N, X86::FNSTCW16m, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (X86for:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (FsORPSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::FsORPSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86for:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, FR32:f32:$src1)
      // Emits: (FsORPSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::FsORPSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86for:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Emits: (FsORPSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::FsORPSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (X86for:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (FsORPDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::FsORPDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86for:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, FR64:f64:$src1)
      // Emits: (FsORPDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::FsORPDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86for:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Emits: (FsORPDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::FsORPDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_289(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N1, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 7);
}
SDNode *Select_X86ISD_FP_TO_INT16_IN_MEM(SDNode *N) {
  if ((Subtarget->hasSSE3())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue CPTmpN2_0;
    SDValue CPTmpN2_1;
    SDValue CPTmpN2_2;
    SDValue CPTmpN2_3;
    SDValue CPTmpN2_4;
    if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

      // Pattern: (X86fp_to_i16mem:isVoid RFP32:f32:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp16m32:isVoid addr:iPTR:$op, RFP32:f32:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f32) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp16m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fp_to_i16mem:isVoid RFP64:f64:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp16m64:isVoid addr:iPTR:$op, RFP64:f64:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f64) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp16m64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fp_to_i16mem:isVoid RFP80:f80:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp16m80:isVoid addr:iPTR:$op, RFP80:f80:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f80) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp16m80, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue CPTmpN2_0;
  SDValue CPTmpN2_1;
  SDValue CPTmpN2_2;
  SDValue CPTmpN2_3;
  SDValue CPTmpN2_4;
  if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

    // Pattern: (X86fp_to_i16mem:isVoid RFP32:f32:$src, addr:iPTR:$dst)
    // Emits: (FP32_TO_INT16_IN_MEM:isVoid addr:iPTR:$dst, RFP32:f32:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f32) {
      SDNode *Result = Emit_289(N, X86::FP32_TO_INT16_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fp_to_i16mem:isVoid RFP64:f64:$src, addr:iPTR:$dst)
    // Emits: (FP64_TO_INT16_IN_MEM:isVoid addr:iPTR:$dst, RFP64:f64:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f64) {
      SDNode *Result = Emit_289(N, X86::FP64_TO_INT16_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fp_to_i16mem:isVoid RFP80:f80:$src, addr:iPTR:$dst)
    // Emits: (FP80_TO_INT16_IN_MEM:isVoid addr:iPTR:$dst, RFP80:f80:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f80) {
      SDNode *Result = Emit_289(N, X86::FP80_TO_INT16_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FP_TO_INT32_IN_MEM(SDNode *N) {
  if ((Subtarget->hasSSE3())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue CPTmpN2_0;
    SDValue CPTmpN2_1;
    SDValue CPTmpN2_2;
    SDValue CPTmpN2_3;
    SDValue CPTmpN2_4;
    if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

      // Pattern: (X86fp_to_i32mem:isVoid RFP32:f32:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp32m32:isVoid addr:iPTR:$op, RFP32:f32:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f32) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp32m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fp_to_i32mem:isVoid RFP64:f64:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp32m64:isVoid addr:iPTR:$op, RFP64:f64:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f64) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp32m64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fp_to_i32mem:isVoid RFP80:f80:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp32m80:isVoid addr:iPTR:$op, RFP80:f80:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f80) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp32m80, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue CPTmpN2_0;
  SDValue CPTmpN2_1;
  SDValue CPTmpN2_2;
  SDValue CPTmpN2_3;
  SDValue CPTmpN2_4;
  if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

    // Pattern: (X86fp_to_i32mem:isVoid RFP32:f32:$src, addr:iPTR:$dst)
    // Emits: (FP32_TO_INT32_IN_MEM:isVoid addr:iPTR:$dst, RFP32:f32:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f32) {
      SDNode *Result = Emit_289(N, X86::FP32_TO_INT32_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fp_to_i32mem:isVoid RFP64:f64:$src, addr:iPTR:$dst)
    // Emits: (FP64_TO_INT32_IN_MEM:isVoid addr:iPTR:$dst, RFP64:f64:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f64) {
      SDNode *Result = Emit_289(N, X86::FP64_TO_INT32_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fp_to_i32mem:isVoid RFP80:f80:$src, addr:iPTR:$dst)
    // Emits: (FP80_TO_INT32_IN_MEM:isVoid addr:iPTR:$dst, RFP80:f80:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f80) {
      SDNode *Result = Emit_289(N, X86::FP80_TO_INT32_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FP_TO_INT64_IN_MEM(SDNode *N) {
  if ((Subtarget->hasSSE3())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue N2 = N->getOperand(2);
    SDValue CPTmpN2_0;
    SDValue CPTmpN2_1;
    SDValue CPTmpN2_2;
    SDValue CPTmpN2_3;
    SDValue CPTmpN2_4;
    if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

      // Pattern: (X86fp_to_i64mem:isVoid RFP32:f32:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp64m32:isVoid addr:iPTR:$op, RFP32:f32:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f32) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp64m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fp_to_i64mem:isVoid RFP64:f64:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp64m64:isVoid addr:iPTR:$op, RFP64:f64:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f64) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp64m64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fp_to_i64mem:isVoid RFP80:f80:$src, addr:iPTR:$op)
      // Emits: (ISTT_Fp64m80:isVoid addr:iPTR:$op, RFP80:f80:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f80) {
        SDNode *Result = Emit_289(N, X86::ISTT_Fp64m80, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }
  }
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue CPTmpN2_0;
  SDValue CPTmpN2_1;
  SDValue CPTmpN2_2;
  SDValue CPTmpN2_3;
  SDValue CPTmpN2_4;
  if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {

    // Pattern: (X86fp_to_i64mem:isVoid RFP32:f32:$src, addr:iPTR:$dst)
    // Emits: (FP32_TO_INT64_IN_MEM:isVoid addr:iPTR:$dst, RFP32:f32:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f32) {
      SDNode *Result = Emit_289(N, X86::FP32_TO_INT64_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fp_to_i64mem:isVoid RFP64:f64:$src, addr:iPTR:$dst)
    // Emits: (FP64_TO_INT64_IN_MEM:isVoid addr:iPTR:$dst, RFP64:f64:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f64) {
      SDNode *Result = Emit_289(N, X86::FP64_TO_INT64_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fp_to_i64mem:isVoid RFP80:f80:$src, addr:iPTR:$dst)
    // Emits: (FP80_TO_INT64_IN_MEM:isVoid addr:iPTR:$dst, RFP80:f80:$src)
    // Pattern complexity = 21  cost = 11  size = 3
    if (N1.getValueType() == MVT::f80) {
      SDNode *Result = Emit_289(N, X86::FP80_TO_INT64_IN_MEM, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FRCP_f32(SDNode *N) {

  // Pattern: (X86frcp:f32 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (RCPSSm:f32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) && (OptForSize)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::RCPSSm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86frcp:f32 FR32:f32:$src)
  // Emits: (RCPSSr:f32 FR32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::RCPSSr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FRCP_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86frcp:v4f32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (RCPPSm:v4f32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::LOAD &&
          N0.hasOneUse()) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        if (Predicate_unindexedload(N0.getNode()) &&
            Predicate_load(N0.getNode()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_79(N, X86::RCPPSm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86frcp:v4f32 VR128:v4f32:$src)
    // Emits: (RCPPSr:v4f32 VR128:v4f32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_72(N, X86::RCPPSr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FRSQRT_f32(SDNode *N) {

  // Pattern: (X86frsqrt:f32 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (RSQRTSSm:f32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1()) && (OptForSize)) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::RSQRTSSm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86frsqrt:f32 FR32:f32:$src)
  // Emits: (RSQRTSSr:f32 FR32:f32:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_72(N, X86::RSQRTSSr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_FRSQRT_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86frsqrt:v4f32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (RSQRTPSm:v4f32 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::LOAD &&
          N0.hasOneUse()) {
        SDValue Chain0 = N0.getNode()->getOperand(0);
        if (Predicate_unindexedload(N0.getNode()) &&
            Predicate_load(N0.getNode()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_79(N, X86::RSQRTPSm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86frsqrt:v4f32 VR128:v4f32:$src)
    // Emits: (RSQRTPSr:v4f32 VR128:v4f32:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_72(N, X86::RSQRTPSr, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_290(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_BYTE_imm(Tmp1.getNode());
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp2);
}
SDNode *Select_X86ISD_FSRL_v2f64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        Predicate_i32immSExt8(N1.getNode()) &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_290(N, X86::PSRLDQri, MVT::v2f64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_291(SDNode *N, unsigned Opc0, SDValue &CPTmpN2_0, SDValue &CPTmpN2_1, SDValue &CPTmpN2_2, SDValue &CPTmpN2_3, SDValue &CPTmpN2_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue InFlag = N->getOperand(4);
  SDValue Ops0[] = { CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4, N1, Chain, InFlag };
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, Ops0, 8);
}
SDNode *Select_X86ISD_FST(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue CPTmpN2_0;
  SDValue CPTmpN2_1;
  SDValue CPTmpN2_2;
  SDValue CPTmpN2_3;
  SDValue CPTmpN2_4;
  if (SelectAddr(N, N2, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4)) {
    SDValue N3 = N->getOperand(3);
    if (cast<VTSDNode>(N3.getNode())->getVT() == MVT::f32) {

      // Pattern: (X86fst:isVoid RFP32:f32:$src, addr:iPTR:$op, f32:Other)
      // Emits: (ST_Fp32m:isVoid addr:iPTR:$op, RFP32:f32:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f32) {
        SDNode *Result = Emit_291(N, X86::ST_Fp32m, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }

      // Pattern: (X86fst:isVoid RFP64:f64:$src, addr:iPTR:$op, f32:Other)
      // Emits: (ST_Fp64m32:isVoid addr:iPTR:$op, RFP64:f64:$src)
      // Pattern complexity = 21  cost = 1  size = 0
      if (N1.getValueType() == MVT::f64) {
        SDNode *Result = Emit_291(N, X86::ST_Fp64m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
        return Result;
      }
    }

    // Pattern: (X86fst:isVoid RFP64:f64:$src, addr:iPTR:$op, f64:Other)
    // Emits: (ST_Fp64m:isVoid addr:iPTR:$op, RFP64:f64:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N3.getNode())->getVT() == MVT::f64 &&
        N1.getValueType() == MVT::f64) {
      SDNode *Result = Emit_291(N, X86::ST_Fp64m, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fst:isVoid RFP80:f80:$src, addr:iPTR:$op, f32:Other)
    // Emits: (ST_Fp80m32:isVoid addr:iPTR:$op, RFP80:f80:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N3.getNode())->getVT() == MVT::f32 &&
        N1.getValueType() == MVT::f80) {
      SDNode *Result = Emit_291(N, X86::ST_Fp80m32, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fst:isVoid RFP80:f80:$src, addr:iPTR:$op, f64:Other)
    // Emits: (ST_Fp80m64:isVoid addr:iPTR:$op, RFP80:f80:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N3.getNode())->getVT() == MVT::f64 &&
        N1.getValueType() == MVT::f80) {
      SDNode *Result = Emit_291(N, X86::ST_Fp80m64, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }

    // Pattern: (X86fst:isVoid RFP80:f80:$src, addr:iPTR:$op, f80:Other)
    // Emits: (ST_FpP80m:isVoid addr:iPTR:$op, RFP80:f80:$src)
    // Pattern complexity = 21  cost = 1  size = 0
    if (cast<VTSDNode>(N3.getNode())->getVT() == MVT::f80 &&
        N1.getValueType() == MVT::f80) {
      SDNode *Result = Emit_291(N, X86::ST_FpP80m, CPTmpN2_0, CPTmpN2_1, CPTmpN2_2, CPTmpN2_3, CPTmpN2_4);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (X86fxor:f32 FR32:f32:$src1, (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (FsXORPSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::FsXORPSrm, MVT::f32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86fxor:f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, FR32:f32:$src1)
      // Emits: (FsXORPSrm:f32 FR32:f32:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::FsXORPSrm, MVT::f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fxor:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Emits: (FsXORPSrr:f32 FR32:f32:$src1, FR32:f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::FsXORPSrr, MVT::f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

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

      // Pattern: (X86fxor:f64 FR64:f64:$src1, (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
      // Emits: (FsXORPDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      {
        SDValue N1 = N->getOperand(1);
        if (N1.getNode()->getOpcode() == ISD::LOAD &&
            N1.hasOneUse() &&
            IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
          SDValue Chain1 = N1.getNode()->getOperand(0);
          if (Predicate_unindexedload(N1.getNode()) &&
              Predicate_load(N1.getNode()) &&
              Predicate_memop(N1.getNode())) {
            SDValue N11 = N1.getNode()->getOperand(1);
            SDValue CPTmpN11_0;
            SDValue CPTmpN11_1;
            SDValue CPTmpN11_2;
            SDValue CPTmpN11_3;
            SDValue CPTmpN11_4;
            if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
              SDNode *Result = Emit_18(N, X86::FsXORPDrm, MVT::f64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
              return Result;
            }
          }
        }
      }

      // Pattern: (X86fxor:f64 (ld:f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, FR64:f64:$src1)
      // Emits: (FsXORPDrm:f64 FR64:f64:$src1, addr:iPTR:$src2)
      // Pattern complexity = 25  cost = 1  size = 3
      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()) &&
            Predicate_memop(N0.getNode())) {
          SDValue N01 = N0.getNode()->getOperand(1);
          SDValue CPTmpN01_0;
          SDValue CPTmpN01_1;
          SDValue CPTmpN01_2;
          SDValue CPTmpN01_3;
          SDValue CPTmpN01_4;
          if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
            SDNode *Result = Emit_19(N, X86::FsXORPDrm, MVT::f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86fxor:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Emits: (FsXORPDrr:f64 FR64:f64:$src1, FR64:f64:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::FsXORPDrr, MVT::f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_INC_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i8) {
    SDNode *Result = Emit_252(N, X86::INC8r, MVT::i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_INC_i16(SDNode *N) {

  // Pattern: (X86inc_flag:i16 GR16:i16:$src)
  // Emits: (INC16r:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 1
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_252(N, X86::INC16r, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86inc_flag:i16 GR16:i16:$src)
  // Emits: (INC64_16r:i16 GR16:i16:$src)
  // Pattern complexity = 3  cost = 1  size = 2
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i16) {
      SDNode *Result = Emit_252(N, X86::INC64_16r, MVT::i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_INC_i32(SDNode *N) {

  // Pattern: (X86inc_flag:i32 GR32:i32:$src)
  // Emits: (INC32r:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 1
  if ((!Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_252(N, X86::INC32r, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86inc_flag:i32 GR32:i32:$src)
  // Emits: (INC64_32r:i32 GR32:i32:$src)
  // Pattern complexity = 3  cost = 1  size = 2
  if ((Subtarget->is64Bit())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getValueType() == MVT::i32) {
      SDNode *Result = Emit_252(N, X86::INC64_32r, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_INC_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  if (N0.getValueType() == MVT::i64) {
    SDNode *Result = Emit_252(N, X86::INC64r, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_292(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp2, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_INSERTPS_v4f32(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86insrtps:v4f32 VR128:v4f32:$src1, (scalar_to_vector:v4f32 (ld:f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>), (imm:iPTR):$src3)
    // Emits: (INSERTPSrm:v4f32 VR128:v4f32:$src1, addr:iPTR:$src2, (imm:i32):$src3)
    // Pattern complexity = 31  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N1.hasOneUse()) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::LOAD &&
          N10.hasOneUse() &&
          IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
        SDValue Chain10 = N10.getNode()->getOperand(0);
        if (Predicate_unindexedload(N10.getNode()) &&
            Predicate_load(N10.getNode()) &&
            Predicate_loadf32(N10.getNode())) {
          SDValue N101 = N10.getNode()->getOperand(1);
          SDValue CPTmpN101_0;
          SDValue CPTmpN101_1;
          SDValue CPTmpN101_2;
          SDValue CPTmpN101_3;
          SDValue CPTmpN101_4;
          if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
            SDValue N2 = N->getOperand(2);
            if (N2.getNode()->getOpcode() == ISD::Constant &&
                N10.getValueType() == MVT::f32) {
              SDNode *Result = Emit_292(N, X86::INSERTPSrm, MVT::v4f32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86insrtps:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:iPTR):$src3)
    // Emits: (INSERTPSrr:v4f32 VR128:v4f32:$src1, VR128:v4f32:$src2, (imm:i32):$src3)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_98(N, X86::INSERTPSrr, MVT::v4f32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_293(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 7);
  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_X86ISD_LCMPXCHG8_DAG(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDNode *Result = Emit_293(N, X86::LCMPXCHG8B, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_294(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SDValue InFlag = N->getOperand(4);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, N2, Chain, InFlag };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Ops0, 8);
  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_X86ISD_LCMPXCHG_DAG(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDValue N2 = N->getOperand(2);
    SDValue N3 = N->getOperand(3);
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N3.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();

      // Pattern: (X86cas:isVoid addr:iPTR:$ptr, GR32:i32:$swap, 4:i8)
      // Emits: (LCMPXCHG32:isVoid addr:iPTR:$ptr, GR32:i32:$swap)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(4) &&
          N2.getValueType() == MVT::i32) {
        SDNode *Result = Emit_294(N, X86::LCMPXCHG32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86cas:isVoid addr:iPTR:$ptr, GR16:i16:$swap, 2:i8)
      // Emits: (LCMPXCHG16:isVoid addr:iPTR:$ptr, GR16:i16:$swap)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(2) &&
          N2.getValueType() == MVT::i16) {
        SDNode *Result = Emit_294(N, X86::LCMPXCHG16, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86cas:isVoid addr:iPTR:$ptr, GR8:i8:$swap, 1:i8)
      // Emits: (LCMPXCHG8:isVoid addr:iPTR:$ptr, GR8:i8:$swap)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(1) &&
          N2.getValueType() == MVT::i8) {
        SDNode *Result = Emit_294(N, X86::LCMPXCHG8, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }

      // Pattern: (X86cas:isVoid addr:iPTR:$ptr, GR64:i64:$swap, 8:i8)
      // Emits: (LCMPXCHG64:isVoid addr:iPTR:$ptr, GR64:i64:$swap)
      // Pattern complexity = 26  cost = 1  size = 3
      if (CN1 == INT64_C(8) &&
          N2.getValueType() == MVT::i64) {
        SDNode *Result = Emit_294(N, X86::LCMPXCHG64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
        return Result;
      }
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_295(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN0001_0, SDValue &CPTmpN0001_1, SDValue &CPTmpN0001_2, SDValue &CPTmpN0001_3, SDValue &CPTmpN0001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue N000 = N00.getNode()->getOperand(0);
  SDValue Chain000 = N000.getNode()->getOperand(0);
  SDValue N0001 = N000.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N000.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN0001_0, CPTmpN0001_1, CPTmpN0001_2, CPTmpN0001_3, CPTmpN0001_4, Chain000 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N000.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_MOVQ2DQ_v2i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (MMX_X86movq2dq:v2i64 (bitconvert:v1i64 (scalar_to_vector:v2i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)))
    // Emits: (MOVDI2PDIrm:v2i64 addr:iPTR:$src)
    // Pattern complexity = 31  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
          N00.hasOneUse()) {
        SDValue N000 = N00.getNode()->getOperand(0);
        if (N000.getNode()->getOpcode() == ISD::LOAD &&
            N000.hasOneUse() &&
            IsLegalAndProfitableToFold(N000.getNode(), N00.getNode(), N)) {
          SDValue Chain000 = N000.getNode()->getOperand(0);
          if (Predicate_unindexedload(N000.getNode()) &&
              Predicate_loadi32(N000.getNode())) {
            SDValue N0001 = N000.getNode()->getOperand(1);
            SDValue CPTmpN0001_0;
            SDValue CPTmpN0001_1;
            SDValue CPTmpN0001_2;
            SDValue CPTmpN0001_3;
            SDValue CPTmpN0001_4;
            if (SelectAddr(N, N0001, CPTmpN0001_0, CPTmpN0001_1, CPTmpN0001_2, CPTmpN0001_3, CPTmpN0001_4) &&
                N00.getValueType() == MVT::v2i32 &&
                N000.getValueType() == MVT::i32) {
              SDNode *Result = Emit_295(N, X86::MOVDI2PDIrm, MVT::v2i64, CPTmpN0001_0, CPTmpN0001_1, CPTmpN0001_2, CPTmpN0001_3, CPTmpN0001_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (MMX_X86movq2dq:v2i64 (ld:v1i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MOVQI2PQIrm:v2i64 addr:iPTR:$src)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::MOVQI2PQIrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (MMX_X86movq2dq:v2i64 VR64:v1i64:$src)
  // Emits: (MMX_MOVQ2DQrr:v2i64 VR64:v8i8:$src)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_72(N, X86::MMX_MOVQ2DQrr, MVT::v2i64);
  return Result;
}

SDNode *Select_X86ISD_MUL_IMM_i32(SDNode *N) {

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA64_32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA64_32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  // Pattern: lea32addr:i32:$src
  // Emits: (LEA32r:i32 lea32addr:i32:$src)
  // Pattern complexity = 15  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue CPTmpN_0;
    SDValue CPTmpN_1;
    SDValue CPTmpN_2;
    SDValue CPTmpN_3;
    if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
      SDNode *Result = Emit_7(N, X86::LEA32r, MVT::i32, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_MUL_IMM_i64(SDNode *N) {
  SDValue CPTmpN_0;
  SDValue CPTmpN_1;
  SDValue CPTmpN_2;
  SDValue CPTmpN_3;
  if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
    SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_OR_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86or_flag:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
    // Emits: (OR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi8(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86or_flag:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src1)
    // Emits: (OR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi8(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (X86or_flag:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (OR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::OR8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (X86or_flag:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (OR8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR8rr, MVT::i8);
  return Result;
}

SDNode *Select_X86ISD_OR_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86or_flag:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (OR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi16(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86or_flag:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1)
    // Emits: (OR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86or_flag:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (OR16ri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::OR16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (X86or_flag:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (OR16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::OR16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86or_flag:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (OR16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_OR_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86or_flag:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (OR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86or_flag:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1)
    // Emits: (OR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86or_flag:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (OR32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::OR32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (X86or_flag:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (OR32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::OR32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86or_flag:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (OR32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_OR_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86or_flag:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (OR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::OR64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86or_flag:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src1)
    // Emits: (OR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::OR64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86or_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (OR64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::OR64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (X86or_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (OR64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::OR64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (X86or_flag:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (OR64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::OR64rr, MVT::i64);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQB_v8i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqb:v8i8 VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PCMPEQBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PCMPEQBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86pcmpeqb:v8i8 (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v8i8:$src1)
    // Emits: (MMX_PCMPEQBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
            SDValue N1 = N->getOperand(1);
            if (N00.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_17(N, X86::MMX_PCMPEQBrm, MVT::v8i8, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (X86pcmpeqb:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Emits: (MMX_PCMPEQBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::MMX_PCMPEQBrr, MVT::v8i8);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQB_v16i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqb:v16i8 VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PCMPEQBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PCMPEQBrm, MVT::v16i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86pcmpeqb:v16i8 (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v16i8:$src1)
    // Emits: (PCMPEQBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PCMPEQBrm, MVT::v16i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpeqb:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Emits: (PCMPEQBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPEQBrr, MVT::v16i8);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQD_v2i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqd:v2i32 VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PCMPEQDrm:v2i32 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PCMPEQDrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86pcmpeqd:v2i32 (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v2i32:$src1)
    // Emits: (MMX_PCMPEQDrm:v2i32 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
            SDValue N1 = N->getOperand(1);
            if (N00.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_17(N, X86::MMX_PCMPEQDrm, MVT::v2i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (X86pcmpeqd:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
  // Emits: (MMX_PCMPEQDrr:v2i32 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::MMX_PCMPEQDrr, MVT::v2i32);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQD_v4i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqd:v4i32 VR128:v4i32:$src1, (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PCMPEQDrm:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PCMPEQDrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86pcmpeqd:v4i32 (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v4i32:$src1)
    // Emits: (PCMPEQDrm:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PCMPEQDrm, MVT::v4i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpeqd:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
  // Emits: (PCMPEQDrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPEQDrr, MVT::v4i32);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQQ_v2i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqq:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PCMPEQQrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PCMPEQQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86pcmpeqq:v2i64 (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v2i64:$src1)
    // Emits: (PCMPEQQrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PCMPEQQrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpeqq:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (PCMPEQQrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPEQQrr, MVT::v2i64);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQW_v4i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqw:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MMX_PCMPEQWrm:v4i16 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_16(N, X86::MMX_PCMPEQWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86pcmpeqw:v4i16 (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>), VR64:v4i16:$src1)
    // Emits: (MMX_PCMPEQWrm:v4i16 VR64:v8i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {
            SDValue N1 = N->getOperand(1);
            if (N00.getValueType() == MVT::v1i64) {
              SDNode *Result = Emit_17(N, X86::MMX_PCMPEQWrm, MVT::v4i16, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (X86pcmpeqw:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
  // Emits: (MMX_PCMPEQWrr:v4i16 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::MMX_PCMPEQWrr, MVT::v4i16);
  return Result;
}

SDNode *Select_X86ISD_PCMPEQW_v8i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86pcmpeqw:v8i16 VR128:v8i16:$src1, (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
    // Emits: (PCMPEQWrm:v8i16 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_memop(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_18(N, X86::PCMPEQWrm, MVT::v8i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86pcmpeqw:v8i16 (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>, VR128:v8i16:$src1)
    // Emits: (PCMPEQWrm:v8i16 VR128:v16i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_memop(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_19(N, X86::PCMPEQWrm, MVT::v8i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpeqw:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
  // Emits: (PCMPEQWrr:v8i16 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPEQWrr, MVT::v8i16);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTB_v8i8(SDNode *N) {

  // Pattern: (X86pcmpgtb:v8i8 VR64:v8i8:$src1, (bitconvert:v8i8 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
  // Emits: (MMX_PCMPGTBrm:v8i8 VR64:v8i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N1.hasOneUse()) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::LOAD &&
          N10.hasOneUse() &&
          IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
        SDValue Chain10 = N10.getNode()->getOperand(0);
        if (Predicate_unindexedload(N10.getNode()) &&
            Predicate_load(N10.getNode())) {
          SDValue N101 = N10.getNode()->getOperand(1);
          SDValue CPTmpN101_0;
          SDValue CPTmpN101_1;
          SDValue CPTmpN101_2;
          SDValue CPTmpN101_3;
          SDValue CPTmpN101_4;
          if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
              N10.getValueType() == MVT::v1i64) {
            SDNode *Result = Emit_16(N, X86::MMX_PCMPGTBrm, MVT::v8i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (X86pcmpgtb:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Emits: (MMX_PCMPGTBrr:v8i8 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::MMX_PCMPGTBrr, MVT::v8i8);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTB_v16i8(SDNode *N) {

  // Pattern: (X86pcmpgtb:v16i8 VR128:v16i8:$src1, (ld:v16i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (PCMPGTBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_memop(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::PCMPGTBrm, MVT::v16i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpgtb:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Emits: (PCMPGTBrr:v16i8 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPGTBrr, MVT::v16i8);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTD_v2i32(SDNode *N) {

  // Pattern: (X86pcmpgtd:v2i32 VR64:v2i32:$src1, (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
  // Emits: (MMX_PCMPGTDrm:v2i32 VR64:v8i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N1.hasOneUse()) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::LOAD &&
          N10.hasOneUse() &&
          IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
        SDValue Chain10 = N10.getNode()->getOperand(0);
        if (Predicate_unindexedload(N10.getNode()) &&
            Predicate_load(N10.getNode())) {
          SDValue N101 = N10.getNode()->getOperand(1);
          SDValue CPTmpN101_0;
          SDValue CPTmpN101_1;
          SDValue CPTmpN101_2;
          SDValue CPTmpN101_3;
          SDValue CPTmpN101_4;
          if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
              N10.getValueType() == MVT::v1i64) {
            SDNode *Result = Emit_16(N, X86::MMX_PCMPGTDrm, MVT::v2i32, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (X86pcmpgtd:v2i32 VR64:v2i32:$src1, VR64:v2i32:$src2)
  // Emits: (MMX_PCMPGTDrr:v2i32 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::MMX_PCMPGTDrr, MVT::v2i32);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTD_v4i32(SDNode *N) {

  // Pattern: (X86pcmpgtd:v4i32 VR128:v4i32:$src1, (ld:v4i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (PCMPGTDrm:v4i32 VR128:v16i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_memop(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::PCMPGTDrm, MVT::v4i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpgtd:v4i32 VR128:v4i32:$src1, VR128:v4i32:$src2)
  // Emits: (PCMPGTDrr:v4i32 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPGTDrr, MVT::v4i32);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTQ_v2i64(SDNode *N) {

  // Pattern: (X86pcmpgtq:v2i64 VR128:v2i64:$src1, (ld:v2i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (PCMPGTQrm:v2i64 VR128:v16i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_memop(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::PCMPGTQrm, MVT::v2i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpgtq:v2i64 VR128:v2i64:$src1, VR128:v2i64:$src2)
  // Emits: (PCMPGTQrr:v2i64 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPGTQrr, MVT::v2i64);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTW_v4i16(SDNode *N) {

  // Pattern: (X86pcmpgtw:v4i16 VR64:v4i16:$src1, (bitconvert:v4i16 (ld:v1i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
  // Emits: (MMX_PCMPGTWrm:v4i16 VR64:v8i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 28  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N1.hasOneUse()) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::LOAD &&
          N10.hasOneUse() &&
          IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
        SDValue Chain10 = N10.getNode()->getOperand(0);
        if (Predicate_unindexedload(N10.getNode()) &&
            Predicate_load(N10.getNode())) {
          SDValue N101 = N10.getNode()->getOperand(1);
          SDValue CPTmpN101_0;
          SDValue CPTmpN101_1;
          SDValue CPTmpN101_2;
          SDValue CPTmpN101_3;
          SDValue CPTmpN101_4;
          if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
              N10.getValueType() == MVT::v1i64) {
            SDNode *Result = Emit_16(N, X86::MMX_PCMPGTWrm, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (X86pcmpgtw:v4i16 VR64:v4i16:$src1, VR64:v4i16:$src2)
  // Emits: (MMX_PCMPGTWrr:v4i16 VR64:v8i8:$src1, VR64:v8i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::MMX_PCMPGTWrr, MVT::v4i16);
  return Result;
}

SDNode *Select_X86ISD_PCMPGTW_v8i16(SDNode *N) {

  // Pattern: (X86pcmpgtw:v8i16 VR128:v8i16:$src1, (ld:v8i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>)
  // Emits: (PCMPGTWrm:v8i16 VR128:v16i8:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_memop(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_18(N, X86::PCMPGTWrm, MVT::v8i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86pcmpgtw:v8i16 VR128:v8i16:$src1, VR128:v8i16:$src2)
  // Emits: (PCMPGTWrr:v8i16 VR128:v16i8:$src1, VR128:v16i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_15(N, X86::PCMPGTWrr, MVT::v8i16);
  return Result;
}

SDNode *Select_X86ISD_PEXTRB_i32(SDNode *N) {
  if ((Subtarget->hasSSE41())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v16i8) {
      SDNode *Result = Emit_94(N, X86::PEXTRBrr, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_296(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N1)->getZExtValue()), MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, Tmp1);
}
SDNode *Select_X86ISD_PEXTRW_i32(SDNode *N) {

  // Pattern: (X86pextrw:i32 VR128:v8i16:$src1, (imm:iPTR):$src2)
  // Emits: (PEXTRWri:i32 VR128:v8i16:$src1, (imm:i32):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v8i16) {
      SDNode *Result = Emit_94(N, X86::PEXTRWri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (MMX_X86pextrw:i32 VR64:v4i16:$src1, (imm:iPTR):$src2)
  // Emits: (MMX_PEXTRWri:i32 VR64:v4i16:$src1, (imm:i16):$src2)
  // Pattern complexity = 6  cost = 1  size = 3
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16 &&
        N1.getValueType() == TLI.getPointerTy()) {
      SDNode *Result = Emit_296(N, X86::MMX_PEXTRWri, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (X86pinsrb:v16i8 VR128:v16i8:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi8>>, (imm:iPTR):$src3)
    // Emits: (PINSRBrm:v16i8 VR128:v16i8:$src1, addr:iPTR:$src2, (imm:i32):$src3)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_extload(N1.getNode()) &&
          Predicate_extloadi8(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_99(N, X86::PINSRBrm, MVT::v16i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86pinsrb:v16i8 VR128:v16i8:$src1, GR32:i32:$src2, (imm:iPTR):$src3)
    // Emits: (PINSRBrr:v16i8 VR128:v16i8:$src1, GR32:i32:$src2, (imm:i32):$src3)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_98(N, X86::PINSRBrr, MVT::v16i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_297(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 short) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i16);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, Tmp2);
}
DISABLE_INLINE SDNode *Emit_298(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN101_0, SDValue &CPTmpN101_1, SDValue &CPTmpN101_2, SDValue &CPTmpN101_3, SDValue &CPTmpN101_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N10 = N1.getNode()->getOperand(0);
  SDValue Chain10 = N10.getNode()->getOperand(0);
  SDValue N101 = N10.getNode()->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Tmp2 = CurDAG->getTargetConstant(((unsigned short) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i16);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N10.getNode())->getMemOperand();
  SDValue Ops0[] = { N0, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4, Tmp2, Chain10 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 8);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N10.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
SDNode *Select_X86ISD_PINSRW_v4i16(SDNode *N) {
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (MMX_X86pinsrw:v4i16 VR64:v4i16:$src1, (anyext:i32 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>), (imm:iPTR):$src3)
    // Emits: (MMX_PINSRWrmi:v4i16 VR64:v4i16:$src1, addr:iPTR:$src2, (imm:i16):$src3)
    // Pattern complexity = 31  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::ANY_EXTEND &&
        N1.hasOneUse()) {
      SDValue N10 = N1.getNode()->getOperand(0);
      if (N10.getNode()->getOpcode() == ISD::LOAD &&
          N10.hasOneUse() &&
          IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
        SDValue Chain10 = N10.getNode()->getOperand(0);
        if (Predicate_unindexedload(N10.getNode()) &&
            Predicate_loadi16(N10.getNode())) {
          SDValue N101 = N10.getNode()->getOperand(1);
          SDValue CPTmpN101_0;
          SDValue CPTmpN101_1;
          SDValue CPTmpN101_2;
          SDValue CPTmpN101_3;
          SDValue CPTmpN101_4;
          if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4)) {
            SDValue N2 = N->getOperand(2);
            if (N2.getNode()->getOpcode() == ISD::Constant &&
                N0.getValueType() == MVT::v4i16 &&
                N1.getValueType() == MVT::i32 &&
                N10.getValueType() == MVT::i16 &&
                N2.getValueType() == TLI.getPointerTy()) {
              SDNode *Result = Emit_298(N, X86::MMX_PINSRWrmi, MVT::v4i16, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (MMX_X86pinsrw:v4i16 VR64:v4i16:$src1, GR32:i32:$src2, (imm:iPTR):$src3)
    // Emits: (MMX_PINSRWrri:v4i16 VR64:v4i16:$src1, GR32:i32:$src2, (imm:i16):$src3)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N0.getValueType() == MVT::v4i16 &&
        N1.getValueType() == MVT::i32 &&
        N2.getValueType() == TLI.getPointerTy()) {
      SDNode *Result = Emit_297(N, X86::MMX_PINSRWrri, MVT::v4i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

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

    // Pattern: (X86pinsrw:v8i16 VR128:v8i16:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_extload>><<P:Predicate_extloadi16>>, (imm:iPTR):$src3)
    // Emits: (PINSRWrmi:v8i16 VR128:v8i16:$src1, addr:iPTR:$src2, (imm:i32):$src3)
    // Pattern complexity = 28  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_extload(N1.getNode()) &&
          Predicate_extloadi16(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDValue N2 = N->getOperand(2);
          if (N2.getNode()->getOpcode() == ISD::Constant) {
            SDNode *Result = Emit_99(N, X86::PINSRWrmi, MVT::v8i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86pinsrw:v8i16 VR128:v8i16:$src1, GR32:i32:$src2, (imm:iPTR):$src3)
    // Emits: (PINSRWrri:v8i16 VR128:v8i16:$src1, GR32:i32:$src2, (imm:i32):$src3)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_98(N, X86::PINSRWrri, MVT::v8i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_PSHUFB_v16i8(SDNode *N) {
  if ((Subtarget->hasSSSE3())) {

    // Pattern: (X86pshufb:v16i8 VR128:v16i8:$src, (bitconvert:v16i8 (ld:v2i64 addr:iPTR:$mask)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_memop>>))
    // Emits: (PSHUFBrm128:v16i8 VR128:v16i8:$src, addr:iPTR:$mask)
    // Pattern complexity = 28  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::BIT_CONVERT &&
          N1.hasOneUse()) {
        SDValue N10 = N1.getNode()->getOperand(0);
        if (N10.getNode()->getOpcode() == ISD::LOAD &&
            N10.hasOneUse() &&
            IsLegalAndProfitableToFold(N10.getNode(), N1.getNode(), N)) {
          SDValue Chain10 = N10.getNode()->getOperand(0);
          if (Predicate_unindexedload(N10.getNode()) &&
              Predicate_load(N10.getNode()) &&
              Predicate_memop(N10.getNode())) {
            SDValue N101 = N10.getNode()->getOperand(1);
            SDValue CPTmpN101_0;
            SDValue CPTmpN101_1;
            SDValue CPTmpN101_2;
            SDValue CPTmpN101_3;
            SDValue CPTmpN101_4;
            if (SelectAddr(N, N101, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4) &&
                N10.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_16(N, X86::PSHUFBrm128, MVT::v16i8, CPTmpN101_0, CPTmpN101_1, CPTmpN101_2, CPTmpN101_3, CPTmpN101_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86pshufb:v16i8 VR128:v16i8:$src, VR128:v16i8:$mask)
    // Emits: (PSHUFBrr128:v16i8 VR128:v16i8:$src, VR128:v16i8:$mask)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_15(N, X86::PSHUFBrr128, MVT::v16i8);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_PTEST(SDNode *N) {
  if ((Subtarget->hasSSE41())) {

    // Pattern: (X86ptest:isVoid VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (PTESTrm:isVoid VR128:v4f32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        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;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_277(N, X86::PTESTrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86ptest:isVoid VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Emits: (PTESTrr:isVoid VR128:v4f32:$src1, VR128:v4f32:$src2)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_254(N, X86::PTESTrr);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_299(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, 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_X86ISD_RDTSC_DAG(SDNode *N) {
  SDNode *Result = Emit_299(N, X86::RDTSC);
  return Result;
}

DISABLE_INLINE SDNode *Emit_300(SDNode *N, unsigned Opc0) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue InFlag = N->getOperand(2);
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, MVT::Other, MVT::Flag, Chain, InFlag);
  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_X86ISD_REP_MOVS(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86rep_movs:isVoid i8:Other)
  // Emits: (REP_MOVSB:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
    SDNode *Result = Emit_300(N, X86::REP_MOVSB);
    return Result;
  }

  // Pattern: (X86rep_movs:isVoid i16:Other)
  // Emits: (REP_MOVSW:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
    SDNode *Result = Emit_300(N, X86::REP_MOVSW);
    return Result;
  }

  // Pattern: (X86rep_movs:isVoid i32:Other)
  // Emits: (REP_MOVSD:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i32) {
    SDNode *Result = Emit_300(N, X86::REP_MOVSD);
    return Result;
  }

  // Pattern: (X86rep_movs:isVoid i64:Other)
  // Emits: (REP_MOVSQ:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i64) {
    SDNode *Result = Emit_300(N, X86::REP_MOVSQ);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_REP_STOS(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86rep_stos:isVoid i8:Other)
  // Emits: (REP_STOSB:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i8) {
    SDNode *Result = Emit_300(N, X86::REP_STOSB);
    return Result;
  }

  // Pattern: (X86rep_stos:isVoid i16:Other)
  // Emits: (REP_STOSW:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i16) {
    SDNode *Result = Emit_300(N, X86::REP_STOSW);
    return Result;
  }

  // Pattern: (X86rep_stos:isVoid i32:Other)
  // Emits: (REP_STOSD:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i32) {
    SDNode *Result = Emit_300(N, X86::REP_STOSD);
    return Result;
  }

  // Pattern: (X86rep_stos:isVoid i64:Other)
  // Emits: (REP_STOSQ:isVoid)
  // Pattern complexity = 3  cost = 1  size = 3
  if (cast<VTSDNode>(N1.getNode())->getVT() == MVT::i64) {
    SDNode *Result = Emit_300(N, X86::REP_STOSQ);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_301(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);
  }
  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);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, &Ops0[0], Ops0.size());
}
DISABLE_INLINE SDNode *Emit_302(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);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, &Ops0[0], Ops0.size());
}
SDNode *Select_X86ISD_RET_FLAG(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86retflag:isVoid 0:i16)
  // Emits: (RET:isVoid)
  // Pattern complexity = 8  cost = 1  size = 3
  {
    ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
    if (Tmp0) {
      int64_t CN1 = Tmp0->getSExtValue();
      if (CN1 == INT64_C(0)) {
        SDNode *Result = Emit_301(N, X86::RET, 1);
        return Result;
      }
    }
  }

  // Pattern: (X86retflag:isVoid (timm:i16):$amt)
  // Emits: (RETI:isVoid (timm:i16):$amt)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::TargetConstant) {
    SDNode *Result = Emit_302(N, X86::RETI, 1);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_303(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::EFLAGS, N1, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, InFlag);
}
SDNode *Select_X86ISD_SETCC_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();

    // Pattern: (X86setcc:i8 4:i8, EFLAGS:i32)
    // Emits: (SETEr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(4)) {
      SDNode *Result = Emit_303(N, X86::SETEr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 9:i8, EFLAGS:i32)
    // Emits: (SETNEr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(9)) {
      SDNode *Result = Emit_303(N, X86::SETNEr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 7:i8, EFLAGS:i32)
    // Emits: (SETLr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(7)) {
      SDNode *Result = Emit_303(N, X86::SETLr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 6:i8, EFLAGS:i32)
    // Emits: (SETGEr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(6)) {
      SDNode *Result = Emit_303(N, X86::SETGEr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 8:i8, EFLAGS:i32)
    // Emits: (SETLEr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(8)) {
      SDNode *Result = Emit_303(N, X86::SETLEr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 5:i8, EFLAGS:i32)
    // Emits: (SETGr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(5)) {
      SDNode *Result = Emit_303(N, X86::SETGr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 2:i8, EFLAGS:i32)
    // Emits: (SETBr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_303(N, X86::SETBr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 1:i8, EFLAGS:i32)
    // Emits: (SETAEr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(1)) {
      SDNode *Result = Emit_303(N, X86::SETAEr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 3:i8, EFLAGS:i32)
    // Emits: (SETBEr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(3)) {
      SDNode *Result = Emit_303(N, X86::SETBEr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 0:i8, EFLAGS:i32)
    // Emits: (SETAr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(0)) {
      SDNode *Result = Emit_303(N, X86::SETAr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 15:i8, EFLAGS:i32)
    // Emits: (SETSr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(15)) {
      SDNode *Result = Emit_303(N, X86::SETSr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 12:i8, EFLAGS:i32)
    // Emits: (SETNSr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(12)) {
      SDNode *Result = Emit_303(N, X86::SETNSr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 14:i8, EFLAGS:i32)
    // Emits: (SETPr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(14)) {
      SDNode *Result = Emit_303(N, X86::SETPr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 11:i8, EFLAGS:i32)
    // Emits: (SETNPr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(11)) {
      SDNode *Result = Emit_303(N, X86::SETNPr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 13:i8, EFLAGS:i32)
    // Emits: (SETOr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(13)) {
      SDNode *Result = Emit_303(N, X86::SETOr, MVT::i8);
      return Result;
    }

    // Pattern: (X86setcc:i8 10:i8, EFLAGS:i32)
    // Emits: (SETNOr:i8)
    // Pattern complexity = 8  cost = 1  size = 3
    if (CN1 == INT64_C(10)) {
      SDNode *Result = Emit_303(N, X86::SETNOr, MVT::i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SETCC_CARRY_i8(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_303(N, X86::SETB_C8r, MVT::i8);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SETCC_CARRY_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_303(N, X86::SETB_C16r, MVT::i16);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SETCC_CARRY_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_303(N, X86::SETB_C32r, MVT::i32);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SETCC_CARRY_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N0.getNode());
  if (Tmp0) {
    int64_t CN1 = Tmp0->getSExtValue();
    if (CN1 == INT64_C(2)) {
      SDNode *Result = Emit_303(N, X86::SETB_C64r, MVT::i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_304(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue Chain = CurDAG->getEntryNode();
  SDValue InFlag(0, 0);
  SDNode *ResNode = CurDAG->getCopyToReg(Chain, N->getDebugLoc(), X86::CL, N2, InFlag).getNode();
  Chain = SDValue(ResNode, 0);
  InFlag = SDValue(ResNode, 1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, N0, N1, InFlag);
}
SDNode *Select_X86ISD_SHLD_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);

  // Pattern: (X86shld:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$src3)
  // Emits: (SHLD16rri8:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$src3)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_284(N, X86::SHLD16rri8, MVT::i16);
    return Result;
  }

  // Pattern: (X86shld:i16 GR16:i16:$src1, GR16:i16:$src2, CL:i8)
  // Emits: (SHLD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_304(N, X86::SHLD16rrCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SHLD_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);

  // Pattern: (X86shld:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$src3)
  // Emits: (SHLD32rri8:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$src3)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_284(N, X86::SHLD32rri8, MVT::i32);
    return Result;
  }

  // Pattern: (X86shld:i32 GR32:i32:$src1, GR32:i32:$src2, CL:i8)
  // Emits: (SHLD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_304(N, X86::SHLD32rrCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SHLD_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);

  // Pattern: (X86shld:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$src3)
  // Emits: (SHLD64rri8:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$src3)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_284(N, X86::SHLD64rri8, MVT::i64);
    return Result;
  }

  // Pattern: (X86shld:i64 GR64:i64:$src1, GR64:i64:$src2, CL:i8)
  // Emits: (SHLD64rrCL:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_304(N, X86::SHLD64rrCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SHRD_i16(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);

  // Pattern: (X86shrd:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$src3)
  // Emits: (SHRD16rri8:i16 GR16:i16:$src1, GR16:i16:$src2, (imm:i8):$src3)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_284(N, X86::SHRD16rri8, MVT::i16);
    return Result;
  }

  // Pattern: (X86shrd:i16 GR16:i16:$src1, GR16:i16:$src2, CL:i8)
  // Emits: (SHRD16rrCL:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_304(N, X86::SHRD16rrCL, MVT::i16);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SHRD_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);

  // Pattern: (X86shrd:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$src3)
  // Emits: (SHRD32rri8:i32 GR32:i32:$src1, GR32:i32:$src2, (imm:i8):$src3)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_284(N, X86::SHRD32rri8, MVT::i32);
    return Result;
  }

  // Pattern: (X86shrd:i32 GR32:i32:$src1, GR32:i32:$src2, CL:i8)
  // Emits: (SHRD32rrCL:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_304(N, X86::SHRD32rrCL, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_SHRD_i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);

  // Pattern: (X86shrd:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$src3)
  // Emits: (SHRD64rri8:i64 GR64:i64:$src1, GR64:i64:$src2, (imm:i8):$src3)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N2.getNode()->getOpcode() == ISD::Constant &&
      N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_284(N, X86::SHRD64rri8, MVT::i64);
    return Result;
  }

  // Pattern: (X86shrd:i64 GR64:i64:$src1, GR64:i64:$src2, CL:i8)
  // Emits: (SHRD64rrCL:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if (N2.getValueType() == MVT::i8) {
    SDNode *Result = Emit_304(N, X86::SHRD64rrCL, MVT::i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_305(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::i32, N0, N0);
}
SDNode *Select_X86ISD_SMUL_i16(SDNode *N) {
  {
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant) {

            // Pattern: (X86smul_flag:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Emits: (IMUL16rmi8:i16 addr:iPTR:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i16immSExt8(N1.getNode())) {
              SDNode *Result = Emit_146(N, X86::IMUL16rmi8, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }

            // Pattern: (X86smul_flag:i16 (ld:i16 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, (imm:i16):$src2)
            // Emits: (IMUL16rmi:i16 addr:iPTR:$src1, (imm:i16):$src2)
            // Pattern complexity = 28  cost = 1  size = 3
            SDNode *Result = Emit_146(N, X86::IMUL16rmi, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86smul_flag:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (IMUL16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi16(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::IMUL16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86smul_flag:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1)
    // Emits: (IMUL16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::IMUL16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86smul_flag:i16 GR16:i16:$src1, 2:i16)
    // Emits: (ADD16rr:i16 GR16:i16:$src1, GR16:i16:$src1)
    // Pattern complexity = 10  cost = 1  size = 3
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(2)) {
          SDNode *Result = Emit_305(N, X86::ADD16rr, MVT::i16);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86smul_flag:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (IMUL16rri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::IMUL16rri8, MVT::i16);
        return Result;
      }

      // Pattern: (X86smul_flag:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (IMUL16rri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::IMUL16rri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86smul_flag:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (IMUL16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::IMUL16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_SMUL_i32(SDNode *N) {
  {
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant) {

            // Pattern: (X86smul_flag:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Emits: (IMUL32rmi8:i32 addr:iPTR:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i32immSExt8(N1.getNode())) {
              SDNode *Result = Emit_147(N, X86::IMUL32rmi8, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }

            // Pattern: (X86smul_flag:i32 (ld:i32 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, (imm:i32):$src2)
            // Emits: (IMUL32rmi:i32 addr:iPTR:$src1, (imm:i32):$src2)
            // Pattern complexity = 28  cost = 1  size = 3
            SDNode *Result = Emit_147(N, X86::IMUL32rmi, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86smul_flag:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (IMUL32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::IMUL32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86smul_flag:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1)
    // Emits: (IMUL32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::IMUL32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86smul_flag:i32 GR32:i32:$src1, 2:i32)
    // Emits: (ADD32rr:i32 GR32:i32:$src1, GR32:i32:$src1)
    // Pattern complexity = 10  cost = 1  size = 3
    {
      ConstantSDNode *Tmp0 = dyn_cast<ConstantSDNode>(N1.getNode());
      if (Tmp0) {
        int64_t CN1 = Tmp0->getSExtValue();
        if (CN1 == INT64_C(2)) {
          SDNode *Result = Emit_305(N, X86::ADD32rr, MVT::i32);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86smul_flag:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (IMUL32rri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::IMUL32rri8, MVT::i32);
        return Result;
      }

      // Pattern: (X86smul_flag:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (IMUL32rri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::IMUL32rri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86smul_flag:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (IMUL32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::IMUL32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_SMUL_i64(SDNode *N) {
  {
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDValue N1 = N->getOperand(1);
          if (N1.getNode()->getOpcode() == ISD::Constant) {

            // Pattern: (X86smul_flag:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
            // Emits: (IMUL64rmi8:i64 addr:iPTR:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i64immSExt8(N1.getNode())) {
              SDNode *Result = Emit_148(N, X86::IMUL64rmi8, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }

            // Pattern: (X86smul_flag:i64 (ld:i64 addr:iPTR:$src1)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
            // Emits: (IMUL64rmi32:i64 addr:iPTR:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
            // Pattern complexity = 29  cost = 1  size = 3
            if (Predicate_i64immSExt32(N1.getNode())) {
              SDNode *Result = Emit_148(N, X86::IMUL64rmi32, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86smul_flag:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (IMUL64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::IMUL64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86smul_flag:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src1)
    // Emits: (IMUL64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::IMUL64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86smul_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (IMUL64rri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::IMUL64rri8, MVT::i64);
        return Result;
      }

      // Pattern: (X86smul_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (IMUL64rri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::IMUL64rri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (X86smul_flag:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (IMUL64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::IMUL64rr, MVT::i64);
  return Result;
}

SDNode *Select_X86ISD_SUB_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86sub_flag:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
    // Emits: (SUB8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadi8(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_2(N, X86::SUB8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }

    // Pattern: (X86sub_flag:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (SUB8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::SUB8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (X86sub_flag:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (SUB8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB8rr, MVT::i8);
  return Result;
}

SDNode *Select_X86ISD_SUB_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86sub_flag:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (SUB16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_loadi16(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_2(N, X86::SUB16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86sub_flag:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (SUB16ri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::SUB16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (X86sub_flag:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (SUB16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::SUB16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86sub_flag:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (SUB16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_SUB_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86sub_flag:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (SUB32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_loadi32(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_2(N, X86::SUB32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86sub_flag:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (SUB32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::SUB32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (X86sub_flag:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (SUB32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::SUB32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86sub_flag:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (SUB32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_SUB_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);

    // Pattern: (X86sub_flag:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (SUB64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      SDValue Chain1 = N1.getNode()->getOperand(0);
      if (Predicate_unindexedload(N1.getNode()) &&
          Predicate_load(N1.getNode()) &&
          Predicate_loadi64(N1.getNode())) {
        SDValue N11 = N1.getNode()->getOperand(1);
        SDValue CPTmpN11_0;
        SDValue CPTmpN11_1;
        SDValue CPTmpN11_2;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
          SDNode *Result = Emit_2(N, X86::SUB64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86sub_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (SUB64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::SUB64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (X86sub_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (SUB64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::SUB64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (X86sub_flag:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (SUB64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::SUB64rr, MVT::i64);
  return Result;
}

DISABLE_INLINE SDNode *Emit_306(SDNode *N, unsigned Opc0, unsigned NumInputRootOps) {
  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);
  SmallVector<SDValue, 8> Ops0;
  SDValue Tmp1 = CurDAG->getTargetConstant(((unsigned) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i32);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  Ops0.push_back(N1);
  Ops0.push_back(Tmp1);
  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);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, &Ops0[0], Ops0.size());
}
SDNode *Select_X86ISD_TC_RETURN(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);

  // Pattern: (X86tcret:isVoid (tglobaladdr:i64):$dst, (imm:i32):$off)
  // Emits: (TCRETURNdi64:isVoid (tglobaladdr:i64):$dst, (imm:i32):$off)
  // Pattern complexity = 9  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_306(N, X86::TCRETURNdi64, 2);
      return Result;
    }
  }

  // Pattern: (X86tcret:isVoid (texternalsym:i64):$dst, (imm:i32):$off)
  // Emits: (TCRETURNdi64:isVoid (texternalsym:i64):$dst, (imm:i32):$off)
  // Pattern complexity = 9  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_306(N, X86::TCRETURNdi64, 2);
      return Result;
    }
  }

  // Pattern: (X86tcret:isVoid (tglobaladdr:i32):$dst, (imm:i32):$off)
  // Emits: (TCRETURNdi:isVoid (texternalsym:i32):$dst, (imm:i32):$off)
  // Pattern complexity = 9  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_306(N, X86::TCRETURNdi, 2);
      return Result;
    }
  }

  // Pattern: (X86tcret:isVoid (texternalsym:i32):$dst, (imm:i32):$off)
  // Emits: (TCRETURNdi:isVoid (texternalsym:i32):$dst, (imm:i32):$off)
  // Pattern complexity = 9  cost = 1  size = 3
  if (N1.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
    SDValue N2 = N->getOperand(2);
    if (N2.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_306(N, X86::TCRETURNdi, 2);
      return Result;
    }
  }
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {

    // Pattern: (X86tcret:isVoid GR64:i64:$dst, (imm:i32):$off)
    // Emits: (TCRETURNri64:isVoid GR64:i64:$dst, (imm:i32):$off)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_306(N, X86::TCRETURNri64, 2);
      return Result;
    }

    // Pattern: (X86tcret:isVoid GR32:i32:$dst, (imm:i32):$off)
    // Emits: (TCRETURNri:isVoid GR32:i32:$dst, (imm:i32):$off)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_306(N, X86::TCRETURNri, 2);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_307(SDNode *N, unsigned Opc0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  bool HasInFlag = (N->getOperand(N->getNumOperands()-1).getValueType() == MVT::Flag);
  SDValue InFlag(0, 0);
  if (HasInFlag) {
    InFlag = N->getOperand(N->getNumOperands()-1);
  }
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, 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;
}
SDNode *Select_X86ISD_TLSADDR(SDNode *N) {

  // Pattern: (X86tlsaddr:isVoid tls32addr:i32:$sym)
  // Emits: (TLS_addr32:isVoid tls32addr:i32:$sym)
  // Pattern complexity = 18  cost = 1  size = 3
  if ((!Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    if (SelectTLSADDRAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3) &&
        N1.getValueType() == MVT::i32) {
      SDNode *Result = Emit_307(N, X86::TLS_addr32, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3);
      return Result;
    }
  }

  // Pattern: (X86tlsaddr:isVoid tls64addr:i64:$sym)
  // Emits: (TLS_addr64:isVoid tls64addr:i64:$sym)
  // Pattern complexity = 18  cost = 1  size = 3
  if ((Subtarget->is64Bit())) {
    SDValue Chain = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    SDValue CPTmpN1_0;
    SDValue CPTmpN1_1;
    SDValue CPTmpN1_2;
    SDValue CPTmpN1_3;
    if (SelectTLSADDRAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3) &&
        N1.getValueType() == MVT::i64) {
      SDNode *Result = Emit_307(N, X86::TLS_addr64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_UCOMI(SDNode *N) {

  // Pattern: (X86ucomi:isVoid VR128:v4f32:$src1, (ld:v4f32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (Int_UCOMISSrm:isVoid VR128:v4f32:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::v4f32) {
          SDNode *Result = Emit_277(N, X86::Int_UCOMISSrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86ucomi:isVoid VR128:v2f64:$src1, (ld:v2f64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (Int_UCOMISDrm:isVoid VR128:v2f64:$src1, addr:iPTR:$src2)
  // Pattern complexity = 25  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::LOAD &&
        N1.hasOneUse() &&
        IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
      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;
        SDValue CPTmpN11_3;
        SDValue CPTmpN11_4;
        if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4) &&
            N0.getValueType() == MVT::v2f64) {
          SDNode *Result = Emit_277(N, X86::Int_UCOMISDrm, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86ucomi:isVoid VR128:v4f32:$src1, VR128:v4f32:$src2)
  // Emits: (Int_UCOMISSrr:isVoid VR128:v4f32:$src1, VR128:v4f32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v4f32) {
      SDNode *Result = Emit_254(N, X86::Int_UCOMISSrr);
      return Result;
    }
  }

  // Pattern: (X86ucomi:isVoid VR128:v2f64:$src1, VR128:v2f64:$src2)
  // Emits: (Int_UCOMISDrr:isVoid VR128:v2f64:$src1, VR128:v2f64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N0.getValueType() == MVT::v2f64) {
      SDNode *Result = Emit_254(N, X86::Int_UCOMISDrr);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_308(SDNode *N, unsigned Opc0, unsigned NumInputRootOps) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  SDValue N3 = N->getOperand(3);
  SmallVector<SDValue, 8> Ops0;
  SDValue Tmp1 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N2)->getZExtValue()), MVT::i64);
  SDValue Tmp2 = CurDAG->getTargetConstant(((uint64_t) cast<ConstantSDNode>(N3)->getZExtValue()), MVT::i64);
  Ops0.push_back(N1);
  Ops0.push_back(Tmp1);
  Ops0.push_back(Tmp2);
  for (unsigned i = NumInputRootOps + 1, e = N->getNumOperands(); i != e; ++i) {
    Ops0.push_back(N->getOperand(i));
  }
  Ops0.push_back(Chain);
  return CurDAG->SelectNodeTo(N, Opc0, MVT::Other, &Ops0[0], Ops0.size());
}
SDNode *Select_X86ISD_VASTART_SAVE_XMM_REGS(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue N2 = N->getOperand(2);
  if (N2.getNode()->getOpcode() == ISD::Constant) {
    SDValue N3 = N->getOperand(3);
    if (N3.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_308(N, X86::VASTART_SAVE_XMM_REGS, 3);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VSHL_v1i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_94(N, X86::MMX_PSLLQri, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VSHL_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_290(N, X86::PSLLDQri, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VSRL_v1i64(SDNode *N) {
  SDValue N0 = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  if (N1.getNode()->getOpcode() == ISD::Constant &&
      N1.getValueType() == MVT::i8) {
    SDNode *Result = Emit_94(N, X86::MMX_PSRLQri, MVT::v1i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VSRL_v2i64(SDNode *N) {
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant &&
        N1.getValueType() == MVT::i8) {
      SDNode *Result = Emit_290(N, X86::PSRLDQri, MVT::v2i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_309(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN1_0, SDValue &CPTmpN1_1, SDValue &CPTmpN1_2, SDValue &CPTmpN1_3, SDValue &CPTmpN1_4) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue Ops0[] = { CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4, Chain };
  return CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
}
SDNode *Select_X86ISD_VZEXT_LOAD_v2i64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDNode *Result = Emit_309(N, X86::MOVZQI2PQIrm, MVT::v2i64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VZEXT_LOAD_v2f64(SDNode *N) {
  SDValue Chain = N->getOperand(0);
  SDValue N1 = N->getOperand(1);
  SDValue CPTmpN1_0;
  SDValue CPTmpN1_1;
  SDValue CPTmpN1_2;
  SDValue CPTmpN1_3;
  SDValue CPTmpN1_4;
  if (SelectAddr(N, N1, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4)) {
    SDNode *Result = Emit_309(N, X86::MOVZSD2PDrm, MVT::v2f64, CPTmpN1_0, CPTmpN1_1, CPTmpN1_2, CPTmpN1_3, CPTmpN1_4);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_310(SDNode *N, unsigned Opc0, MVT::SimpleValueType VT0, SDValue &CPTmpN001_0, SDValue &CPTmpN001_1, SDValue &CPTmpN001_2, SDValue &CPTmpN001_3, SDValue &CPTmpN001_4) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Chain00 = N00.getNode()->getOperand(0);
  SDValue N001 = N00.getNode()->getOperand(1);
  MachineSDNode::mmo_iterator MemRefs0 = MF->allocateMemRefsArray(1);
  MemRefs0[0] = cast<MemSDNode>(N00.getNode())->getMemOperand();
  SDValue Ops0[] = { CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4, Chain00 };
  SDNode *ResNode = CurDAG->SelectNodeTo(N, Opc0, VT0, MVT::Other, Ops0, 6);
  cast<MachineSDNode>(ResNode)->setMemRefs(MemRefs0, MemRefs0 + 1);
  ReplaceUses(SDValue(N00.getNode(), 1), SDValue(ResNode, 1));
  return ResNode;
}
DISABLE_INLINE SDNode *Emit_311(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue Tmp1(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, N0, Tmp1);
}
SDNode *Select_X86ISD_VZEXT_MOVL_v2i32(SDNode *N) {

  // Pattern: (X86vzmovl:v2i32 (scalar_to_vector:v2i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))
  // Emits: (MMX_MOVZDI2PDIrm:v2i32 addr:iPTR:$src)
  // Pattern complexity = 48  cost = 1  size = 3
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_loadi32(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::i32) {
            SDNode *Result = Emit_310(N, X86::MMX_MOVZDI2PDIrm, MVT::v2i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (X86vzmovl:v2i32 (bitconvert:v2i32 (ld:v1i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
  // Emits: (MMX_MOVZDI2PDIrm:v2i32 addr:iPTR:$src)
  // Pattern complexity = 48  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::v1i64) {
            SDNode *Result = Emit_310(N, X86::MMX_MOVZDI2PDIrm, MVT::v2i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (X86vzmovl:v2i32 (scalar_to_vector:v2i32 GR32:i32:$src))
  // Emits: (MMX_MOVZDI2PDIrr:v2i32 GR32:i32:$src)
  // Pattern complexity = 21  cost = 1  size = 3
  if ((Subtarget->hasMMX())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getValueType() == MVT::i32) {
        SDNode *Result = Emit_160(N, X86::MMX_MOVZDI2PDIrr, MVT::v2i32);
        return Result;
      }
    }
  }

  // Pattern: (X86vzmovl:v2i32 VR64:v2i32:$src)
  // Emits: (MMX_PUNPCKLDQrr:v2i32 VR64:v8i8:$src, (MMX_V_SET0:v8i8))
  // Pattern complexity = 18  cost = 2  size = 6
  SDNode *Result = Emit_311(N, X86::MMX_V_SET0, X86::MMX_PUNPCKLDQrr, MVT::v8i8, MVT::v2i32);
  return Result;
}

DISABLE_INLINE SDNode *Emit_312(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);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp0, N0);
}
SDNode *Select_X86ISD_VZEXT_MOVL_v4i32(SDNode *N) {

  // Pattern: (X86vzmovl:v4i32 (scalar_to_vector:v4i32 (ld:i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>))
  // Emits: (MOVZDI2PDIrm:v4i32 addr:iPTR:$src)
  // Pattern complexity = 48  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_loadi32(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::i32) {
            SDNode *Result = Emit_310(N, X86::MOVZDI2PDIrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {

            // Pattern: (X86vzmovl:v4i32 (bitconvert:v4i32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
            // Emits: (MOVZDI2PDIrm:v4i32 addr:iPTR:$src)
            // Pattern complexity = 48  cost = 1  size = 3
            if (N00.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_310(N, X86::MOVZDI2PDIrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }

            // Pattern: (X86vzmovl:v4i32 (bitconvert:v4i32 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
            // Emits: (MOVZDI2PDIrm:v4i32 addr:iPTR:$src)
            // Pattern complexity = 48  cost = 1  size = 3
            if (N00.getValueType() == MVT::v2i64) {
              SDNode *Result = Emit_310(N, X86::MOVZDI2PDIrm, MVT::v4i32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }

    // Pattern: (X86vzmovl:v4i32 (ld:v4i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MOVZDI2PDIrm:v4i32 addr:iPTR:$src)
    // Pattern complexity = 45  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::MOVZDI2PDIrm, MVT::v4i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86vzmovl:v4i32 (scalar_to_vector:v4i32 GR32:i32:$src))
  // Emits: (MOVZDI2PDIrr:v4i32 GR32:i32:$src)
  // Pattern complexity = 21  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getValueType() == MVT::i32) {
        SDNode *Result = Emit_160(N, X86::MOVZDI2PDIrr, MVT::v4i32);
        return Result;
      }
    }
  }

  // Pattern: (X86vzmovl:v4i32 VR128:v4i32:$src)
  // Emits: (MOVLPSrr:v4i32 (V_SET0:v16i8), VR128:v16i8:$src)
  // Pattern complexity = 18  cost = 2  size = 6
  if ((Subtarget->hasSSE1())) {
    SDNode *Result = Emit_312(N, X86::V_SET0, X86::MOVLPSrr, MVT::v16i8, MVT::v4i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VZEXT_MOVL_v2i64(SDNode *N) {

  // Pattern: (X86vzmovl:v2i64 (scalar_to_vector:v2i64 (ld:i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>))
  // Emits: (MOVZQI2PQIrm:v2i64 addr:iPTR:$src)
  // Pattern complexity = 48  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode()) &&
            Predicate_loadi64(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::i64) {
            SDNode *Result = Emit_310(N, X86::MOVZQI2PQIrm, MVT::v2i64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4)) {

            // Pattern: (X86vzmovl:v2i64 (bitconvert:v2i64 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
            // Emits: (MOVZQI2PQIrm:v2i64 addr:iPTR:$src)
            // Pattern complexity = 48  cost = 1  size = 3
            if (N00.getValueType() == MVT::v4f32) {
              SDNode *Result = Emit_310(N, X86::MOVZQI2PQIrm, MVT::v2i64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }

            // Pattern: (X86vzmovl:v2i64 (bitconvert:v2i64 (ld:v4i32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
            // Emits: (MOVZPQILo2PQIrm:v2i64 addr:iPTR:$src)
            // Pattern complexity = 48  cost = 1  size = 3
            if (N00.getValueType() == MVT::v4i32) {
              SDNode *Result = Emit_310(N, X86::MOVZPQILo2PQIrm, MVT::v2i64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
              return Result;
            }
          }
        }
      }
    }
  }

  // Pattern: (X86vzmovl:v2i64 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (MOVZPQILo2PQIrm:v2i64 addr:iPTR:$src)
  // Pattern complexity = 45  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::MOVZPQILo2PQIrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }

  // Pattern: (X86vzmovl:v2i64 (ld:v2i64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (MOVZQI2PQIrm:v2i64 addr:iPTR:$src)
  // Pattern complexity = 45  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::MOVZQI2PQIrm, MVT::v2i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (X86vzmovl:v2i64 (scalar_to_vector:v2i64 GR64:i64:$src))
    // Emits: (MOVZQI2PQIrr:v2i64 GR64:i64:$src)
    // Pattern complexity = 21  cost = 1  size = 3
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getValueType() == MVT::i64) {
          SDNode *Result = Emit_160(N, X86::MOVZQI2PQIrr, MVT::v2i64);
          return Result;
        }
      }
    }

    // Pattern: (X86vzmovl:v2i64 VR128:v2i64:$src)
    // Emits: (MOVZPQILo2PQIrr:v2i64 VR128:v2i64:$src)
    // Pattern complexity = 18  cost = 1  size = 3
    SDNode *Result = Emit_72(N, X86::MOVZPQILo2PQIrr, MVT::v2i64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

DISABLE_INLINE SDNode *Emit_313(SDNode *N, unsigned Opc0, unsigned Opc1, MVT::SimpleValueType VT0, MVT::SimpleValueType VT1) {
  SDValue N0 = N->getOperand(0);
  SDValue N00 = N0.getNode()->getOperand(0);
  SDValue Tmp0(CurDAG->getMachineNode(Opc0, N->getDebugLoc(), VT0), 0);
  return CurDAG->SelectNodeTo(N, Opc1, VT1, Tmp0, N00);
}
SDNode *Select_X86ISD_VZEXT_MOVL_v4f32(SDNode *N) {

  // Pattern: (X86vzmovl:v4f32 (scalar_to_vector:v4f32 (ld:f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf32>>))
  // Emits: (MOVZSS2PSrm:v4f32 addr:iPTR:$src)
  // Pattern complexity = 48  cost = 1  size = 3
  if ((Subtarget->hasSSE1())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode()) &&
            Predicate_loadf32(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::f32) {
            SDNode *Result = Emit_310(N, X86::MOVZSS2PSrm, MVT::v4f32, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }
  }

  // Pattern: (X86vzmovl:v4f32 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
  // Emits: (MOVZSS2PSrm:v4f32 addr:iPTR:$src)
  // Pattern complexity = 25  cost = 1  size = 3
  {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::MOVZSS2PSrm, MVT::v4f32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE1())) {

    // Pattern: (X86vzmovl:v4f32 (scalar_to_vector:v4f32 FR32:f32:$src))
    // Emits: (MOVLSS2PSrr:v4f32 (V_SET0:v16i8), FR32:f32:$src)
    // Pattern complexity = 21  cost = 2  size = 6
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getValueType() == MVT::f32) {
          SDNode *Result = Emit_313(N, X86::V_SET0, X86::MOVLSS2PSrr, MVT::v16i8, MVT::v4f32);
          return Result;
        }
      }
    }

    // Pattern: (X86vzmovl:v4f32 VR128:v4f32:$src)
    // Emits: (MOVLPSrr:v4f32 (V_SET0:v16i8), VR128:v16i8:$src)
    // Pattern complexity = 18  cost = 2  size = 6
    SDNode *Result = Emit_312(N, X86::V_SET0, X86::MOVLPSrr, MVT::v16i8, MVT::v4f32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_VZEXT_MOVL_v2f64(SDNode *N) {

  // Pattern: (X86vzmovl:v2f64 (scalar_to_vector:v2f64 (ld:f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadf64>>))
  // Emits: (MOVZSD2PDrm:v2f64 addr:iPTR:$src)
  // Pattern complexity = 48  cost = 1  size = 3
  if ((Subtarget->hasSSE2())) {
    SDValue N0 = N->getOperand(0);
    if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode()) &&
            Predicate_loadf64(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::f64) {
            SDNode *Result = Emit_310(N, X86::MOVZSD2PDrm, MVT::v2f64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }
  }
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86vzmovl:v2f64 (bitconvert:v2f64 (ld:v4f32 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>))
    // Emits: (MOVZSD2PDrm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 48  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::BIT_CONVERT &&
        N0.hasOneUse()) {
      SDValue N00 = N0.getNode()->getOperand(0);
      if (N00.getNode()->getOpcode() == ISD::LOAD &&
          N00.hasOneUse() &&
          IsLegalAndProfitableToFold(N00.getNode(), N0.getNode(), N)) {
        SDValue Chain00 = N00.getNode()->getOperand(0);
        if (Predicate_unindexedload(N00.getNode()) &&
            Predicate_load(N00.getNode())) {
          SDValue N001 = N00.getNode()->getOperand(1);
          SDValue CPTmpN001_0;
          SDValue CPTmpN001_1;
          SDValue CPTmpN001_2;
          SDValue CPTmpN001_3;
          SDValue CPTmpN001_4;
          if (SelectAddr(N, N001, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4) &&
              N00.getValueType() == MVT::v4f32) {
            SDNode *Result = Emit_310(N, X86::MOVZSD2PDrm, MVT::v2f64, CPTmpN001_0, CPTmpN001_1, CPTmpN001_2, CPTmpN001_3, CPTmpN001_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86vzmovl:v2f64 (ld:v2f64 addr:iPTR:$src)<<P:Predicate_unindexedload>><<P:Predicate_load>>)
    // Emits: (MOVZSD2PDrm:v2f64 addr:iPTR:$src)
    // Pattern complexity = 45  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::LOAD &&
        N0.hasOneUse()) {
      SDValue Chain0 = N0.getNode()->getOperand(0);
      if (Predicate_unindexedload(N0.getNode()) &&
          Predicate_load(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_79(N, X86::MOVZSD2PDrm, MVT::v2f64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
  }
  if ((Subtarget->hasSSE2())) {

    // Pattern: (X86vzmovl:v2f64 (scalar_to_vector:v2f64 FR64:f64:$src))
    // Emits: (MOVLSD2PDrr:v2f64 (V_SET0:v16i8), FR64:f64:$src)
    // Pattern complexity = 21  cost = 2  size = 6
    {
      SDValue N0 = N->getOperand(0);
      if (N0.getNode()->getOpcode() == ISD::SCALAR_TO_VECTOR) {
        SDValue N00 = N0.getNode()->getOperand(0);
        if (N00.getValueType() == MVT::f64) {
          SDNode *Result = Emit_313(N, X86::V_SET0, X86::MOVLSD2PDrr, MVT::v16i8, MVT::v2f64);
          return Result;
        }
      }
    }

    // Pattern: (X86vzmovl:v2f64 VR128:v2f64:$src)
    // Emits: (MOVZPQILo2PQIrr:v2f64 VR128:v16i8:$src)
    // Pattern complexity = 3  cost = 1  size = 3
    SDNode *Result = Emit_72(N, X86::MOVZPQILo2PQIrr, MVT::v2f64);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_Wrapper_i32(SDNode *N) {
  SDValue N0 = N->getOperand(0);

  // Pattern: (X86Wrapper:i32 (tconstpool:i32):$dst)
  // Emits: (MOV32ri:i32 (tconstpool:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
    SDNode *Result = Emit_72(N, X86::MOV32ri, MVT::i32);
    return Result;
  }

  // Pattern: (X86Wrapper:i32 (tjumptable:i32):$dst)
  // Emits: (MOV32ri:i32 (tjumptable:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
    SDNode *Result = Emit_72(N, X86::MOV32ri, MVT::i32);
    return Result;
  }

  // Pattern: (X86Wrapper:i32 (tglobaltlsaddr:i32):$dst)
  // Emits: (MOV32ri:i32 (tglobaltlsaddr:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::TargetGlobalTLSAddress) {
    SDNode *Result = Emit_72(N, X86::MOV32ri, MVT::i32);
    return Result;
  }

  // Pattern: (X86Wrapper:i32 (tglobaladdr:i32):$dst)
  // Emits: (MOV32ri:i32 (tglobaladdr:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
    SDNode *Result = Emit_72(N, X86::MOV32ri, MVT::i32);
    return Result;
  }

  // Pattern: (X86Wrapper:i32 (texternalsym:i32):$dst)
  // Emits: (MOV32ri:i32 (texternalsym:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
    SDNode *Result = Emit_72(N, X86::MOV32ri, MVT::i32);
    return Result;
  }

  // Pattern: (X86Wrapper:i32 (tblockaddress:i32):$dst)
  // Emits: (MOV32ri:i32 (tblockaddress:i32):$dst)
  // Pattern complexity = 6  cost = 1  size = 3
  if (N0.getNode()->getOpcode() == ISD::TargetBlockAddress) {
    SDNode *Result = Emit_72(N, X86::MOV32ri, MVT::i32);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_Wrapper_i64(SDNode *N) {
  if ((TM.getCodeModel() != CodeModel::Small &&TM.getCodeModel() != CodeModel::Kernel)) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86Wrapper:i64 (tconstpool:i64):$dst)
    // Emits: (MOV64ri:i64 (tconstpool:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
      SDNode *Result = Emit_72(N, X86::MOV64ri, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tjumptable:i64):$dst)
    // Emits: (MOV64ri:i64 (tjumptable:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDNode *Result = Emit_72(N, X86::MOV64ri, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tglobaladdr:i64):$dst)
    // Emits: (MOV64ri:i64 (tglobaladdr:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_72(N, X86::MOV64ri, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (texternalsym:i64):$dst)
    // Emits: (MOV64ri:i64 (texternalsym:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_72(N, X86::MOV64ri, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tblockaddress:i64):$dst)
    // Emits: (MOV64ri:i64 (tblockaddress:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetBlockAddress) {
      SDNode *Result = Emit_72(N, X86::MOV64ri, MVT::i64);
      return Result;
    }
  }
  if ((TM.getCodeModel() == CodeModel::Small)) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86Wrapper:i64 (tconstpool:i64):$dst)
    // Emits: (MOV64ri64i32:i64 (tconstpool:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
      SDNode *Result = Emit_72(N, X86::MOV64ri64i32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tjumptable:i64):$dst)
    // Emits: (MOV64ri64i32:i64 (tjumptable:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDNode *Result = Emit_72(N, X86::MOV64ri64i32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tglobaladdr:i64):$dst)
    // Emits: (MOV64ri64i32:i64 (tglobaladdr:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_72(N, X86::MOV64ri64i32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (texternalsym:i64):$dst)
    // Emits: (MOV64ri64i32:i64 (texternalsym:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_72(N, X86::MOV64ri64i32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tblockaddress:i64):$dst)
    // Emits: (MOV64ri64i32:i64 (tblockaddress:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetBlockAddress) {
      SDNode *Result = Emit_72(N, X86::MOV64ri64i32, MVT::i64);
      return Result;
    }
  }
  if ((TM.getCodeModel() == CodeModel::Kernel)) {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86Wrapper:i64 (tconstpool:i64):$dst)
    // Emits: (MOV64ri32:i64 (tconstpool:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetConstantPool) {
      SDNode *Result = Emit_72(N, X86::MOV64ri32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tjumptable:i64):$dst)
    // Emits: (MOV64ri32:i64 (tjumptable:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetJumpTable) {
      SDNode *Result = Emit_72(N, X86::MOV64ri32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tglobaladdr:i64):$dst)
    // Emits: (MOV64ri32:i64 (tglobaladdr:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetGlobalAddress) {
      SDNode *Result = Emit_72(N, X86::MOV64ri32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (texternalsym:i64):$dst)
    // Emits: (MOV64ri32:i64 (texternalsym:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetExternalSymbol) {
      SDNode *Result = Emit_72(N, X86::MOV64ri32, MVT::i64);
      return Result;
    }

    // Pattern: (X86Wrapper:i64 (tblockaddress:i64):$dst)
    // Emits: (MOV64ri32:i64 (tblockaddress:i64):$dst)
    // Pattern complexity = 6  cost = 1  size = 3
    if (N0.getNode()->getOpcode() == ISD::TargetBlockAddress) {
      SDNode *Result = Emit_72(N, X86::MOV64ri32, MVT::i64);
      return Result;
    }
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_WrapperRIP_i64(SDNode *N) {
  SDValue CPTmpN_0;
  SDValue CPTmpN_1;
  SDValue CPTmpN_2;
  SDValue CPTmpN_3;
  if (SelectLEAAddr(N, SDValue(N, 0), CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3)) {
    SDNode *Result = Emit_7(N, X86::LEA64r, MVT::i64, CPTmpN_0, CPTmpN_1, CPTmpN_2, CPTmpN_3);
    return Result;
  }

  CannotYetSelect(N);
  return NULL;
}

SDNode *Select_X86ISD_XOR_i8(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86xor_flag:i8 GR8:i8:$src1, (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>)
    // Emits: (XOR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi8(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR8rm, MVT::i8, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86xor_flag:i8 (ld:i8 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi8>>, GR8:i8:$src1)
    // Emits: (XOR8rm:i8 GR8:i8:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi8(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR8rm, MVT::i8, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }

    // Pattern: (X86xor_flag:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Emits: (XOR8ri:i8 GR8:i8:$src1, (imm:i8):$src2)
    // Pattern complexity = 6  cost = 1  size = 3
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {
      SDNode *Result = Emit_3(N, X86::XOR8ri, MVT::i8);
      return Result;
    }
  }

  // Pattern: (X86xor_flag:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Emits: (XOR8rr:i8 GR8:i8:$src1, GR8:i8:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR8rr, MVT::i8);
  return Result;
}

SDNode *Select_X86ISD_XOR_i16(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86xor_flag:i16 GR16:i16:$src1, (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>)
    // Emits: (XOR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi16(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR16rm, MVT::i16, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86xor_flag:i16 (ld:i16 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi16>>, GR16:i16:$src1)
    // Emits: (XOR16rm:i16 GR16:i16:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi16(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR16rm, MVT::i16, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86xor_flag:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Emits: (XOR16ri8:i16 GR16:i16:$src1, (imm:i16)<<P:Predicate_i16immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i16immSExt8(N1.getNode())) {
        SDNode *Result = Emit_5(N, X86::XOR16ri8, MVT::i16);
        return Result;
      }

      // Pattern: (X86xor_flag:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Emits: (XOR16ri:i16 GR16:i16:$src1, (imm:i16):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_5(N, X86::XOR16ri, MVT::i16);
      return Result;
    }
  }

  // Pattern: (X86xor_flag:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Emits: (XOR16rr:i16 GR16:i16:$src1, GR16:i16:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR16rr, MVT::i16);
  return Result;
}

SDNode *Select_X86ISD_XOR_i32(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86xor_flag:i32 GR32:i32:$src1, (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>)
    // Emits: (XOR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_loadi32(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR32rm, MVT::i32, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86xor_flag:i32 (ld:i32 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_loadi32>>, GR32:i32:$src1)
    // Emits: (XOR32rm:i32 GR32:i32:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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_loadi32(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR32rm, MVT::i32, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86xor_flag:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Emits: (XOR32ri8:i32 GR32:i32:$src1, (imm:i32)<<P:Predicate_i32immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i32immSExt8(N1.getNode())) {
        SDNode *Result = Emit_8(N, X86::XOR32ri8, MVT::i32);
        return Result;
      }

      // Pattern: (X86xor_flag:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Emits: (XOR32ri:i32 GR32:i32:$src1, (imm:i32):$src2)
      // Pattern complexity = 6  cost = 1  size = 3
      SDNode *Result = Emit_8(N, X86::XOR32ri, MVT::i32);
      return Result;
    }
  }

  // Pattern: (X86xor_flag:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Emits: (XOR32rr:i32 GR32:i32:$src1, GR32:i32:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR32rr, MVT::i32);
  return Result;
}

SDNode *Select_X86ISD_XOR_i64(SDNode *N) {
  {
    SDValue N0 = N->getOperand(0);

    // Pattern: (X86xor_flag:i64 GR64:i64:$src1, (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>)
    // Emits: (XOR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    {
      SDValue N1 = N->getOperand(1);
      if (N1.getNode()->getOpcode() == ISD::LOAD &&
          N1.hasOneUse() &&
          IsLegalAndProfitableToFold(N1.getNode(), N, N)) {
        SDValue Chain1 = N1.getNode()->getOperand(0);
        if (Predicate_unindexedload(N1.getNode()) &&
            Predicate_load(N1.getNode()) &&
            Predicate_loadi64(N1.getNode())) {
          SDValue N11 = N1.getNode()->getOperand(1);
          SDValue CPTmpN11_0;
          SDValue CPTmpN11_1;
          SDValue CPTmpN11_2;
          SDValue CPTmpN11_3;
          SDValue CPTmpN11_4;
          if (SelectAddr(N, N11, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4)) {
            SDNode *Result = Emit_2(N, X86::XOR64rm, MVT::i64, CPTmpN11_0, CPTmpN11_1, CPTmpN11_2, CPTmpN11_3, CPTmpN11_4);
            return Result;
          }
        }
      }
    }

    // Pattern: (X86xor_flag:i64 (ld:i64 addr:iPTR:$src2)<<P:Predicate_unindexedload>><<P:Predicate_load>><<P:Predicate_loadi64>>, GR64:i64:$src1)
    // Emits: (XOR64rm:i64 GR64:i64:$src1, addr:iPTR:$src2)
    // Pattern complexity = 25  cost = 1  size = 3
    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()) &&
          Predicate_loadi64(N0.getNode())) {
        SDValue N01 = N0.getNode()->getOperand(1);
        SDValue CPTmpN01_0;
        SDValue CPTmpN01_1;
        SDValue CPTmpN01_2;
        SDValue CPTmpN01_3;
        SDValue CPTmpN01_4;
        if (SelectAddr(N, N01, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4)) {
          SDNode *Result = Emit_4(N, X86::XOR64rm, MVT::i64, CPTmpN01_0, CPTmpN01_1, CPTmpN01_2, CPTmpN01_3, CPTmpN01_4);
          return Result;
        }
      }
    }
    SDValue N1 = N->getOperand(1);
    if (N1.getNode()->getOpcode() == ISD::Constant) {

      // Pattern: (X86xor_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Emits: (XOR64ri8:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt8>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt8(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::XOR64ri8, MVT::i64);
        return Result;
      }

      // Pattern: (X86xor_flag:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Emits: (XOR64ri32:i64 GR64:i64:$src1, (imm:i64)<<P:Predicate_i64immSExt32>>:$src2)
      // Pattern complexity = 7  cost = 1  size = 3
      if (Predicate_i64immSExt32(N1.getNode())) {
        SDNode *Result = Emit_12(N, X86::XOR64ri32, MVT::i64);
        return Result;
      }
    }
  }

  // Pattern: (X86xor_flag:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Emits: (XOR64rr:i64 GR64:i64:$src1, GR64:i64:$src2)
  // Pattern complexity = 3  cost = 1  size = 3
  SDNode *Result = Emit_1(N, X86::XOR64rr, MVT::i64);
  return Result;
}

// 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 ISD::ADD: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ADD_i8(N);
    case MVT::i16:
      return Select_ISD_ADD_i16(N);
    case MVT::i32:
      return Select_ISD_ADD_i32(N);
    case MVT::i64:
      return Select_ISD_ADD_i64(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);
    case MVT::i64:
      return Select_ISD_ADDC_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ADDE: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ADDE_i8(N);
    case MVT::i16:
      return Select_ISD_ADDE_i16(N);
    case MVT::i32:
      return Select_ISD_ADDE_i32(N);
    case MVT::i64:
      return Select_ISD_ADDE_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::AND: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_AND_i8(N);
    case MVT::i16:
      return Select_ISD_AND_i16(N);
    case MVT::i32:
      return Select_ISD_AND_i32(N);
    case MVT::i64:
      return Select_ISD_AND_i64(N);
    case MVT::v1i64:
      return Select_ISD_AND_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_AND_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ANY_EXTEND: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_ANY_EXTEND_i16(N);
    case MVT::i32:
      return Select_ISD_ANY_EXTEND_i32(N);
    case MVT::i64:
      return Select_ISD_ANY_EXTEND_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_ADD: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ATOMIC_LOAD_ADD_i8(N);
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_ADD_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_ADD_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_ADD_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_AND: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ATOMIC_LOAD_AND_i8(N);
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_AND_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_AND_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_AND_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_MAX: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_MAX_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_MAX_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_MAX_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_MIN: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_MIN_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_MIN_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_MIN_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_NAND: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ATOMIC_LOAD_NAND_i8(N);
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_NAND_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_NAND_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_NAND_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_OR: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ATOMIC_LOAD_OR_i8(N);
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_OR_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_OR_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_OR_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_UMAX: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_UMAX_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_UMAX_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_UMAX_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_UMIN: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_UMIN_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_UMIN_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_UMIN_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_LOAD_XOR: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ATOMIC_LOAD_XOR_i8(N);
    case MVT::i16:
      return Select_ISD_ATOMIC_LOAD_XOR_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_LOAD_XOR_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_LOAD_XOR_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ATOMIC_SWAP: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ATOMIC_SWAP_i8(N);
    case MVT::i16:
      return Select_ISD_ATOMIC_SWAP_i16(N);
    case MVT::i32:
      return Select_ISD_ATOMIC_SWAP_i32(N);
    case MVT::i64:
      return Select_ISD_ATOMIC_SWAP_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::BIT_CONVERT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_BIT_CONVERT_i32(N);
    case MVT::i64:
      return Select_ISD_BIT_CONVERT_i64(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);
    case MVT::i64:
      return Select_ISD_BSWAP_i64(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);
    case MVT::v4f32:
      return Select_ISD_BUILD_VECTOR_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_BUILD_VECTOR_v2f64(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::Constant: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_Constant_i8(N);
    case MVT::i16:
      return Select_ISD_Constant_i16(N);
    case MVT::i32:
      return Select_ISD_Constant_i32(N);
    case MVT::i64:
      return Select_ISD_Constant_i64(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);
    case MVT::f80:
      return Select_ISD_ConstantFP_f80(N);
    default:
      break;
    }
    break;
  }
  case ISD::EXTRACT_VECTOR_ELT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_EXTRACT_VECTOR_ELT_i32(N);
    case MVT::i64:
      return Select_ISD_EXTRACT_VECTOR_ELT_i64(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);
    case MVT::f80:
      return Select_ISD_FABS_f80(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::f80:
      return Select_ISD_FADD_f80(N);
    case MVT::v4f32:
      return Select_ISD_FADD_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_FADD_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FCOS: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FCOS_f32(N);
    case MVT::f64:
      return Select_ISD_FCOS_f64(N);
    case MVT::f80:
      return Select_ISD_FCOS_f80(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);
    case MVT::f80:
      return Select_ISD_FDIV_f80(N);
    case MVT::v4f32:
      return Select_ISD_FDIV_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_FDIV_v2f64(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::f80:
      return Select_ISD_FMUL_f80(N);
    case MVT::v4f32:
      return Select_ISD_FMUL_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_FMUL_v2f64(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::f80:
      return Select_ISD_FNEG_f80(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_EXTEND: {
    switch (NVT) {
    case MVT::f64:
      return Select_ISD_FP_EXTEND_f64(N);
    case MVT::f80:
      return Select_ISD_FP_EXTEND_f80(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_ROUND: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FP_ROUND_f32(N);
    case MVT::f64:
      return Select_ISD_FP_ROUND_f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FP_TO_SINT: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_FP_TO_SINT_i32(N);
    case MVT::i64:
      return Select_ISD_FP_TO_SINT_i64(N);
    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::FSIN: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_FSIN_f32(N);
    case MVT::f64:
      return Select_ISD_FSIN_f64(N);
    case MVT::f80:
      return Select_ISD_FSIN_f80(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);
    case MVT::f80:
      return Select_ISD_FSQRT_f80(N);
    case MVT::v4f32:
      return Select_ISD_FSQRT_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_FSQRT_v2f64(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::f80:
      return Select_ISD_FSUB_f80(N);
    case MVT::v4f32:
      return Select_ISD_FSUB_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_FSUB_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::FrameIndex: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_FrameIndex_i32(N);
    case MVT::i64:
      return Select_ISD_FrameIndex_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::INSERT_VECTOR_ELT: {
    switch (NVT) {
    case MVT::v4i32:
      return Select_ISD_INSERT_VECTOR_ELT_v4i32(N);
    case MVT::v2i64:
      return Select_ISD_INSERT_VECTOR_ELT_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::INTRINSIC_VOID: {
    return Select_ISD_INTRINSIC_VOID(N);
    break;
  }
  case ISD::INTRINSIC_WO_CHAIN: {
    switch (NVT) {
    case MVT::i32:
      return Select_ISD_INTRINSIC_WO_CHAIN_i32(N);
    case MVT::i64:
      return Select_ISD_INTRINSIC_WO_CHAIN_i64(N);
    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::v4f32:
      return Select_ISD_INTRINSIC_WO_CHAIN_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_INTRINSIC_WO_CHAIN_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::INTRINSIC_W_CHAIN: {
    switch (NVT) {
    case MVT::v16i8:
      return Select_ISD_INTRINSIC_W_CHAIN_v16i8(N);
    case MVT::v2i64:
      return Select_ISD_INTRINSIC_W_CHAIN_v2i64(N);
    case MVT::v4f32:
      return Select_ISD_INTRINSIC_W_CHAIN_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_INTRINSIC_W_CHAIN_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::LOAD: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_LOAD_i8(N);
    case MVT::i16:
      return Select_ISD_LOAD_i16(N);
    case MVT::i32:
      return Select_ISD_LOAD_i32(N);
    case MVT::i64:
      return Select_ISD_LOAD_i64(N);
    case MVT::f32:
      return Select_ISD_LOAD_f32(N);
    case MVT::f64:
      return Select_ISD_LOAD_f64(N);
    case MVT::f80:
      return Select_ISD_LOAD_f80(N);
    case MVT::v4i32:
      return Select_ISD_LOAD_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_LOAD_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_LOAD_v2i64(N);
    case MVT::v4f32:
      return Select_ISD_LOAD_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_LOAD_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::MEMBARRIER: {
    return Select_ISD_MEMBARRIER(N);
    break;
  }
  case ISD::MUL: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_MUL_i8(N);
    case MVT::i16:
      return Select_ISD_MUL_i16(N);
    case MVT::i32:
      return Select_ISD_MUL_i32(N);
    case MVT::i64:
      return Select_ISD_MUL_i64(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::v4i32:
      return Select_ISD_MUL_v4i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::OR: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_OR_i8(N);
    case MVT::i16:
      return Select_ISD_OR_i16(N);
    case MVT::i32:
      return Select_ISD_OR_i32(N);
    case MVT::i64:
      return Select_ISD_OR_i64(N);
    case MVT::v1i64:
      return Select_ISD_OR_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_OR_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::PREFETCH: {
    return Select_ISD_PREFETCH(N);
    break;
  }
  case ISD::ROTL: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ROTL_i8(N);
    case MVT::i16:
      return Select_ISD_ROTL_i16(N);
    case MVT::i32:
      return Select_ISD_ROTL_i32(N);
    case MVT::i64:
      return Select_ISD_ROTL_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ROTR: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_ROTR_i8(N);
    case MVT::i16:
      return Select_ISD_ROTR_i16(N);
    case MVT::i32:
      return Select_ISD_ROTR_i32(N);
    case MVT::i64:
      return Select_ISD_ROTR_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SCALAR_TO_VECTOR: {
    switch (NVT) {
    case MVT::v2i32:
      return Select_ISD_SCALAR_TO_VECTOR_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_SCALAR_TO_VECTOR_v4i32(N);
    case MVT::v1i64:
      return Select_ISD_SCALAR_TO_VECTOR_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_SCALAR_TO_VECTOR_v2i64(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::i8:
      return Select_ISD_SHL_i8(N);
    case MVT::i16:
      return Select_ISD_SHL_i16(N);
    case MVT::i32:
      return Select_ISD_SHL_i32(N);
    case MVT::i64:
      return Select_ISD_SHL_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SIGN_EXTEND: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_SIGN_EXTEND_i16(N);
    case MVT::i32:
      return Select_ISD_SIGN_EXTEND_i32(N);
    case MVT::i64:
      return Select_ISD_SIGN_EXTEND_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SIGN_EXTEND_INREG: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_SIGN_EXTEND_INREG_i16(N);
    case MVT::i32:
      return Select_ISD_SIGN_EXTEND_INREG_i32(N);
    case MVT::i64:
      return Select_ISD_SIGN_EXTEND_INREG_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SINT_TO_FP: {
    switch (NVT) {
    case MVT::f32:
      return Select_ISD_SINT_TO_FP_f32(N);
    case MVT::f64:
      return Select_ISD_SINT_TO_FP_f64(N);
    case MVT::v4f32:
      return Select_ISD_SINT_TO_FP_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_SINT_TO_FP_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SRA: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_SRA_i8(N);
    case MVT::i16:
      return Select_ISD_SRA_i16(N);
    case MVT::i32:
      return Select_ISD_SRA_i32(N);
    case MVT::i64:
      return Select_ISD_SRA_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SRL: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_SRL_i8(N);
    case MVT::i16:
      return Select_ISD_SRL_i16(N);
    case MVT::i32:
      return Select_ISD_SRL_i32(N);
    case MVT::i64:
      return Select_ISD_SRL_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::STORE: {
    return Select_ISD_STORE(N);
    break;
  }
  case ISD::SUB: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_SUB_i8(N);
    case MVT::i16:
      return Select_ISD_SUB_i16(N);
    case MVT::i32:
      return Select_ISD_SUB_i32(N);
    case MVT::i64:
      return Select_ISD_SUB_i64(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);
    case MVT::i64:
      return Select_ISD_SUBC_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::SUBE: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_SUBE_i8(N);
    case MVT::i16:
      return Select_ISD_SUBE_i16(N);
    case MVT::i32:
      return Select_ISD_SUBE_i32(N);
    case MVT::i64:
      return Select_ISD_SUBE_i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::TRAP: {
    return Select_ISD_TRAP(N);
    break;
  }
  case ISD::TRUNCATE: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_TRUNCATE_i8(N);
    case MVT::i16:
      return Select_ISD_TRUNCATE_i16(N);
    case MVT::i32:
      return Select_ISD_TRUNCATE_i32(N);
    default:
      break;
    }
    break;
  }
  case ISD::VECTOR_SHUFFLE: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_ISD_VECTOR_SHUFFLE_v8i8(N);
    case MVT::v16i8:
      return Select_ISD_VECTOR_SHUFFLE_v16i8(N);
    case MVT::v4i16:
      return Select_ISD_VECTOR_SHUFFLE_v4i16(N);
    case MVT::v8i16:
      return Select_ISD_VECTOR_SHUFFLE_v8i16(N);
    case MVT::v2i32:
      return Select_ISD_VECTOR_SHUFFLE_v2i32(N);
    case MVT::v4i32:
      return Select_ISD_VECTOR_SHUFFLE_v4i32(N);
    case MVT::v2i64:
      return Select_ISD_VECTOR_SHUFFLE_v2i64(N);
    case MVT::v4f32:
      return Select_ISD_VECTOR_SHUFFLE_v4f32(N);
    case MVT::v2f64:
      return Select_ISD_VECTOR_SHUFFLE_v2f64(N);
    default:
      break;
    }
    break;
  }
  case ISD::XOR: {
    switch (NVT) {
    case MVT::i8:
      return Select_ISD_XOR_i8(N);
    case MVT::i16:
      return Select_ISD_XOR_i16(N);
    case MVT::i32:
      return Select_ISD_XOR_i32(N);
    case MVT::i64:
      return Select_ISD_XOR_i64(N);
    case MVT::v1i64:
      return Select_ISD_XOR_v1i64(N);
    case MVT::v2i64:
      return Select_ISD_XOR_v2i64(N);
    default:
      break;
    }
    break;
  }
  case ISD::ZERO_EXTEND: {
    switch (NVT) {
    case MVT::i16:
      return Select_ISD_ZERO_EXTEND_i16(N);
    case MVT::i32:
      return Select_ISD_ZERO_EXTEND_i32(N);
    case MVT::i64:
      return Select_ISD_ZERO_EXTEND_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::ADD: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_ADD_i8(N);
    case MVT::i16:
      return Select_X86ISD_ADD_i16(N);
    case MVT::i32:
      return Select_X86ISD_ADD_i32(N);
    case MVT::i64:
      return Select_X86ISD_ADD_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::AND: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_AND_i8(N);
    case MVT::i16:
      return Select_X86ISD_AND_i16(N);
    case MVT::i32:
      return Select_X86ISD_AND_i32(N);
    case MVT::i64:
      return Select_X86ISD_AND_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::BRCOND: {
    return Select_X86ISD_BRCOND(N);
    break;
  }
  case X86ISD::BSF: {
    switch (NVT) {
    case MVT::i16:
      return Select_X86ISD_BSF_i16(N);
    case MVT::i32:
      return Select_X86ISD_BSF_i32(N);
    case MVT::i64:
      return Select_X86ISD_BSF_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::BSR: {
    switch (NVT) {
    case MVT::i16:
      return Select_X86ISD_BSR_i16(N);
    case MVT::i32:
      return Select_X86ISD_BSR_i32(N);
    case MVT::i64:
      return Select_X86ISD_BSR_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::BT: {
    return Select_X86ISD_BT(N);
    break;
  }
  case X86ISD::CALL: {
    return Select_X86ISD_CALL(N);
    break;
  }
  case X86ISD::CMOV: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_CMOV_i8(N);
    case MVT::i16:
      return Select_X86ISD_CMOV_i16(N);
    case MVT::i32:
      return Select_X86ISD_CMOV_i32(N);
    case MVT::i64:
      return Select_X86ISD_CMOV_i64(N);
    case MVT::f32:
      return Select_X86ISD_CMOV_f32(N);
    case MVT::f64:
      return Select_X86ISD_CMOV_f64(N);
    case MVT::f80:
      return Select_X86ISD_CMOV_f80(N);
    case MVT::v1i64:
      return Select_X86ISD_CMOV_v1i64(N);
    case MVT::v2i64:
      return Select_X86ISD_CMOV_v2i64(N);
    case MVT::v4f32:
      return Select_X86ISD_CMOV_v4f32(N);
    case MVT::v2f64:
      return Select_X86ISD_CMOV_v2f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::CMP: {
    return Select_X86ISD_CMP(N);
    break;
  }
  case X86ISD::CMPPD: {
    switch (NVT) {
    case MVT::v2i64:
      return Select_X86ISD_CMPPD_v2i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::CMPPS: {
    switch (NVT) {
    case MVT::v4i32:
      return Select_X86ISD_CMPPS_v4i32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::COMI: {
    return Select_X86ISD_COMI(N);
    break;
  }
  case X86ISD::DEC: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_DEC_i8(N);
    case MVT::i16:
      return Select_X86ISD_DEC_i16(N);
    case MVT::i32:
      return Select_X86ISD_DEC_i32(N);
    case MVT::i64:
      return Select_X86ISD_DEC_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::EH_RETURN: {
    return Select_X86ISD_EH_RETURN(N);
    break;
  }
  case X86ISD::FAND: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FAND_f32(N);
    case MVT::f64:
      return Select_X86ISD_FAND_f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FILD: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FILD_f32(N);
    case MVT::f64:
      return Select_X86ISD_FILD_f64(N);
    case MVT::f80:
      return Select_X86ISD_FILD_f80(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FILD_FLAG: {
    switch (NVT) {
    case MVT::f64:
      return Select_X86ISD_FILD_FLAG_f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FLD: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FLD_f32(N);
    case MVT::f64:
      return Select_X86ISD_FLD_f64(N);
    case MVT::f80:
      return Select_X86ISD_FLD_f80(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FMAX: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FMAX_f32(N);
    case MVT::f64:
      return Select_X86ISD_FMAX_f64(N);
    case MVT::v4f32:
      return Select_X86ISD_FMAX_v4f32(N);
    case MVT::v2f64:
      return Select_X86ISD_FMAX_v2f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FMIN: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FMIN_f32(N);
    case MVT::f64:
      return Select_X86ISD_FMIN_f64(N);
    case MVT::v4f32:
      return Select_X86ISD_FMIN_v4f32(N);
    case MVT::v2f64:
      return Select_X86ISD_FMIN_v2f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FNSTCW16m: {
    return Select_X86ISD_FNSTCW16m(N);
    break;
  }
  case X86ISD::FOR: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FOR_f32(N);
    case MVT::f64:
      return Select_X86ISD_FOR_f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FP_TO_INT16_IN_MEM: {
    return Select_X86ISD_FP_TO_INT16_IN_MEM(N);
    break;
  }
  case X86ISD::FP_TO_INT32_IN_MEM: {
    return Select_X86ISD_FP_TO_INT32_IN_MEM(N);
    break;
  }
  case X86ISD::FP_TO_INT64_IN_MEM: {
    return Select_X86ISD_FP_TO_INT64_IN_MEM(N);
    break;
  }
  case X86ISD::FRCP: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FRCP_f32(N);
    case MVT::v4f32:
      return Select_X86ISD_FRCP_v4f32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FRSQRT: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FRSQRT_f32(N);
    case MVT::v4f32:
      return Select_X86ISD_FRSQRT_v4f32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FSRL: {
    switch (NVT) {
    case MVT::v2f64:
      return Select_X86ISD_FSRL_v2f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::FST: {
    return Select_X86ISD_FST(N);
    break;
  }
  case X86ISD::FXOR: {
    switch (NVT) {
    case MVT::f32:
      return Select_X86ISD_FXOR_f32(N);
    case MVT::f64:
      return Select_X86ISD_FXOR_f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::INC: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_INC_i8(N);
    case MVT::i16:
      return Select_X86ISD_INC_i16(N);
    case MVT::i32:
      return Select_X86ISD_INC_i32(N);
    case MVT::i64:
      return Select_X86ISD_INC_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::INSERTPS: {
    switch (NVT) {
    case MVT::v4f32:
      return Select_X86ISD_INSERTPS_v4f32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::LCMPXCHG8_DAG: {
    return Select_X86ISD_LCMPXCHG8_DAG(N);
    break;
  }
  case X86ISD::LCMPXCHG_DAG: {
    return Select_X86ISD_LCMPXCHG_DAG(N);
    break;
  }
  case X86ISD::MOVQ2DQ: {
    switch (NVT) {
    case MVT::v2i64:
      return Select_X86ISD_MOVQ2DQ_v2i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::MUL_IMM: {
    switch (NVT) {
    case MVT::i32:
      return Select_X86ISD_MUL_IMM_i32(N);
    case MVT::i64:
      return Select_X86ISD_MUL_IMM_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::OR: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_OR_i8(N);
    case MVT::i16:
      return Select_X86ISD_OR_i16(N);
    case MVT::i32:
      return Select_X86ISD_OR_i32(N);
    case MVT::i64:
      return Select_X86ISD_OR_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPEQB: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_X86ISD_PCMPEQB_v8i8(N);
    case MVT::v16i8:
      return Select_X86ISD_PCMPEQB_v16i8(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPEQD: {
    switch (NVT) {
    case MVT::v2i32:
      return Select_X86ISD_PCMPEQD_v2i32(N);
    case MVT::v4i32:
      return Select_X86ISD_PCMPEQD_v4i32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPEQQ: {
    switch (NVT) {
    case MVT::v2i64:
      return Select_X86ISD_PCMPEQQ_v2i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPEQW: {
    switch (NVT) {
    case MVT::v4i16:
      return Select_X86ISD_PCMPEQW_v4i16(N);
    case MVT::v8i16:
      return Select_X86ISD_PCMPEQW_v8i16(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPGTB: {
    switch (NVT) {
    case MVT::v8i8:
      return Select_X86ISD_PCMPGTB_v8i8(N);
    case MVT::v16i8:
      return Select_X86ISD_PCMPGTB_v16i8(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPGTD: {
    switch (NVT) {
    case MVT::v2i32:
      return Select_X86ISD_PCMPGTD_v2i32(N);
    case MVT::v4i32:
      return Select_X86ISD_PCMPGTD_v4i32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPGTQ: {
    switch (NVT) {
    case MVT::v2i64:
      return Select_X86ISD_PCMPGTQ_v2i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PCMPGTW: {
    switch (NVT) {
    case MVT::v4i16:
      return Select_X86ISD_PCMPGTW_v4i16(N);
    case MVT::v8i16:
      return Select_X86ISD_PCMPGTW_v8i16(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PEXTRB: {
    switch (NVT) {
    case MVT::i32:
      return Select_X86ISD_PEXTRB_i32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PEXTRW: {
    switch (NVT) {
    case MVT::i32:
      return Select_X86ISD_PEXTRW_i32(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PINSRB: {
    switch (NVT) {
    case MVT::v16i8:
      return Select_X86ISD_PINSRB_v16i8(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PINSRW: {
    switch (NVT) {
    case MVT::v4i16:
      return Select_X86ISD_PINSRW_v4i16(N);
    case MVT::v8i16:
      return Select_X86ISD_PINSRW_v8i16(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PSHUFB: {
    switch (NVT) {
    case MVT::v16i8:
      return Select_X86ISD_PSHUFB_v16i8(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::PTEST: {
    return Select_X86ISD_PTEST(N);
    break;
  }
  case X86ISD::RDTSC_DAG: {
    return Select_X86ISD_RDTSC_DAG(N);
    break;
  }
  case X86ISD::REP_MOVS: {
    return Select_X86ISD_REP_MOVS(N);
    break;
  }
  case X86ISD::REP_STOS: {
    return Select_X86ISD_REP_STOS(N);
    break;
  }
  case X86ISD::RET_FLAG: {
    return Select_X86ISD_RET_FLAG(N);
    break;
  }
  case X86ISD::SETCC: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_SETCC_i8(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::SETCC_CARRY: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_SETCC_CARRY_i8(N);
    case MVT::i16:
      return Select_X86ISD_SETCC_CARRY_i16(N);
    case MVT::i32:
      return Select_X86ISD_SETCC_CARRY_i32(N);
    case MVT::i64:
      return Select_X86ISD_SETCC_CARRY_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::SHLD: {
    switch (NVT) {
    case MVT::i16:
      return Select_X86ISD_SHLD_i16(N);
    case MVT::i32:
      return Select_X86ISD_SHLD_i32(N);
    case MVT::i64:
      return Select_X86ISD_SHLD_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::SHRD: {
    switch (NVT) {
    case MVT::i16:
      return Select_X86ISD_SHRD_i16(N);
    case MVT::i32:
      return Select_X86ISD_SHRD_i32(N);
    case MVT::i64:
      return Select_X86ISD_SHRD_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::SMUL: {
    switch (NVT) {
    case MVT::i16:
      return Select_X86ISD_SMUL_i16(N);
    case MVT::i32:
      return Select_X86ISD_SMUL_i32(N);
    case MVT::i64:
      return Select_X86ISD_SMUL_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::SUB: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_SUB_i8(N);
    case MVT::i16:
      return Select_X86ISD_SUB_i16(N);
    case MVT::i32:
      return Select_X86ISD_SUB_i32(N);
    case MVT::i64:
      return Select_X86ISD_SUB_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::TC_RETURN: {
    return Select_X86ISD_TC_RETURN(N);
    break;
  }
  case X86ISD::TLSADDR: {
    return Select_X86ISD_TLSADDR(N);
    break;
  }
  case X86ISD::UCOMI: {
    return Select_X86ISD_UCOMI(N);
    break;
  }
  case X86ISD::VASTART_SAVE_XMM_REGS: {
    return Select_X86ISD_VASTART_SAVE_XMM_REGS(N);
    break;
  }
  case X86ISD::VSHL: {
    switch (NVT) {
    case MVT::v1i64:
      return Select_X86ISD_VSHL_v1i64(N);
    case MVT::v2i64:
      return Select_X86ISD_VSHL_v2i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::VSRL: {
    switch (NVT) {
    case MVT::v1i64:
      return Select_X86ISD_VSRL_v1i64(N);
    case MVT::v2i64:
      return Select_X86ISD_VSRL_v2i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::VZEXT_LOAD: {
    switch (NVT) {
    case MVT::v2i64:
      return Select_X86ISD_VZEXT_LOAD_v2i64(N);
    case MVT::v2f64:
      return Select_X86ISD_VZEXT_LOAD_v2f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::VZEXT_MOVL: {
    switch (NVT) {
    case MVT::v2i32:
      return Select_X86ISD_VZEXT_MOVL_v2i32(N);
    case MVT::v4i32:
      return Select_X86ISD_VZEXT_MOVL_v4i32(N);
    case MVT::v2i64:
      return Select_X86ISD_VZEXT_MOVL_v2i64(N);
    case MVT::v4f32:
      return Select_X86ISD_VZEXT_MOVL_v4f32(N);
    case MVT::v2f64:
      return Select_X86ISD_VZEXT_MOVL_v2f64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::Wrapper: {
    switch (NVT) {
    case MVT::i32:
      return Select_X86ISD_Wrapper_i32(N);
    case MVT::i64:
      return Select_X86ISD_Wrapper_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::WrapperRIP: {
    switch (NVT) {
    case MVT::i64:
      return Select_X86ISD_WrapperRIP_i64(N);
    default:
      break;
    }
    break;
  }
  case X86ISD::XOR: {
    switch (NVT) {
    case MVT::i8:
      return Select_X86ISD_XOR_i8(N);
    case MVT::i16:
      return Select_X86ISD_XOR_i16(N);
    case MVT::i32:
      return Select_X86ISD_XOR_i32(N);
    case MVT::i64:
      return Select_X86ISD_XOR_i64(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;
}