Mesa (master): ac/llvm: convert src operands to pointers if necessary

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 28 08:07:56 UTC 2019


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

Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date:   Wed Nov 27 15:32:45 2019 +0100

ac/llvm: convert src operands to pointers if necessary

To avoid generating invalid LLVM IR when both operands don't have
the same type. This might happen when performing pointer comparisons
with SPIRV 1.4.

Fixes invalid LLVM IR for:
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrequal.variable_pointers_ssbo_equal
dEQP-VK.spirv_assembly.instruction.spirv1p4.opptrnotequal.variable_pointers_ssbo_not_equal

Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/llvm/ac_nir_to_llvm.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c
index 589f39c3c03..c6e699567c9 100644
--- a/src/amd/llvm/ac_nir_to_llvm.c
+++ b/src/amd/llvm/ac_nir_to_llvm.c
@@ -234,8 +234,19 @@ static LLVMValueRef emit_intrin_3f_param(struct ac_llvm_context *ctx,
 static LLVMValueRef emit_bcsel(struct ac_llvm_context *ctx,
 			       LLVMValueRef src0, LLVMValueRef src1, LLVMValueRef src2)
 {
+	LLVMTypeRef src1_type = LLVMTypeOf(src1);
+	LLVMTypeRef src2_type = LLVMTypeOf(src2);
+
 	assert(LLVMGetTypeKind(LLVMTypeOf(src0)) != LLVMVectorTypeKind);
 
+	if (LLVMGetTypeKind(src1_type) == LLVMPointerTypeKind &&
+	    LLVMGetTypeKind(src2_type) != LLVMPointerTypeKind) {
+		src2 = LLVMBuildIntToPtr(ctx->builder, src2, src1_type, "");
+	} else if (LLVMGetTypeKind(src2_type) == LLVMPointerTypeKind &&
+		   LLVMGetTypeKind(src1_type) != LLVMPointerTypeKind) {
+		src1 = LLVMBuildIntToPtr(ctx->builder, src1, src2_type, "");
+	}
+
 	LLVMValueRef v = LLVMBuildICmp(ctx->builder, LLVMIntNE, src0,
 				       ctx->i32_0, "");
 	return LLVMBuildSelect(ctx->builder, v,




More information about the mesa-commit mailing list