1 //===-- SystemZSelectionDAGInfo.cpp - SystemZ SelectionDAG Info -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the SystemZSelectionDAGInfo class. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #define DEBUG_TYPE "systemz-selectiondag-info" 15 #include "SystemZTargetMachine.h" 16 #include "llvm/CodeGen/SelectionDAG.h" 17 18 using namespace llvm; 19 20 SystemZSelectionDAGInfo:: 21 SystemZSelectionDAGInfo(const SystemZTargetMachine &TM) 22 : TargetSelectionDAGInfo(TM) { 23 } 24 25 SystemZSelectionDAGInfo::~SystemZSelectionDAGInfo() { 26 } 27 28 SDValue SystemZSelectionDAGInfo:: 29 EmitTargetCodeForMemcpy(SelectionDAG &DAG, SDLoc DL, SDValue Chain, 30 SDValue Dst, SDValue Src, SDValue Size, unsigned Align, 31 bool IsVolatile, bool AlwaysInline, 32 MachinePointerInfo DstPtrInfo, 33 MachinePointerInfo SrcPtrInfo) const { 34 if (IsVolatile) 35 return SDValue(); 36 37 if (ConstantSDNode *CSize = dyn_cast<ConstantSDNode>(Size)) { 38 uint64_t Bytes = CSize->getZExtValue(); 39 if (Bytes >= 1 && Bytes <= 0x100) { 40 // A single MVC. 41 return DAG.getNode(SystemZISD::MVC, DL, MVT::Other, 42 Chain, Dst, Src, Size); 43 } 44 } 45 return SDValue(); 46 } 47