diff options
Diffstat (limited to 'src/gallium/drivers/radeon/AMDILMachineFunctionInfo.h')
-rw-r--r-- | src/gallium/drivers/radeon/AMDILMachineFunctionInfo.h | 422 |
1 files changed, 0 insertions, 422 deletions
diff --git a/src/gallium/drivers/radeon/AMDILMachineFunctionInfo.h b/src/gallium/drivers/radeon/AMDILMachineFunctionInfo.h deleted file mode 100644 index 45f57518184..00000000000 --- a/src/gallium/drivers/radeon/AMDILMachineFunctionInfo.h +++ /dev/null @@ -1,422 +0,0 @@ -//== AMDILMachineFunctionInfo.h - AMD il Machine Function Info -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//==-----------------------------------------------------------------------===// -// -// This file declares AMDIL-specific per-machine-function information -// -//===----------------------------------------------------------------------===// -#ifndef _AMDILMACHINEFUNCTIONINFO_H_ -#define _AMDILMACHINEFUNCTIONINFO_H_ -#include "AMDIL.h" -#include "AMDILDevice.h" -#include "AMDILKernel.h" -#include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/DenseSet.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringMap.h" -#include "llvm/ADT/ValueMap.h" -#include "llvm/CodeGen/MachineBasicBlock.h" -#include "llvm/CodeGen/MachineFunction.h" -#include "llvm/Function.h" - -#include <map> -#include <set> -#include <string> - -namespace llvm -{ - class AMDILSubtarget; - class PrintfInfo { - uint32_t mPrintfID; - SmallVector<uint32_t, DEFAULT_VEC_SLOTS> mOperands; - public: - void addOperand(size_t idx, uint32_t size); - uint32_t getPrintfID(); - void setPrintfID(uint32_t idx); - size_t getNumOperands(); - uint32_t getOperandID(uint32_t idx); - }; // class PrintfInfo - - enum NameDecorationStyle - { - None, - StdCall, - FastCall - }; - typedef struct SamplerInfoRec { - std::string name; // The name of the sampler - uint32_t val; // The value of the sampler - uint32_t idx; // The sampler resource id - } SamplerInfo; - // Some typedefs that will help with using the various iterators - // of the machine function info class. - typedef std::map<uint32_t, uint32_t>::iterator lit32_iterator; - typedef std::map<uint64_t, uint32_t>::iterator lit64_iterator; - typedef std::map<std::pair<uint64_t, uint64_t>, uint32_t>::iterator - lit128_iterator; - typedef StringMap<SamplerInfo>::iterator sampler_iterator; - typedef DenseSet<uint32_t>::iterator func_iterator; - typedef DenseSet<uint32_t>::iterator intr_iterator; - typedef DenseSet<uint32_t>::iterator uav_iterator; - typedef DenseSet<uint32_t>::iterator read_image2d_iterator; - typedef DenseSet<uint32_t>::iterator read_image3d_iterator; - typedef DenseSet<uint32_t>::iterator write_image2d_iterator; - typedef DenseSet<uint32_t>::iterator write_image3d_iterator; - typedef DenseSet<const char*>::iterator error_iterator; - typedef std::map<std::string, PrintfInfo*>::iterator printf_iterator; - typedef std::set<std::string>::iterator func_md_iterator; - typedef std::vector<std::string>::iterator kernel_md_iterator; - // AMDILMachineFunctionInfo - This class is - // derived from MachineFunction private - // amdil target-specific information for each MachineFunction - class AMDILMachineFunctionInfo : public MachineFunctionInfo - { - // CalleeSavedFrameSize - Size of the callee-saved - // register portion of the - // stack frame in bytes. - unsigned int CalleeSavedFrameSize; - // BytesToPopOnReturn - Number of bytes function pops on return. - // Used on windows platform for stdcall & fastcall name decoration - unsigned int BytesToPopOnReturn; - // DecorationStyle - If the function requires additional - // name decoration, - // DecorationStyle holds the right way to do so. - NameDecorationStyle DecorationStyle; - // ReturnAddrIndex - FrameIndex for return slot. - int ReturnAddrIndex; - - // TailCallReturnAddrDelta - Delta the ReturnAddr stack slot is moved - // Used for creating an area before the register spill area - // on the stack - // the returnaddr can be savely move to this area - int TailCallReturnAddrDelta; - - // SRetReturnReg - Some subtargets require that sret lowering includes - // returning the value of the returned struct in a register. - // This field holds the virtual register into which the sret - // argument is passed. - unsigned int SRetReturnReg; - - // UsesLocal - Specifies that this function uses LDS memory and - // that it needs to be allocated. - bool UsesLDS; - - // LDSArg - Flag that specifies if this function has an Local - // argument or not - bool LDSArg; - - // UsesGDS - Specifies that this function uses GDS memory and - // that it needs to be allocated. - bool UsesGDS; - - // GDSArg - Flag that specifies if this function has an Region - // argument or not - bool GDSArg; - - // The size in bytes required to host all of the kernel arguments. - // -1 means this value has not been determined yet. - int32_t mArgSize; - - // The size in bytes required to host the stack and the kernel arguments - // in private memory. - // -1 means this value has not been determined yet. - int32_t mScratchSize; - - // The size in bytes required to host the the kernel arguments - // on the stack. - // -1 means this value has not been determined yet. - int32_t mStackSize; - - /// A map of constant to literal mapping for all of the 32bit or - /// smaller literals in the current function. - std::map<uint32_t, uint32_t> mIntLits; - - /// A map of constant to literal mapping for all of the 64bit - /// literals in the current function. - std::map<uint64_t, uint32_t> mLongLits; - - /// A map of constant to literal mapping for all of the 128bit - /// literals in the current function. - std::map<std::pair<uint64_t, uint64_t>, uint32_t> mVecLits; - - /// The number of literals that should be reserved. - /// TODO: Remove this when the wrapper emitter is added. - uint32_t mReservedLits; - - /// A map of name to sampler information that is used to emit - /// metadata to the IL stream that the runtimes can use for - /// hardware setup. - StringMap<SamplerInfo> mSamplerMap; - - /// Array of flags to specify if a specific memory type is used or not. - bool mUsedMem[AMDILDevice::MAX_IDS]; - - /// Set of all functions that this function calls. - DenseSet<uint32_t> mFuncs; - - /// Set of all intrinsics that this function calls. - DenseSet<uint32_t> mIntrs; - - /// Set of all read only 2D images. - DenseSet<uint32_t> mRO2D; - /// Set of all read only 3D images. - DenseSet<uint32_t> mRO3D; - /// Set of all write only 2D images. - DenseSet<uint32_t> mWO2D; - /// Set of all write only 3D images. - DenseSet<uint32_t> mWO3D; - /// Set of all the raw uavs. - DenseSet<uint32_t> mRawUAV; - /// Set of all the arena uavs. - DenseSet<uint32_t> mArenaUAV; - - /// A set of all errors that occured in the backend for this function. - DenseSet<const char *> mErrors; - - /// A mapping of printf data and the printf string - std::map<std::string, PrintfInfo*> mPrintfMap; - - /// A set of all of the metadata that is used for the current function. - std::set<std::string> mMetadataFunc; - - /// A set of all of the metadata that is used for the function wrapper. - std::vector<std::string> mMetadataKernel; - - /// Information about the kernel, NULL if the function is not a kernel. - AMDILKernel *mKernel; - - /// Pointer to the machine function that this information belongs to. - MachineFunction *mMF; - - /// Pointer to the subtarget for this function. - const AMDILSubtarget *mSTM; - public: - AMDILMachineFunctionInfo(); - AMDILMachineFunctionInfo(MachineFunction &MF); - virtual ~AMDILMachineFunctionInfo(); - unsigned int - getCalleeSavedFrameSize() const; - void - setCalleeSavedFrameSize(unsigned int bytes); - - unsigned int - getBytesToPopOnReturn() const; - void - setBytesToPopOnReturn (unsigned int bytes); - - NameDecorationStyle - getDecorationStyle() const; - void - setDecorationStyle(NameDecorationStyle style); - - int - getRAIndex() const; - void - setRAIndex(int Index); - - int - getTCReturnAddrDelta() const; - void - setTCReturnAddrDelta(int delta); - - unsigned int - getSRetReturnReg() const; - void - setSRetReturnReg(unsigned int Reg); - - void - setUsesLocal(); - bool - usesLocal() const; - void - setHasLocalArg(); - bool - hasLocalArg() const; - - void - setUsesRegion(); - bool - usesRegion() const; - void - setHasRegionArg(); - bool - hasRegionArg() const; - - bool - usesHWConstant(std::string name) const; - uint32_t - getLocal(uint32_t); - bool - isKernel() const; - AMDILKernel* - getKernel(); - - std::string - getName(); - - /// Get the size in bytes that are required to host all of - /// arguments based on the argument alignment rules in the AMDIL - /// Metadata spec. - uint32_t getArgSize(); - - /// Get the size in bytes that are required to host all of - /// arguments and stack memory in scratch. - uint32_t getScratchSize(); - - /// Get the size in bytes that is required to host all of - /// the arguments on the stack. - uint32_t getStackSize(); - - /// - /// @param val value to add the lookup table - /// @param Opcode opcode of the literal instruction - /// @brief adds the specified value of the type represented by the - /// Opcode - /// to the literal to integer and integer to literal mappings. - /// - /// Add a 32bit integer value to the literal table. - uint32_t addi32Literal(uint32_t val, int Opcode = AMDIL::LOADCONST_i32); - - /// Add a 32bit floating point value to the literal table. - uint32_t addf32Literal(const ConstantFP *CFP); - - /// Add a 64bit integer value to the literal table. - uint32_t addi64Literal(uint64_t val); - - /// Add a 128 bit integer value to the literal table. - uint32_t addi128Literal(uint64_t val_lo, uint64_t val_hi); - - /// Add a 64bit floating point literal as a 64bit integer value. - uint32_t addf64Literal(const ConstantFP *CFP); - - /// Get the number of literals that have currently been allocated. - size_t getNumLiterals() const; - - /// Get the literal ID of an Integer literal of the given offset. - uint32_t getIntLits(uint32_t lit); - - /// Get the literal ID of a Long literal of the given offset. - uint32_t getLongLits(uint64_t lit); - - /// Get the literal ID of a Long literal of the given offset. - uint32_t getVecLits(uint64_t low64, uint64_t high64); - - /// Add some literals to the number of reserved literals. - void addReservedLiterals(uint32_t); - - // Functions that return iterators to the beginning and end - // of the various literal maps. - // Functions that return the beginning and end of the 32bit literal map - lit32_iterator begin_32() { return mIntLits.begin(); } - lit32_iterator end_32() { return mIntLits.end(); } - - // Functions that return the beginning and end of the 64bit literal map - lit64_iterator begin_64() { return mLongLits.begin(); } - lit64_iterator end_64() { return mLongLits.end(); } - - // Functions that return the beginning and end of the 2x64bit literal map - lit128_iterator begin_128() { return mVecLits.begin(); } - lit128_iterator end_128() { return mVecLits.end(); } - - // Add a sampler to the set of known samplers for the current kernel. - uint32_t addSampler(std::string name, uint32_t value); - - // Iterators that point to the beginning and end of the sampler map. - sampler_iterator sampler_begin() { return mSamplerMap.begin(); } - sampler_iterator sampler_end() { return mSamplerMap.end(); } - - - /// Set the flag for the memory ID to true for the current function. - void setUsesMem(unsigned); - /// Retrieve the flag for the memory ID. - bool usesMem(unsigned); - - /// Add called functions to the set of all functions this function calls. - void addCalledFunc(uint32_t id) { mFuncs.insert(id); } - void eraseCalledFunc(uint32_t id) { mFuncs.erase(id); } - size_t func_size() { return mFuncs.size(); } - bool func_empty() { return mFuncs.empty(); } - func_iterator func_begin() { return mFuncs.begin(); } - func_iterator func_end() { return mFuncs.end(); } - - /// Add called intrinsics to the set of all intrinscis this function calls. - void addCalledIntr(uint32_t id) { mIntrs.insert(id); } - size_t intr_size() { return mIntrs.size(); } - bool intr_empty() { return mIntrs.empty(); } - intr_iterator intr_begin() { return mIntrs.begin(); } - intr_iterator intr_end() { return mIntrs.end(); } - - /// Add a 2D read_only image id. - void addROImage2D(uint32_t id) { mRO2D.insert(id); } - size_t read_image2d_size() { return mRO2D.size(); } - read_image2d_iterator read_image2d_begin() { return mRO2D.begin(); } - read_image2d_iterator read_image2d_end() { return mRO2D.end(); } - - /// Add a 3D read_only image id. - void addROImage3D(uint32_t id) { mRO3D.insert(id); } - size_t read_image3d_size() { return mRO3D.size(); } - read_image3d_iterator read_image3d_begin() { return mRO3D.begin(); } - read_image3d_iterator read_image3d_end() { return mRO3D.end(); } - - /// Add a 2D write_only image id. - void addWOImage2D(uint32_t id) { mWO2D.insert(id); } - size_t write_image2d_size() { return mWO2D.size(); } - write_image2d_iterator write_image2d_begin() { return mWO2D.begin(); } - write_image2d_iterator write_image2d_end() { return mWO2D.end(); } - - /// Add a 3D write_only image id. - void addWOImage3D(uint32_t id) { mWO3D.insert(id); } - size_t write_image3d_size() { return mWO3D.size(); } - write_image3d_iterator write_image3d_begin() { return mWO3D.begin(); } - write_image3d_iterator write_image3d_end() { return mWO3D.end(); } - - /// Add a raw uav id. - void uav_insert(uint32_t id) { mRawUAV.insert(id); } - bool uav_count(uint32_t id) { return mRawUAV.count(id); } - size_t uav_size() { return mRawUAV.size(); } - uav_iterator uav_begin() { return mRawUAV.begin(); } - uav_iterator uav_end() { return mRawUAV.end(); } - - /// Add an arena uav id. - void arena_insert(uint32_t id) { mArenaUAV.insert(id); } - bool arena_count(uint32_t id) { return mArenaUAV.count(id); } - size_t arena_size() { return mArenaUAV.size(); } - uav_iterator arena_begin() { return mArenaUAV.begin(); } - uav_iterator arena_end() { return mArenaUAV.end(); } - - // Add an error to the output for the current function. - typedef enum { - RELEASE_ONLY, /// Only emit error message in release mode. - DEBUG_ONLY, /// Only emit error message in debug mode. - ALWAYS /// Always emit the error message. - } ErrorMsgEnum; - /// Add an error message to the set of all error messages. - void addErrorMsg(const char* msg, ErrorMsgEnum val = ALWAYS); - bool errors_empty() { return mErrors.empty(); } - error_iterator errors_begin() { return mErrors.begin(); } - error_iterator errors_end() { return mErrors.end(); } - - /// Add a string to the printf map - uint32_t addPrintfString(std::string &name, unsigned offset); - /// Add a operand to the printf string - void addPrintfOperand(std::string &name, size_t idx, uint32_t size); - bool printf_empty() { return mPrintfMap.empty(); } - size_t printf_size() { return mPrintfMap.size(); } - printf_iterator printf_begin() { return mPrintfMap.begin(); } - printf_iterator printf_end() { return mPrintfMap.end(); } - - /// Add a string to the metadata set for a function/kernel wrapper - void addMetadata(const char *md, bool kernelOnly = false); - void addMetadata(std::string md, bool kernelOnly = false); - func_md_iterator func_md_begin() { return mMetadataFunc.begin(); } - func_md_iterator func_md_end() { return mMetadataFunc.end(); } - kernel_md_iterator kernel_md_begin() { return mMetadataKernel.begin(); } - kernel_md_iterator kernel_md_end() { return mMetadataKernel.end(); } - }; -} // llvm namespace -#endif // _AMDILMACHINEFUNCTIONINFO_H_ |