AMDGPU/SI: Add getShaderType() function to Utils/

Reviewers: arsenm

Subscribers: arsenm, llvm-commits

Differential Revision: http://reviews.llvm.org/D15424

llvm-svn: 255650
This commit is contained in:
Tom Stellard 2015-12-15 16:26:16 +00:00
parent 8922476bcb
commit ac00eb5470
5 changed files with 26 additions and 17 deletions

View File

@ -1,11 +1,10 @@
#include "AMDGPUMachineFunction.h" #include "AMDGPUMachineFunction.h"
#include "AMDGPU.h" #include "AMDGPU.h"
#include "Utils/AMDGPUBaseInfo.h"
#include "llvm/IR/Attributes.h" #include "llvm/IR/Attributes.h"
#include "llvm/IR/Function.h" #include "llvm/IR/Function.h"
using namespace llvm; using namespace llvm;
static const char *const ShaderTypeAttribute = "ShaderType";
// Pin the vtable to this file. // Pin the vtable to this file.
void AMDGPUMachineFunction::anchor() {} void AMDGPUMachineFunction::anchor() {}
@ -16,11 +15,6 @@ AMDGPUMachineFunction::AMDGPUMachineFunction(const MachineFunction &MF) :
ABIArgOffset(0), ABIArgOffset(0),
ScratchSize(0), ScratchSize(0),
IsKernel(true) { IsKernel(true) {
Attribute A = MF.getFunction()->getFnAttribute(ShaderTypeAttribute);
if (A.isStringAttribute()) { ShaderType = AMDGPU::getShaderType(*MF.getFunction());
StringRef Str = A.getValueAsString();
if (Str.getAsInteger(0, ShaderType))
llvm_unreachable("Can't parse shader type!");
}
} }

View File

@ -22,6 +22,7 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "AMDGPU.h" #include "AMDGPU.h"
#include "Utils/AMDGPUBaseInfo.h"
#include "llvm/IR/IRBuilder.h" #include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstVisitor.h" #include "llvm/IR/InstVisitor.h"
@ -61,14 +62,7 @@ bool SITypeRewriter::doInitialization(Module &M) {
} }
bool SITypeRewriter::runOnFunction(Function &F) { bool SITypeRewriter::runOnFunction(Function &F) {
Attribute A = F.getFnAttribute("ShaderType"); if (AMDGPU::getShaderType(F) == ShaderType::COMPUTE)
unsigned ShaderType = ShaderType::COMPUTE;
if (A.isStringAttribute()) {
StringRef Str = A.getValueAsString();
Str.getAsInteger(0, ShaderType);
}
if (ShaderType == ShaderType::COMPUTE)
return false; return false;
visit(F); visit(F);

View File

@ -8,6 +8,8 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
#include "AMDGPUBaseInfo.h" #include "AMDGPUBaseInfo.h"
#include "AMDGPU.h" #include "AMDGPU.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h" #include "llvm/IR/GlobalValue.h"
#include "llvm/MC/MCContext.h" #include "llvm/MC/MCContext.h"
#include "llvm/MC/MCSectionELF.h" #include "llvm/MC/MCSectionELF.h"
@ -99,5 +101,21 @@ bool isReadOnlySegment(const GlobalValue *GV) {
return GV->getType()->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS; return GV->getType()->getAddressSpace() == AMDGPUAS::CONSTANT_ADDRESS;
} }
static const char ShaderTypeAttribute[] = "ShaderType";
unsigned getShaderType(const Function &F) {
Attribute A = F.getFnAttribute(ShaderTypeAttribute);
unsigned ShaderType = ShaderType::COMPUTE;
if (A.isStringAttribute()) {
StringRef Str = A.getValueAsString();
if (Str.getAsInteger(0, ShaderType)) {
LLVMContext &Ctx = F.getContext();
Ctx.emitError("can't parse shader type");
}
}
return ShaderType;
}
} // End namespace AMDGPU } // End namespace AMDGPU
} // End namespace llvm } // End namespace llvm

View File

@ -15,6 +15,7 @@
namespace llvm { namespace llvm {
class FeatureBitset; class FeatureBitset;
class Function;
class GlobalValue; class GlobalValue;
class MCContext; class MCContext;
class MCSection; class MCSection;
@ -42,6 +43,8 @@ bool isGroupSegment(const GlobalValue *GV);
bool isGlobalSegment(const GlobalValue *GV); bool isGlobalSegment(const GlobalValue *GV);
bool isReadOnlySegment(const GlobalValue *GV); bool isReadOnlySegment(const GlobalValue *GV);
unsigned getShaderType(const Function &F);
} // end namespace AMDGPU } // end namespace AMDGPU
} // end namespace llvm } // end namespace llvm

View File

@ -19,5 +19,5 @@
type = Library type = Library
name = AMDGPUUtils name = AMDGPUUtils
parent = AMDGPU parent = AMDGPU
required_libraries = MC Support required_libraries = Core MC Support
add_to_library_groups = AMDGPU add_to_library_groups = AMDGPU