44 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- BPFSelectionDAGInfo.cpp - BPF SelectionDAG Info -------------------===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| //
 | |
| // This file implements the BPFSelectionDAGInfo class.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| #include "BPFTargetMachine.h"
 | |
| #include "llvm/CodeGen/SelectionDAG.h"
 | |
| #include "llvm/IR/DerivedTypes.h"
 | |
| using namespace llvm;
 | |
| 
 | |
| #define DEBUG_TYPE "bpf-selectiondag-info"
 | |
| 
 | |
| SDValue BPFSelectionDAGInfo::EmitTargetCodeForMemcpy(
 | |
|     SelectionDAG &DAG, const SDLoc &dl, SDValue Chain, SDValue Dst, SDValue Src,
 | |
|     SDValue Size, unsigned Align, bool isVolatile, bool AlwaysInline,
 | |
|     MachinePointerInfo DstPtrInfo, MachinePointerInfo SrcPtrInfo) const {
 | |
|   // Requires the copy size to be a constant.
 | |
|   ConstantSDNode *ConstantSize = dyn_cast<ConstantSDNode>(Size);
 | |
|   if (!ConstantSize)
 | |
|     return SDValue();
 | |
| 
 | |
|   unsigned CopyLen = ConstantSize->getZExtValue();
 | |
|   unsigned StoresNumEstimate = alignTo(CopyLen, Align) >> Log2_32(Align);
 | |
|   // Impose the same copy length limit as MaxStoresPerMemcpy.
 | |
|   if (StoresNumEstimate > getCommonMaxStoresPerMemFunc())
 | |
|     return SDValue();
 | |
| 
 | |
|   SDVTList VTs = DAG.getVTList(MVT::Other, MVT::Glue);
 | |
| 
 | |
|   Dst = DAG.getNode(BPFISD::MEMCPY, dl, VTs, Chain, Dst, Src,
 | |
|                     DAG.getConstant(CopyLen, dl, MVT::i64),
 | |
|                     DAG.getConstant(Align, dl, MVT::i64));
 | |
| 
 | |
|   return Dst.getValue(0);
 | |
| }
 |