1b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===-- HexagonSelectionDAGInfo.cpp - Hexagon SelectionDAG Info -----------===// 2b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 3b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// The LLVM Compiler Infrastructure 4b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 5b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file is distributed under the University of Illinois Open Source 6b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// License. See LICENSE.TXT for details. 7b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 8b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 9b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 10b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// This file implements the HexagonSelectionDAGInfo class. 11b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum// 12b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum//===----------------------------------------------------------------------===// 13b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 14b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum#include "HexagonTargetMachine.h" 15b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumusing namespace llvm; 16b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 17dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines#define DEBUG_TYPE "hexagon-selectiondag-info" 18dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 19b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicumbool llvm::flag_aligned_memcpy; 20b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 21cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesHexagonSelectionDAGInfo::HexagonSelectionDAGInfo(const DataLayout &DL) 22cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines : TargetSelectionDAGInfo(&DL) {} 23b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 24b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonSelectionDAGInfo::~HexagonSelectionDAGInfo() { 25b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} 26b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 27b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumSDValue 28b4b54153ad760c69a00a08531abef4ed434a5092Tony LinthicumHexagonSelectionDAGInfo:: 29ac6d9bec671252dd1e596fa71180ff6b39d06b5dAndrew TrickEmitTargetCodeForMemcpy(SelectionDAG &DAG, SDLoc dl, SDValue Chain, 30b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum SDValue Dst, SDValue Src, SDValue Size, unsigned Align, 31b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum bool isVolatile, bool AlwaysInline, 32b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MachinePointerInfo DstPtrInfo, 33b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum MachinePointerInfo SrcPtrInfo) const { 34b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum flag_aligned_memcpy = false; 35b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum if ((Align & 0x3) == 0) { 36b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size); 37b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum if (ConstantSize) { 38b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum uint64_t SizeVal = ConstantSize->getZExtValue(); 39b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum if ((SizeVal > 32) && ((SizeVal % 8) == 0)) 40b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum flag_aligned_memcpy = true; 41b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 42b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum } 43b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum 44b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum return SDValue(); 45b4b54153ad760c69a00a08531abef4ed434a5092Tony Linthicum} 46