diff options
author | Samuel Pitoiset <[email protected]> | 2019-04-26 12:49:15 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2019-05-02 09:24:05 +0200 |
commit | 492e8288485484f414e1144aeb73ee3eb58b71b1 (patch) | |
tree | 9425fb9993957432a5ff2aa2c2e8109c7c745f87 /src/amd | |
parent | 6ac10e07c2d6d7740f09a4e53c6b2fc88f4ecadd (diff) |
ac: tidy up ac_build_llvm8_tbuffer_{load,store}
For consistency with ac_build_llvm8_buffer_{load,store}_common
helpers and that will help a bit for removing the vec3 restriction.
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Diffstat (limited to 'src/amd')
-rw-r--r-- | src/amd/common/ac_llvm_build.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index 4fdf73c99ba..22b771db774 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -1512,18 +1512,17 @@ ac_build_llvm8_tbuffer_load(struct ac_llvm_context *ctx, args[idx++] = soffset ? soffset : ctx->i32_0; args[idx++] = LLVMConstInt(ctx->i32, dfmt | (nfmt << 4), 0); args[idx++] = LLVMConstInt(ctx->i32, (glc ? 1 : 0) + (slc ? 2 : 0), 0); - unsigned func = CLAMP(num_channels, 1, 3) - 1; - - LLVMTypeRef types[] = {ctx->i32, ctx->v2i32, ctx->v4i32}; - const char *type_names[] = {"i32", "v2i32", "v4i32"}; + unsigned func = num_channels == 3 ? 4 : num_channels; const char *indexing_kind = structurized ? "struct" : "raw"; - char name[256]; + char name[256], type_name[8]; + + LLVMTypeRef type = func > 1 ? LLVMVectorType(ctx->i32, func) : ctx->i32; + ac_build_type_name_for_intr(type, type_name, sizeof(type_name)); snprintf(name, sizeof(name), "llvm.amdgcn.%s.tbuffer.load.%s", - indexing_kind, type_names[func]); + indexing_kind, type_name); - return ac_build_intrinsic(ctx, name, types[func], args, - idx, + return ac_build_intrinsic(ctx, name, type, args, idx, ac_get_load_intr_attribs(can_speculate)); } @@ -1699,14 +1698,15 @@ ac_build_llvm8_tbuffer_store(struct ac_llvm_context *ctx, args[idx++] = soffset ? soffset : ctx->i32_0; args[idx++] = LLVMConstInt(ctx->i32, dfmt | (nfmt << 4), 0); args[idx++] = LLVMConstInt(ctx->i32, (glc ? 1 : 0) + (slc ? 2 : 0), 0); - unsigned func = CLAMP(num_channels, 1, 3) - 1; - - const char *type_names[] = {"i32", "v2i32", "v4i32"}; + unsigned func = num_channels == 3 ? 4 : num_channels; const char *indexing_kind = structurized ? "struct" : "raw"; - char name[256]; + char name[256], type_name[8]; + + LLVMTypeRef type = func > 1 ? LLVMVectorType(ctx->i32, func) : ctx->i32; + ac_build_type_name_for_intr(type, type_name, sizeof(type_name)); snprintf(name, sizeof(name), "llvm.amdgcn.%s.tbuffer.store.%s", - indexing_kind, type_names[func]); + indexing_kind, type_name); ac_build_intrinsic(ctx, name, ctx->voidt, args, idx, ac_get_store_intr_attribs(writeonly_memory)); |