From ea64d66fdea66351c6895df6e19e819822c46033 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 29 Jun 2019 01:03:29 -0400 Subject: [PATCH] ac: use an LLVM fence instead of s.waitcnt when possible Reviewed-by: Pierre-Eric Pelloux-Prayer --- src/amd/common/ac_llvm_build.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index 63891855e07..b208ba41eea 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -2887,6 +2887,15 @@ void ac_build_waitcnt(struct ac_llvm_context *ctx, unsigned wait_flags) vmcnt = 0; } + /* There is no intrinsic for vscnt(0), so use a fence. */ + if ((wait_flags & AC_WAIT_LGKM && + wait_flags & AC_WAIT_VLOAD && + wait_flags & AC_WAIT_VSTORE) || + vscnt == 0) { + LLVMBuildFence(ctx->builder, LLVMAtomicOrderingRelease, false, ""); + return; + } + unsigned simm16 = (lgkmcnt << 8) | (7 << 4) | /* expcnt */ (vmcnt & 0xf) | @@ -2897,15 +2906,6 @@ void ac_build_waitcnt(struct ac_llvm_context *ctx, unsigned wait_flags) }; ac_build_intrinsic(ctx, "llvm.amdgcn.s.waitcnt", ctx->voidt, args, 1, 0); - - /* TODO: add llvm.amdgcn.s.waitcnt.vscnt into LLVM: */ - if (0 && ctx->chip_class >= GFX10 && vscnt == 0) { - LLVMValueRef args[1] = { - LLVMConstInt(ctx->i32, vscnt, false), - }; - ac_build_intrinsic(ctx, "llvm.amdgcn.s.waitcnt.vscnt", - ctx->voidt, args, 1, 0); - } } LLVMValueRef ac_build_fmed3(struct ac_llvm_context *ctx, LLVMValueRef src0, -- 2.30.2