[SystemZ] Use MVC for memcpy
[oota-llvm.git] / lib / Target / SystemZ / SystemZSelectionDAGInfo.cpp
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 }