1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-- AMDGPU.h - MachineFunction passes hw codegen --------------*- C++ -*-=// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard/// \file 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#ifndef AMDGPU_H 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#define AMDGPU_H 13f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 14f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/Support/TargetRegistry.h" 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "llvm/Target/TargetMachine.h" 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace llvm { 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 193ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardclass AMDGPUInstrPrinter; 20cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesclass AMDGPUSubtarget; 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardclass AMDGPUTargetMachine; 223ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardclass FunctionPass; 233ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardclass MCAsmInfo; 243ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardclass raw_ostream; 253ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardclass Target; 263ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardclass TargetMachine; 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// R600 Passes 29f3d6e32c09ac73b49628f5ec7066af5eca2737b5Vincent LejeuneFunctionPass *createR600VectorRegMerger(TargetMachine &tm); 303ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom StellardFunctionPass *createR600TextureIntrinsicsReplacer(); 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardFunctionPass *createR600ExpandSpecialInstrsPass(TargetMachine &tm); 3236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesFunctionPass *createR600EmitClauseMarkers(); 33dfef7cbfc6a96d129b99750f554c7dbc000d3228Vincent LejeuneFunctionPass *createR600ClauseMergePass(TargetMachine &tm); 3425f259cde28860ea76c2f5628010968945a28edbVincent LejeuneFunctionPass *createR600Packetizer(TargetMachine &tm); 3508001a5a1565adb8ce18b97537dd75075992d09aVincent LejeuneFunctionPass *createR600ControlFlowFinalizer(TargetMachine &tm); 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesFunctionPass *createAMDGPUCFGStructurizerPass(); 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 38f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// SI Passes 3968db37b952be497c94c7aa98cf26f3baadb5afd3Tom StellardFunctionPass *createSITypeRewriter(); 406b7d99d47321ebb478b22afd2e317fe89d2149dbTom StellardFunctionPass *createSIAnnotateControlFlowPass(); 41dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesFunctionPass *createSILowerI1CopiesPass(); 42f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardFunctionPass *createSILowerControlFlowPass(TargetMachine &tm); 433492eefa4b2509c87598678a6977074a3f6a50e6Tom StellardFunctionPass *createSIFixSGPRCopiesPass(TargetMachine &tm); 44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesFunctionPass *createSIFixSGPRLiveRangesPass(); 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom StellardFunctionPass *createSICodeEmitterPass(formatted_raw_ostream &OS); 4682d3d4524f2595b2dce617e963b6d67876b4f9baTom StellardFunctionPass *createSIInsertWaits(TargetMachine &tm); 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 48dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesvoid initializeSILowerI1CopiesPass(PassRegistry &); 49dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hinesextern char &SILowerI1CopiesID; 50dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines 51f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// Passes common to R600 and SI 52cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen HinesFunctionPass *createAMDGPUPromoteAlloca(const AMDGPUSubtarget &ST); 536b7d99d47321ebb478b22afd2e317fe89d2149dbTom StellardPass *createAMDGPUStructurizeCFGPass(); 543ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom StellardFunctionPass *createAMDGPUISelDag(TargetMachine &tm); 553ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard 5657e6b2d1f3de0bf459e96f7038e692d624f7e580Tom Stellard/// \brief Creates an AMDGPU-specific Target Transformation Info pass. 5757e6b2d1f3de0bf459e96f7038e692d624f7e580Tom StellardImmutablePass * 5857e6b2d1f3de0bf459e96f7038e692d624f7e580Tom StellardcreateAMDGPUTargetTransformInfoPass(const AMDGPUTargetMachine *TM); 5957e6b2d1f3de0bf459e96f7038e692d624f7e580Tom Stellard 60cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesvoid initializeSIFixSGPRLiveRangesPass(PassRegistry&); 61cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesextern char &SIFixSGPRLiveRangesID; 62cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 63cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 643ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardextern Target TheAMDGPUTarget; 65f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 66f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} // End namespace llvm 67f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 68f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardnamespace ShaderType { 69f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard enum Type { 70f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard PIXEL = 0, 71f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard VERTEX = 1, 72f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard GEOMETRY = 2, 73f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard COMPUTE = 3 74f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard }; 75f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 76f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 773ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard/// OpenCL uses address spaces to differentiate between 783ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard/// various memory regions on the hardware. On the CPU 793ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard/// all of the address spaces point to the same memory, 803ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard/// however on the GPU, each address space points to 8136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines/// a separate piece of memory that is unique from other 823ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard/// memory locations. 833ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardnamespace AMDGPUAS { 843ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellardenum AddressSpaces { 853ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard PRIVATE_ADDRESS = 0, ///< Address space for private memory. 863ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard GLOBAL_ADDRESS = 1, ///< Address space for global memory (RAT0, VTX0). 873ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_ADDRESS = 2, ///< Address space for constant memory 883ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard LOCAL_ADDRESS = 3, ///< Address space for local memory. 89dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines FLAT_ADDRESS = 4, ///< Address space for flat memory. 90dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines REGION_ADDRESS = 5, ///< Address space for region memory. 913ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard PARAM_D_ADDRESS = 6, ///< Address space for direct addressible parameter memory (CONST0) 923ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard PARAM_I_ADDRESS = 7, ///< Address space for indirect addressible parameter memory (VTX1) 93a7eea0568c16f8e25b9e3ba9b7b73ae506738b63Tom Stellard 94a7eea0568c16f8e25b9e3ba9b7b73ae506738b63Tom Stellard // Do not re-order the CONSTANT_BUFFER_* enums. Several places depend on this 95a7eea0568c16f8e25b9e3ba9b7b73ae506738b63Tom Stellard // order to be able to dynamically index a constant buffer, for example: 96a7eea0568c16f8e25b9e3ba9b7b73ae506738b63Tom Stellard // 97a7eea0568c16f8e25b9e3ba9b7b73ae506738b63Tom Stellard // ConstantBufferAS = CONSTANT_BUFFER_0 + CBIdx 98a7eea0568c16f8e25b9e3ba9b7b73ae506738b63Tom Stellard 993ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_0 = 8, 1003ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_1 = 9, 1013ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_2 = 10, 1023ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_3 = 11, 1033ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_4 = 12, 1043ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_5 = 13, 1053ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_6 = 14, 1063ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_7 = 15, 1073ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_8 = 16, 1083ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_9 = 17, 1093ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_10 = 18, 1103ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_11 = 19, 1113ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_12 = 20, 1123ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_13 = 21, 1133ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_14 = 22, 1143ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard CONSTANT_BUFFER_15 = 23, 115dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines ADDRESS_NONE = 24, ///< Address space for unknown memory. 116dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines LAST_ADDRESS = ADDRESS_NONE 1173ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard}; 1183ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard 1193ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard} // namespace AMDGPUAS 1203ff0abfaabc2c7f604d490be587b9c27e7c91ac0Tom Stellard 121f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#endif // AMDGPU_H 122