diff options
author | Bas Nieuwenhuizen <[email protected]> | 2019-01-23 01:54:39 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2019-02-06 22:35:40 +0100 |
commit | 58c8dadd328ee98d74a198820c7b5980306af7b1 (patch) | |
tree | 5f9cd9238b4f2ebe1c04548c902444230480a7ed /src/amd/common/ac_llvm_build.c | |
parent | e00d9a9a728fe0c91bd295a5818fdb8303f321bf (diff) |
amd/common: Implement ptr->int casts in ac_to_integer.
For the implicit casts inherent in nir.
This should probably have been done for shared memory for
VK_KHR_variable_pointers.
Reviewed-by: Samuel Pitoiset <[email protected]>
Diffstat (limited to 'src/amd/common/ac_llvm_build.c')
-rw-r--r-- | src/amd/common/ac_llvm_build.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index 9aff2f8435d..9395bd1bbda 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -219,6 +219,16 @@ ac_to_integer_type(struct ac_llvm_context *ctx, LLVMTypeRef t) return LLVMVectorType(to_integer_type_scalar(ctx, elem_type), LLVMGetVectorSize(t)); } + if (LLVMGetTypeKind(t) == LLVMPointerTypeKind) { + switch (LLVMGetPointerAddressSpace(t)) { + case AC_ADDR_SPACE_GLOBAL: + return ctx->i64; + case AC_ADDR_SPACE_LDS: + return ctx->i32; + default: + unreachable("unhandled address space"); + } + } return to_integer_type_scalar(ctx, t); } @@ -226,6 +236,9 @@ LLVMValueRef ac_to_integer(struct ac_llvm_context *ctx, LLVMValueRef v) { LLVMTypeRef type = LLVMTypeOf(v); + if (LLVMGetTypeKind(type) == LLVMPointerTypeKind) { + return LLVMBuildPtrToInt(ctx->builder, v, ac_to_integer_type(ctx, type), ""); + } return LLVMBuildBitCast(ctx->builder, v, ac_to_integer_type(ctx, type), ""); } |