1//===-- llvm/lib/Target/NVPTX/NVPTXLowerAggrCopies.h ------------*- C++ -*-===// 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 contains the declaration of the NVIDIA specific lowering of 11// aggregate copies 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef NVPTX_LOWER_AGGR_COPIES_H 16#define NVPTX_LOWER_AGGR_COPIES_H 17 18#include "llvm/CodeGen/MachineFunctionAnalysis.h" 19#include "llvm/IR/DataLayout.h" 20#include "llvm/Pass.h" 21 22namespace llvm { 23 24// actual analysis class, which is a functionpass 25struct NVPTXLowerAggrCopies : public FunctionPass { 26 static char ID; 27 28 NVPTXLowerAggrCopies() : FunctionPass(ID) {} 29 30 void getAnalysisUsage(AnalysisUsage &AU) const override { 31 AU.addRequired<DataLayoutPass>(); 32 AU.addPreserved("stack-protector"); 33 AU.addPreserved<MachineFunctionAnalysis>(); 34 } 35 36 bool runOnFunction(Function &F) override; 37 38 static const unsigned MaxAggrCopySize = 128; 39 40 const char *getPassName() const override { 41 return "Lower aggregate copies/intrinsics into loops"; 42 } 43}; 44 45extern FunctionPass *createLowerAggrCopies(); 46} 47 48#endif 49