Home | History | Annotate | Download | only in Hexagon
      1 //===-- HexagonSelectionDAGInfo.cpp - Hexagon 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 HexagonSelectionDAGInfo class.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #define DEBUG_TYPE "hexagon-selectiondag-info"
     15 #include "HexagonTargetMachine.h"
     16 using namespace llvm;
     17 
     18 bool llvm::flag_aligned_memcpy;
     19 
     20 HexagonSelectionDAGInfo::HexagonSelectionDAGInfo(const HexagonTargetMachine
     21                                                  &TM)
     22   : TargetSelectionDAGInfo(TM) {
     23 }
     24 
     25 HexagonSelectionDAGInfo::~HexagonSelectionDAGInfo() {
     26 }
     27 
     28 SDValue
     29 HexagonSelectionDAGInfo::
     30 EmitTargetCodeForMemcpy(SelectionDAG &DAG, DebugLoc dl, SDValue Chain,
     31                         SDValue Dst, SDValue Src, SDValue Size, unsigned Align,
     32                         bool isVolatile, bool AlwaysInline,
     33                         MachinePointerInfo DstPtrInfo,
     34                         MachinePointerInfo SrcPtrInfo) const {
     35   flag_aligned_memcpy = false;
     36   if ((Align & 0x3) == 0) {
     37     ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
     38     if (ConstantSize) {
     39       uint64_t SizeVal = ConstantSize->getZExtValue();
     40       if ((SizeVal > 32) && ((SizeVal % 8) == 0))
     41         flag_aligned_memcpy = true;
     42     }
     43   }
     44 
     45   return SDValue();
     46 }
     47