Mesa (master): ac/nir: fix 64-bit shifts

Connor Abbott cwabbott0 at kemper.freedesktop.org
Mon Jul 3 19:03:10 UTC 2017


Module: Mesa
Branch: master
Commit: 2ec77f7a3c95802cd54b015f613b044c0d135f72
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ec77f7a3c95802cd54b015f613b044c0d135f72

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Fri Jun 30 19:10:43 2017 -0700

ac/nir: fix 64-bit shifts

NIR always makes the shift amount 32 bits, but LLVM asserts if the two
sources aren't the same type. Zero-extend the shift amount to make LLVM
happy.

Signed-off-by: Connor Abbott <cwabbott0 at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/common/ac_nir_to_llvm.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 88f3f44e92..e72747ab78 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1621,13 +1621,22 @@ static void visit_alu(struct nir_to_llvm_context *ctx, const nir_alu_instr *inst
 		result = LLVMBuildXor(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_ishl:
-		result = LLVMBuildShl(ctx->builder, src[0], src[1], "");
+		result = LLVMBuildShl(ctx->builder, src[0],
+				      LLVMBuildZExt(ctx->builder, src[1],
+						    LLVMTypeOf(src[0]), ""),
+				      "");
 		break;
 	case nir_op_ishr:
-		result = LLVMBuildAShr(ctx->builder, src[0], src[1], "");
+		result = LLVMBuildAShr(ctx->builder, src[0],
+				       LLVMBuildZExt(ctx->builder, src[1],
+						     LLVMTypeOf(src[0]), ""),
+				       "");
 		break;
 	case nir_op_ushr:
-		result = LLVMBuildLShr(ctx->builder, src[0], src[1], "");
+		result = LLVMBuildLShr(ctx->builder, src[0],
+				       LLVMBuildZExt(ctx->builder, src[1],
+						     LLVMTypeOf(src[0]), ""),
+				       "");
 		break;
 	case nir_op_ilt:
 		result = emit_int_cmp(&ctx->ac, LLVMIntSLT, src[0], src[1]);




More information about the mesa-commit mailing list