From: Connor Abbott <cwabbo...@gmail.com>

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 <cwabbo...@gmail.com>
---
 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 88f3f44..e72747a 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]);
-- 
2.9.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to