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, SDLoc 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