summaryrefslogtreecommitdiff
path: root/src/amd
diff options
context:
space:
mode:
authorMarek Olšák <marek.olsak@amd.com>2019-07-16 01:07:49 -0400
committerMarek Olšák <marek.olsak@amd.com>2019-07-19 20:16:19 -0400
commit47dee973292eee6407ec17923b983f4c614e7493 (patch)
treec5dcf5529dbc53c9ef0a6feecfe4241fd90953e2 /src/amd
parent39d0c68321dfb592afc1f6f63d90d5508cdf7333 (diff)
downloadmesa-47dee973292eee6407ec17923b983f4c614e7493.tar.gz
ac: use llvm.amdgcn.writelane
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Diffstat (limited to 'src/amd')
-rw-r--r--src/amd/common/ac_llvm_build.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index 221850139b1..041b6cd797e 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -3825,8 +3825,12 @@ ac_build_readlane(struct ac_llvm_context *ctx, LLVMValueRef src, LLVMValueRef la
LLVMValueRef
ac_build_writelane(struct ac_llvm_context *ctx, LLVMValueRef src, LLVMValueRef value, LLVMValueRef lane)
{
- /* TODO: Use the actual instruction when LLVM adds an intrinsic for it.
- */
+ if (HAVE_LLVM >= 0x0800) {
+ return ac_build_intrinsic(ctx, "llvm.amdgcn.writelane", ctx->i32,
+ (LLVMValueRef []) {value, lane, src}, 3,
+ AC_FUNC_ATTR_READNONE | AC_FUNC_ATTR_CONVERGENT);
+ }
+
LLVMValueRef pred = LLVMBuildICmp(ctx->builder, LLVMIntEQ, lane,
ac_get_thread_id(ctx), "");
return LLVMBuildSelect(ctx->builder, pred, value, src, "");