summaryrefslogtreecommitdiffstats
path: root/src/amd
diff options
context:
space:
mode:
authorNicolai Hähnle <[email protected]>2016-10-28 14:40:24 +0200
committerNicolai Hähnle <[email protected]>2016-11-03 10:06:27 +0100
commit908100cfae88a9e83560919018fc8a8a3a7bf745 (patch)
tree9f211eca0ee99e201e532518eaef89a295e42081 /src/amd
parent2ff5df8f5097d25899996ea344d09be5c76de323 (diff)
amd/common: add ac_is_sgpr_param helper
Reviewed-by: Dave Airlie <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/amd')
-rw-r--r--src/amd/common/ac_llvm_helper.cpp10
-rw-r--r--src/amd/common/ac_llvm_util.h2
2 files changed, 12 insertions, 0 deletions
diff --git a/src/amd/common/ac_llvm_helper.cpp b/src/amd/common/ac_llvm_helper.cpp
index 125f5f3d7a9..594339ee8c8 100644
--- a/src/amd/common/ac_llvm_helper.cpp
+++ b/src/amd/common/ac_llvm_helper.cpp
@@ -35,6 +35,7 @@
#include <llvm-c/Core.h>
#include <llvm/Target/TargetOptions.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
+#include <llvm/IR/Attributes.h>
void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
{
@@ -43,3 +44,12 @@ void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
B.addDereferenceableAttr(bytes);
A->addAttr(llvm::AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
}
+
+bool ac_is_sgpr_param(LLVMValueRef arg)
+{
+ llvm::Argument *A = llvm::unwrap<llvm::Argument>(arg);
+ llvm::AttributeSet AS = A->getParent()->getAttributes();
+ unsigned ArgNo = A->getArgNo();
+ return AS.hasAttribute(ArgNo + 1, llvm::Attribute::ByVal) ||
+ AS.hasAttribute(ArgNo + 1, llvm::Attribute::InReg);
+}
diff --git a/src/amd/common/ac_llvm_util.h b/src/amd/common/ac_llvm_util.h
index 25ebc503ac7..d9ea9bd185a 100644
--- a/src/amd/common/ac_llvm_util.h
+++ b/src/amd/common/ac_llvm_util.h
@@ -24,6 +24,7 @@
*/
#pragma once
+#include <stdbool.h>
#include <llvm-c/TargetMachine.h>
#include "amd_family.h"
@@ -35,6 +36,7 @@ extern "C" {
LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family);
void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes);
+bool ac_is_sgpr_param(LLVMValueRef param);
#ifdef __cplusplus
}