forked from OSchip/llvm-project
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:
parent
8922476bcb
commit
ac00eb5470
|
@ -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!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue