[Mesa-dev] [PATCH 35/92] ac/nir: convert type helpers to ac_llvm_context

Nicolai Hähnle nhaehnle at gmail.com
Mon Jun 26 14:10:14 UTC 2017


From: Nicolai Hähnle <nicolai.haehnle at amd.com>

---
 src/amd/common/ac_nir_to_llvm.c | 190 ++++++++++++++++++++--------------------
 1 file changed, 95 insertions(+), 95 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index e65f167..a590888 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -402,77 +402,77 @@ static LLVMValueRef get_shared_memory_ptr(struct nir_to_llvm_context *ctx,
 
 	offset = LLVMConstInt(ctx->i32, idx * 16, false);
 
 	ptr = ctx->shared_memory;
 	ptr = LLVMBuildGEP(ctx->builder, ptr, &offset, 1, "");
 	addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
 	ptr = LLVMBuildBitCast(ctx->builder, ptr, LLVMPointerType(type, addr_space), "");
 	return ptr;
 }
 
-static LLVMTypeRef to_integer_type_scalar(struct nir_to_llvm_context *ctx, LLVMTypeRef t)
+static LLVMTypeRef to_integer_type_scalar(struct ac_llvm_context *ctx, LLVMTypeRef t)
 {
 	if (t == ctx->f16 || t == ctx->i16)
 		return ctx->i16;
 	else if (t == ctx->f32 || t == ctx->i32)
 		return ctx->i32;
 	else if (t == ctx->f64 || t == ctx->i64)
 		return ctx->i64;
 	else
 		unreachable("Unhandled integer size");
 }
 
-static LLVMTypeRef to_integer_type(struct nir_to_llvm_context *ctx, LLVMTypeRef t)
+static LLVMTypeRef to_integer_type(struct ac_llvm_context *ctx, LLVMTypeRef t)
 {
 	if (LLVMGetTypeKind(t) == LLVMVectorTypeKind) {
 		LLVMTypeRef elem_type = LLVMGetElementType(t);
 		return LLVMVectorType(to_integer_type_scalar(ctx, elem_type),
 		                      LLVMGetVectorSize(t));
 	}
 	return to_integer_type_scalar(ctx, t);
 }
 
-static LLVMValueRef to_integer(struct nir_to_llvm_context *ctx, LLVMValueRef v)
+static LLVMValueRef to_integer(struct ac_llvm_context *ctx, LLVMValueRef v)
 {
 	LLVMTypeRef type = LLVMTypeOf(v);
 	return LLVMBuildBitCast(ctx->builder, v, to_integer_type(ctx, type), "");
 }
 
-static LLVMTypeRef to_float_type_scalar(struct nir_to_llvm_context *ctx, LLVMTypeRef t)
+static LLVMTypeRef to_float_type_scalar(struct ac_llvm_context *ctx, LLVMTypeRef t)
 {
 	if (t == ctx->i16 || t == ctx->f16)
 		return ctx->f16;
 	else if (t == ctx->i32 || t == ctx->f32)
 		return ctx->f32;
 	else if (t == ctx->i64 || t == ctx->f64)
 		return ctx->f64;
 	else
 		unreachable("Unhandled float size");
 }
 
-static LLVMTypeRef to_float_type(struct nir_to_llvm_context *ctx, LLVMTypeRef t)
+static LLVMTypeRef to_float_type(struct ac_llvm_context *ctx, LLVMTypeRef t)
 {
 	if (LLVMGetTypeKind(t) == LLVMVectorTypeKind) {
 		LLVMTypeRef elem_type = LLVMGetElementType(t);
 		return LLVMVectorType(to_float_type_scalar(ctx, elem_type),
 		                      LLVMGetVectorSize(t));
 	}
 	return to_float_type_scalar(ctx, t);
 }
 
-static LLVMValueRef to_float(struct nir_to_llvm_context *ctx, LLVMValueRef v)
+static LLVMValueRef to_float(struct ac_llvm_context *ctx, LLVMValueRef v)
 {
 	LLVMTypeRef type = LLVMTypeOf(v);
 	return LLVMBuildBitCast(ctx->builder, v, to_float_type(ctx, type), "");
 }
 
-static int get_elem_bits(struct nir_to_llvm_context *ctx, LLVMTypeRef type)
+static int get_elem_bits(struct ac_llvm_context *ctx, LLVMTypeRef type)
 {
 	if (LLVMGetTypeKind(type) == LLVMVectorTypeKind)
 		type = LLVMGetElementType(type);
 
 	if (LLVMGetTypeKind(type) == LLVMIntegerTypeKind)
 		return LLVMGetIntTypeWidth(type);
 
 	if (type == ctx->f16)
 		return 16;
 	if (type == ctx->f32)
@@ -1112,70 +1112,70 @@ static LLVMValueRef emit_int_cmp(struct nir_to_llvm_context *ctx,
 	return LLVMBuildSelect(ctx->builder, result,
 	                       LLVMConstInt(ctx->i32, 0xFFFFFFFF, false),
 	                       LLVMConstInt(ctx->i32, 0, false), "");
 }
 
 static LLVMValueRef emit_float_cmp(struct nir_to_llvm_context *ctx,
                                    LLVMRealPredicate pred, LLVMValueRef src0,
                                    LLVMValueRef src1)
 {
 	LLVMValueRef result;
-	src0 = to_float(ctx, src0);
-	src1 = to_float(ctx, src1);
+	src0 = to_float(&ctx->ac, src0);
+	src1 = to_float(&ctx->ac, src1);
 	result = LLVMBuildFCmp(ctx->builder, pred, src0, src1, "");
 	return LLVMBuildSelect(ctx->builder, result,
 	                       LLVMConstInt(ctx->i32, 0xFFFFFFFF, false),
 	                       LLVMConstInt(ctx->i32, 0, false), "");
 }
 
 static LLVMValueRef emit_intrin_1f_param(struct nir_to_llvm_context *ctx,
 					 const char *intrin,
 					 LLVMTypeRef result_type,
 					 LLVMValueRef src0)
 {
 	char name[64];
 	LLVMValueRef params[] = {
-		to_float(ctx, src0),
+		to_float(&ctx->ac, src0),
 	};
 
-	sprintf(name, "%s.f%d", intrin, get_elem_bits(ctx, result_type));
+	sprintf(name, "%s.f%d", intrin, get_elem_bits(&ctx->ac, result_type));
 	return ac_build_intrinsic(&ctx->ac, name, result_type, params, 1, AC_FUNC_ATTR_READNONE);
 }
 
 static LLVMValueRef emit_intrin_2f_param(struct nir_to_llvm_context *ctx,
 				       const char *intrin,
 				       LLVMTypeRef result_type,
 				       LLVMValueRef src0, LLVMValueRef src1)
 {
 	char name[64];
 	LLVMValueRef params[] = {
-		to_float(ctx, src0),
-		to_float(ctx, src1),
+		to_float(&ctx->ac, src0),
+		to_float(&ctx->ac, src1),
 	};
 
-	sprintf(name, "%s.f%d", intrin, get_elem_bits(ctx, result_type));
+	sprintf(name, "%s.f%d", intrin, get_elem_bits(&ctx->ac, result_type));
 	return ac_build_intrinsic(&ctx->ac, name, result_type, params, 2, AC_FUNC_ATTR_READNONE);
 }
 
 static LLVMValueRef emit_intrin_3f_param(struct nir_to_llvm_context *ctx,
 					 const char *intrin,
 					 LLVMTypeRef result_type,
 					 LLVMValueRef src0, LLVMValueRef src1, LLVMValueRef src2)
 {
 	char name[64];
 	LLVMValueRef params[] = {
-		to_float(ctx, src0),
-		to_float(ctx, src1),
-		to_float(ctx, src2),
+		to_float(&ctx->ac, src0),
+		to_float(&ctx->ac, src1),
+		to_float(&ctx->ac, src2),
 	};
 
-	sprintf(name, "%s.f%d", intrin, get_elem_bits(ctx, result_type));
+	sprintf(name, "%s.f%d", intrin, get_elem_bits(&ctx->ac, result_type));
 	return ac_build_intrinsic(&ctx->ac, name, result_type, params, 3, AC_FUNC_ATTR_READNONE);
 }
 
 static LLVMValueRef emit_bcsel(struct nir_to_llvm_context *ctx,
 			       LLVMValueRef src0, LLVMValueRef src1, LLVMValueRef src2)
 {
 	LLVMValueRef v = LLVMBuildICmp(ctx->builder, LLVMIntNE, src0,
 				       ctx->i32zero, "");
 	return LLVMBuildSelect(ctx->builder, v, src1, src2, "");
 }
@@ -1248,21 +1248,21 @@ static LLVMValueRef emit_isign(struct nir_to_llvm_context *ctx,
 	val = LLVMBuildSelect(ctx->builder, cmp, ctx->i32one, src0, "");
 	cmp = LLVMBuildICmp(ctx->builder, LLVMIntSGE, val, ctx->i32zero, "");
 	val = LLVMBuildSelect(ctx->builder, cmp, val, LLVMConstInt(ctx->i32, -1, true), "");
 	return val;
 }
 
 static LLVMValueRef emit_ffract(struct nir_to_llvm_context *ctx,
 				LLVMValueRef src0)
 {
 	const char *intr = "llvm.floor.f32";
-	LLVMValueRef fsrc0 = to_float(ctx, src0);
+	LLVMValueRef fsrc0 = to_float(&ctx->ac, src0);
 	LLVMValueRef params[] = {
 		fsrc0,
 	};
 	LLVMValueRef floor = ac_build_intrinsic(&ctx->ac, intr,
 						ctx->f32, params, 1,
 						AC_FUNC_ATTR_READNONE);
 	return LLVMBuildFSub(ctx->builder, fsrc0, floor, "");
 }
 
 static LLVMValueRef emit_uint_carry(struct nir_to_llvm_context *ctx,
@@ -1289,21 +1289,21 @@ static LLVMValueRef emit_b2f(struct nir_to_llvm_context *ctx,
 {
 	return LLVMBuildAnd(ctx->builder, src0, LLVMBuildBitCast(ctx->builder, LLVMConstReal(ctx->f32, 1.0), ctx->i32, ""), "");
 }
 
 static LLVMValueRef emit_f2f16(struct nir_to_llvm_context *ctx,
 			       LLVMValueRef src0)
 {
 	LLVMValueRef result;
 	LLVMValueRef cond;
 
-	src0 = to_float(ctx, src0);
+	src0 = to_float(&ctx->ac, src0);
 	result = LLVMBuildFPTrunc(ctx->builder, src0, ctx->f16, "");
 
 	/* TODO SI/CIK options here */
 	if (ctx->options->chip_class >= VI) {
 		LLVMValueRef args[2];
 		/* Check if the result is a denormal - and flush to 0 if so. */
 		args[0] = result;
 		args[1] = LLVMConstInt(ctx->i32, N_SUBNORMAL | P_SUBNORMAL, false);
 		cond = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.class.f16", ctx->i1, args, 2, AC_FUNC_ATTR_READNONE);
 	}
@@ -1385,21 +1385,21 @@ static LLVMValueRef emit_bitfield_insert(struct nir_to_llvm_context *ctx,
 	return result;
 }
 
 static LLVMValueRef emit_pack_half_2x16(struct nir_to_llvm_context *ctx,
 					LLVMValueRef src0)
 {
 	LLVMValueRef const16 = LLVMConstInt(ctx->i32, 16, false);
 	int i;
 	LLVMValueRef comp[2];
 
-	src0 = to_float(ctx, src0);
+	src0 = to_float(&ctx->ac, src0);
 	comp[0] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32zero, "");
 	comp[1] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32one, "");
 	for (i = 0; i < 2; i++) {
 		comp[i] = LLVMBuildFPTrunc(ctx->builder, comp[i], ctx->f16, "");
 		comp[i] = LLVMBuildBitCast(ctx->builder, comp[i], ctx->i16, "");
 		comp[i] = LLVMBuildZExt(ctx->builder, comp[i], ctx->i32, "");
 	}
 
 	comp[1] = LLVMBuildShl(ctx->builder, comp[1], const16, "");
 	comp[0] = LLVMBuildOr(ctx->builder, comp[0], comp[1], "");
@@ -1510,89 +1510,89 @@ static void visit_alu(struct nir_to_llvm_context *ctx, const nir_alu_instr *inst
 	}
 	for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++)
 		src[i] = get_alu_src(ctx, instr->src[i], src_components);
 
 	switch (instr->op) {
 	case nir_op_fmov:
 	case nir_op_imov:
 		result = src[0];
 		break;
 	case nir_op_fneg:
-	        src[0] = to_float(ctx, src[0]);
+	        src[0] = to_float(&ctx->ac, src[0]);
 		result = LLVMBuildFNeg(ctx->builder, src[0], "");
 		break;
 	case nir_op_ineg:
 		result = LLVMBuildNeg(ctx->builder, src[0], "");
 		break;
 	case nir_op_inot:
 		result = LLVMBuildNot(ctx->builder, src[0], "");
 		break;
 	case nir_op_iadd:
 		result = LLVMBuildAdd(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_fadd:
-		src[0] = to_float(ctx, src[0]);
-		src[1] = to_float(ctx, src[1]);
+		src[0] = to_float(&ctx->ac, src[0]);
+		src[1] = to_float(&ctx->ac, src[1]);
 		result = LLVMBuildFAdd(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_fsub:
-		src[0] = to_float(ctx, src[0]);
-		src[1] = to_float(ctx, src[1]);
+		src[0] = to_float(&ctx->ac, src[0]);
+		src[1] = to_float(&ctx->ac, src[1]);
 		result = LLVMBuildFSub(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_isub:
 		result = LLVMBuildSub(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_imul:
 		result = LLVMBuildMul(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_imod:
 		result = LLVMBuildSRem(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_umod:
 		result = LLVMBuildURem(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_fmod:
-		src[0] = to_float(ctx, src[0]);
-		src[1] = to_float(ctx, src[1]);
+		src[0] = to_float(&ctx->ac, src[0]);
+		src[1] = to_float(&ctx->ac, src[1]);
 		result = ac_build_fdiv(&ctx->ac, src[0], src[1]);
 		result = emit_intrin_1f_param(ctx, "llvm.floor",
-		                              to_float_type(ctx, def_type), result);
+		                              to_float_type(&ctx->ac, def_type), result);
 		result = LLVMBuildFMul(ctx->builder, src[1] , result, "");
 		result = LLVMBuildFSub(ctx->builder, src[0], result, "");
 		break;
 	case nir_op_frem:
-		src[0] = to_float(ctx, src[0]);
-		src[1] = to_float(ctx, src[1]);
+		src[0] = to_float(&ctx->ac, src[0]);
+		src[1] = to_float(&ctx->ac, src[1]);
 		result = LLVMBuildFRem(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_irem:
 		result = LLVMBuildSRem(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_idiv:
 		result = LLVMBuildSDiv(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_udiv:
 		result = LLVMBuildUDiv(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_fmul:
-		src[0] = to_float(ctx, src[0]);
-		src[1] = to_float(ctx, src[1]);
+		src[0] = to_float(&ctx->ac, src[0]);
+		src[1] = to_float(&ctx->ac, src[1]);
 		result = LLVMBuildFMul(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_fdiv:
-		src[0] = to_float(ctx, src[0]);
-		src[1] = to_float(ctx, src[1]);
+		src[0] = to_float(&ctx->ac, src[0]);
+		src[1] = to_float(&ctx->ac, src[1]);
 		result = ac_build_fdiv(&ctx->ac, src[0], src[1]);
 		break;
 	case nir_op_frcp:
-		src[0] = to_float(ctx, src[0]);
+		src[0] = to_float(&ctx->ac, src[0]);
 		result = ac_build_fdiv(&ctx->ac, ctx->f32one, src[0]);
 		break;
 	case nir_op_iand:
 		result = LLVMBuildAnd(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_ior:
 		result = LLVMBuildOr(ctx->builder, src[0], src[1], "");
 		break;
 	case nir_op_ixor:
 		result = LLVMBuildXor(ctx->builder, src[0], src[1], "");
@@ -1631,168 +1631,168 @@ static void visit_alu(struct nir_to_llvm_context *ctx, const nir_alu_instr *inst
 		result = emit_float_cmp(ctx, LLVMRealUNE, src[0], src[1]);
 		break;
 	case nir_op_flt:
 		result = emit_float_cmp(ctx, LLVMRealULT, src[0], src[1]);
 		break;
 	case nir_op_fge:
 		result = emit_float_cmp(ctx, LLVMRealUGE, src[0], src[1]);
 		break;
 	case nir_op_fabs:
 		result = emit_intrin_1f_param(ctx, "llvm.fabs",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_iabs:
 		result = emit_iabs(ctx, src[0]);
 		break;
 	case nir_op_imax:
 		result = emit_minmax_int(ctx, LLVMIntSGT, src[0], src[1]);
 		break;
 	case nir_op_imin:
 		result = emit_minmax_int(ctx, LLVMIntSLT, src[0], src[1]);
 		break;
 	case nir_op_umax:
 		result = emit_minmax_int(ctx, LLVMIntUGT, src[0], src[1]);
 		break;
 	case nir_op_umin:
 		result = emit_minmax_int(ctx, LLVMIntULT, src[0], src[1]);
 		break;
 	case nir_op_isign:
 		result = emit_isign(ctx, src[0]);
 		break;
 	case nir_op_fsign:
-		src[0] = to_float(ctx, src[0]);
+		src[0] = to_float(&ctx->ac, src[0]);
 		result = emit_fsign(ctx, src[0]);
 		break;
 	case nir_op_ffloor:
 		result = emit_intrin_1f_param(ctx, "llvm.floor",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_ftrunc:
 		result = emit_intrin_1f_param(ctx, "llvm.trunc",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_fceil:
 		result = emit_intrin_1f_param(ctx, "llvm.ceil",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_fround_even:
 		result = emit_intrin_1f_param(ctx, "llvm.rint",
-		                              to_float_type(ctx, def_type),src[0]);
+		                              to_float_type(&ctx->ac, def_type),src[0]);
 		break;
 	case nir_op_ffract:
 		result = emit_ffract(ctx, src[0]);
 		break;
 	case nir_op_fsin:
 		result = emit_intrin_1f_param(ctx, "llvm.sin",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_fcos:
 		result = emit_intrin_1f_param(ctx, "llvm.cos",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_fsqrt:
 		result = emit_intrin_1f_param(ctx, "llvm.sqrt",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_fexp2:
 		result = emit_intrin_1f_param(ctx, "llvm.exp2",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_flog2:
 		result = emit_intrin_1f_param(ctx, "llvm.log2",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		break;
 	case nir_op_frsq:
 		result = emit_intrin_1f_param(ctx, "llvm.sqrt",
-		                              to_float_type(ctx, def_type), src[0]);
+		                              to_float_type(&ctx->ac, def_type), src[0]);
 		result = ac_build_fdiv(&ctx->ac, ctx->f32one, result);
 		break;
 	case nir_op_fpow:
 		result = emit_intrin_2f_param(ctx, "llvm.pow",
-		                              to_float_type(ctx, def_type), src[0], src[1]);
+		                              to_float_type(&ctx->ac, def_type), src[0], src[1]);
 		break;
 	case nir_op_fmax:
 		result = emit_intrin_2f_param(ctx, "llvm.maxnum",
-		                              to_float_type(ctx, def_type), src[0], src[1]);
+		                              to_float_type(&ctx->ac, def_type), src[0], src[1]);
 		if (instr->dest.dest.ssa.bit_size == 32)
 			result = emit_intrin_1f_param(ctx, "llvm.canonicalize",
-						      to_float_type(ctx, def_type),
+						      to_float_type(&ctx->ac, def_type),
 						      result);
 		break;
 	case nir_op_fmin:
 		result = emit_intrin_2f_param(ctx, "llvm.minnum",
-		                              to_float_type(ctx, def_type), src[0], src[1]);
+		                              to_float_type(&ctx->ac, def_type), src[0], src[1]);
 		if (instr->dest.dest.ssa.bit_size == 32)
 			result = emit_intrin_1f_param(ctx, "llvm.canonicalize",
-						      to_float_type(ctx, def_type),
+						      to_float_type(&ctx->ac, def_type),
 						      result);
 		break;
 	case nir_op_ffma:
 		result = emit_intrin_3f_param(ctx, "llvm.fma",
-		                              to_float_type(ctx, def_type), src[0], src[1], src[2]);
+		                              to_float_type(&ctx->ac, def_type), src[0], src[1], src[2]);
 		break;
 	case nir_op_ibitfield_extract:
 		result = emit_bitfield_extract(ctx, true, src);
 		break;
 	case nir_op_ubitfield_extract:
 		result = emit_bitfield_extract(ctx, false, src);
 		break;
 	case nir_op_bitfield_insert:
 		result = emit_bitfield_insert(ctx, src[0], src[1], src[2], src[3]);
 		break;
 	case nir_op_bitfield_reverse:
 		result = ac_build_intrinsic(&ctx->ac, "llvm.bitreverse.i32", ctx->i32, src, 1, AC_FUNC_ATTR_READNONE);
 		break;
 	case nir_op_bit_count:
 		result = ac_build_intrinsic(&ctx->ac, "llvm.ctpop.i32", ctx->i32, src, 1, AC_FUNC_ATTR_READNONE);
 		break;
 	case nir_op_vec2:
 	case nir_op_vec3:
 	case nir_op_vec4:
 		for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++)
-			src[i] = to_integer(ctx, src[i]);
+			src[i] = to_integer(&ctx->ac, src[i]);
 		result = ac_build_gather_values(&ctx->ac, src, num_components);
 		break;
 	case nir_op_f2i32:
 	case nir_op_f2i64:
-		src[0] = to_float(ctx, src[0]);
+		src[0] = to_float(&ctx->ac, src[0]);
 		result = LLVMBuildFPToSI(ctx->builder, src[0], def_type, "");
 		break;
 	case nir_op_f2u32:
 	case nir_op_f2u64:
-		src[0] = to_float(ctx, src[0]);
+		src[0] = to_float(&ctx->ac, src[0]);
 		result = LLVMBuildFPToUI(ctx->builder, src[0], def_type, "");
 		break;
 	case nir_op_i2f32:
 	case nir_op_i2f64:
-		result = LLVMBuildSIToFP(ctx->builder, src[0], to_float_type(ctx, def_type), "");
+		result = LLVMBuildSIToFP(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
 		break;
 	case nir_op_u2f32:
 	case nir_op_u2f64:
-		result = LLVMBuildUIToFP(ctx->builder, src[0], to_float_type(ctx, def_type), "");
+		result = LLVMBuildUIToFP(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
 		break;
 	case nir_op_f2f64:
-		result = LLVMBuildFPExt(ctx->builder, src[0], to_float_type(ctx, def_type), "");
+		result = LLVMBuildFPExt(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
 		break;
 	case nir_op_f2f32:
-		result = LLVMBuildFPTrunc(ctx->builder, src[0], to_float_type(ctx, def_type), "");
+		result = LLVMBuildFPTrunc(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
 		break;
 	case nir_op_u2u32:
 	case nir_op_u2u64:
-		if (get_elem_bits(ctx, LLVMTypeOf(src[0])) < get_elem_bits(ctx, def_type))
+		if (get_elem_bits(&ctx->ac, LLVMTypeOf(src[0])) < get_elem_bits(&ctx->ac, def_type))
 			result = LLVMBuildZExt(ctx->builder, src[0], def_type, "");
 		else
 			result = LLVMBuildTrunc(ctx->builder, src[0], def_type, "");
 		break;
 	case nir_op_i2i32:
 	case nir_op_i2i64:
-		if (get_elem_bits(ctx, LLVMTypeOf(src[0])) < get_elem_bits(ctx, def_type))
+		if (get_elem_bits(&ctx->ac, LLVMTypeOf(src[0])) < get_elem_bits(&ctx->ac, def_type))
 			result = LLVMBuildSExt(ctx->builder, src[0], def_type, "");
 		else
 			result = LLVMBuildTrunc(ctx->builder, src[0], def_type, "");
 		break;
 	case nir_op_bcsel:
 		result = emit_bcsel(ctx, src[0], src[1], src[2]);
 		break;
 	case nir_op_find_lsb:
 		result = emit_find_lsb(ctx, src[0]);
 		break;
@@ -1836,21 +1836,21 @@ static void visit_alu(struct nir_to_llvm_context *ctx, const nir_alu_instr *inst
 		break;
 	default:
 		fprintf(stderr, "Unknown NIR alu instr: ");
 		nir_print_instr(&instr->instr, stderr);
 		fprintf(stderr, "\n");
 		abort();
 	}
 
 	if (result) {
 		assert(instr->dest.dest.is_ssa);
-		result = to_integer(ctx, result);
+		result = to_integer(&ctx->ac, result);
 		_mesa_hash_table_insert(ctx->defs, &instr->dest.dest.ssa,
 		                        result);
 	}
 }
 
 static void visit_load_const(struct nir_to_llvm_context *ctx,
                              const nir_load_const_instr *instr)
 {
 	LLVMValueRef values[4], value = NULL;
 	LLVMTypeRef element_type =
@@ -2165,38 +2165,38 @@ static LLVMValueRef visit_get_buffer_size(struct nir_to_llvm_context *ctx,
 	LLVMValueRef desc = get_src(ctx, instr->src[0]);
 
 	return get_buffer_size(ctx, desc, false);
 }
 static void visit_store_ssbo(struct nir_to_llvm_context *ctx,
                              nir_intrinsic_instr *instr)
 {
 	const char *store_name;
 	LLVMValueRef src_data = get_src(ctx, instr->src[0]);
 	LLVMTypeRef data_type = ctx->f32;
-	int elem_size_mult = get_elem_bits(ctx, LLVMTypeOf(src_data)) / 32;
+	int elem_size_mult = get_elem_bits(&ctx->ac, LLVMTypeOf(src_data)) / 32;
 	int components_32bit = elem_size_mult * instr->num_components;
 	unsigned writemask = nir_intrinsic_write_mask(instr);
 	LLVMValueRef base_data, base_offset;
 	LLVMValueRef params[6];
 
 	if (ctx->stage == MESA_SHADER_FRAGMENT)
 		ctx->shader_info->fs.writes_memory = true;
 
 	params[1] = get_src(ctx, instr->src[1]);
 	params[2] = LLVMConstInt(ctx->i32, 0, false); /* vindex */
 	params[4] = ctx->i1false;  /* glc */
 	params[5] = ctx->i1false;  /* slc */
 
 	if (components_32bit > 1)
 		data_type = LLVMVectorType(ctx->f32, components_32bit);
 
-	base_data = to_float(ctx, src_data);
+	base_data = to_float(&ctx->ac, src_data);
 	base_data = trim_vector(ctx, base_data, instr->num_components);
 	base_data = LLVMBuildBitCast(ctx->builder, base_data,
 				     data_type, "");
 	base_offset = get_src(ctx, instr->src[2]);      /* voffset */
 	while (writemask) {
 		int start, count;
 		LLVMValueRef data;
 		LLVMValueRef offset;
 		LLVMValueRef tmp;
 		u_bit_scan_consecutive_range(&writemask, &start, &count);
@@ -2941,28 +2941,28 @@ static LLVMValueRef visit_load_var(struct nir_to_llvm_context *ctx,
 	ret = ac_build_gather_values(&ctx->ac, values, ve);
 	return LLVMBuildBitCast(ctx->builder, ret, get_def_type(ctx, &instr->dest.ssa), "");
 }
 
 static void
 visit_store_var(struct nir_to_llvm_context *ctx,
 				   nir_intrinsic_instr *instr)
 {
 	LLVMValueRef temp_ptr, value;
 	int idx = instr->variables[0]->var->data.driver_location;
-	LLVMValueRef src = to_float(ctx, get_src(ctx, instr->src[0]));
+	LLVMValueRef src = to_float(&ctx->ac, get_src(ctx, instr->src[0]));
 	int writemask = instr->const_index[0];
 	LLVMValueRef indir_index;
 	unsigned const_index;
 	radv_get_deref_offset(ctx, instr->variables[0], false,
 	                      NULL, NULL, &const_index, &indir_index);
 
-	if (get_elem_bits(ctx, LLVMTypeOf(src)) == 64) {
+	if (get_elem_bits(&ctx->ac, LLVMTypeOf(src)) == 64) {
 		int old_writemask = writemask;
 
 		src = LLVMBuildBitCast(ctx->builder, src,
 		                       LLVMVectorType(ctx->f32, get_llvm_num_components(src) * 2),
 		                       "");
 
 		writemask = 0;
 		for (unsigned chan = 0; chan < 4; chan++) {
 			if (old_writemask & (1 << chan))
 				writemask |= 3u << (2 * chan);
@@ -3045,21 +3045,21 @@ visit_store_var(struct nir_to_llvm_context *ctx,
 				continue;
 			LLVMValueRef index = LLVMConstInt(ctx->i32, chan, false);
 			LLVMValueRef derived_ptr;
 
 			if (indir_index)
 				index = LLVMBuildAdd(ctx->builder, index, indir_index, "");
 
 			value = llvm_extract_elem(ctx, src, chan);
 			derived_ptr = LLVMBuildGEP(ctx->builder, ptr, &index, 1, "");
 			LLVMBuildStore(ctx->builder,
-			               to_integer(ctx, value), derived_ptr);
+			               to_integer(&ctx->ac, value), derived_ptr);
 		}
 		break;
 	}
 	default:
 		break;
 	}
 }
 
 static int image_type_to_components_count(enum glsl_sampler_dim dim, bool array)
 {
@@ -3121,21 +3121,21 @@ static LLVMValueRef adjust_sample_index_using_fmask(struct nir_to_llvm_context *
 	struct ac_image_args args = {0};
 
 	args.opcode = ac_image_load;
 	args.da = coord_z ? true : false;
 	args.resource = fmask_desc_ptr;
 	args.dmask = 0xf;
 	args.addr = ac_build_gather_values(&ctx->ac, fmask_load_address, coord_z ? 4 : 2);
 
 	res = ac_build_image_opcode(&ctx->ac, &args);
 
-	res = to_integer(ctx, res);
+	res = to_integer(&ctx->ac, res);
 	LLVMValueRef four = LLVMConstInt(ctx->i32, 4, false);
 	LLVMValueRef F = LLVMConstInt(ctx->i32, 0xf, false);
 
 	LLVMValueRef fmask = LLVMBuildExtractElement(ctx->builder,
 						     res,
 						     ctx->i32zero, "");
 
 	LLVMValueRef sample_index4 =
 		LLVMBuildMul(ctx->builder, sample_index, four, "");
 	LLVMValueRef shifted_fmask =
@@ -3259,21 +3259,21 @@ static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
 		params[0] = get_sampler_desc(ctx, instr->variables[0], DESC_BUFFER);
 		params[1] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
 						    LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
 		params[2] = LLVMConstInt(ctx->i32, 0, false); /* voffset */
 		params[3] = ctx->i1false;  /* glc */
 		params[4] = ctx->i1false;  /* slc */
 		res = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.load.format.v4f32", ctx->v4f32,
 					 params, 5, 0);
 
 		res = trim_vector(ctx, res, instr->dest.ssa.num_components);
-		res = to_integer(ctx, res);
+		res = to_integer(&ctx->ac, res);
 	} else {
 		bool is_da = glsl_sampler_type_is_array(type) ||
 			     glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
 		LLVMValueRef da = is_da ? ctx->i1true : ctx->i1false;
 		LLVMValueRef glc = ctx->i1false;
 		LLVMValueRef slc = ctx->i1false;
 
 		params[0] = get_image_coords(ctx, instr);
 		params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
 		params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
@@ -3292,52 +3292,52 @@ static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
 
 		ac_get_image_intr_name("llvm.amdgcn.image.load",
 				       ctx->v4f32, /* vdata */
 				       LLVMTypeOf(params[0]), /* coords */
 				       LLVMTypeOf(params[1]), /* rsrc */
 				       intrinsic_name, sizeof(intrinsic_name));
 
 		res = ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->v4f32,
 					 params, 7, AC_FUNC_ATTR_READONLY);
 	}
-	return to_integer(ctx, res);
+	return to_integer(&ctx->ac, res);
 }
 
 static void visit_image_store(struct nir_to_llvm_context *ctx,
 			      nir_intrinsic_instr *instr)
 {
 	LLVMValueRef params[8];
 	char intrinsic_name[64];
 	const nir_variable *var = instr->variables[0]->var;
 	const struct glsl_type *type = glsl_without_array(var->type);
 
 	if (ctx->stage == MESA_SHADER_FRAGMENT)
 		ctx->shader_info->fs.writes_memory = true;
 
 	if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) {
-		params[0] = to_float(ctx, get_src(ctx, instr->src[2])); /* data */
+		params[0] = to_float(&ctx->ac, get_src(ctx, instr->src[2])); /* data */
 		params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_BUFFER);
 		params[2] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
 						    LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
 		params[3] = LLVMConstInt(ctx->i32, 0, false); /* voffset */
 		params[4] = ctx->i1false;  /* glc */
 		params[5] = ctx->i1false;  /* slc */
 		ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.store.format.v4f32", ctx->voidt,
 				   params, 6, 0);
 	} else {
 		bool is_da = glsl_sampler_type_is_array(type) ||
 			     glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
 		LLVMValueRef da = is_da ? ctx->i1true : ctx->i1false;
 		LLVMValueRef glc = ctx->i1false;
 		LLVMValueRef slc = ctx->i1false;
 
-		params[0] = to_float(ctx, get_src(ctx, instr->src[2]));
+		params[0] = to_float(&ctx->ac, get_src(ctx, instr->src[2]));
 		params[1] = get_image_coords(ctx, instr); /* coords */
 		params[2] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
 		params[3] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
 		if (HAVE_LLVM <= 0x0309) {
 			params[4] = ctx->i1false;  /* r128 */
 			params[5] = da;
 			params[6] = glc;
 			params[7] = slc;
 		} else {
 			LLVMValueRef lwe = ctx->i1false;
@@ -3566,21 +3566,21 @@ static LLVMValueRef visit_var_atomic(struct nir_to_llvm_context *ctx,
 		case nir_intrinsic_var_atomic_xor:
 			op = LLVMAtomicRMWBinOpXor;
 			break;
 		case nir_intrinsic_var_atomic_exchange:
 			op = LLVMAtomicRMWBinOpXchg;
 			break;
 		default:
 			return NULL;
 		}
 
-		result = LLVMBuildAtomicRMW(ctx->builder, op, ptr, to_integer(ctx, src),
+		result = LLVMBuildAtomicRMW(ctx->builder, op, ptr, to_integer(&ctx->ac, src),
 					    LLVMAtomicOrderingSequentiallyConsistent,
 					    false);
 	}
 	return result;
 }
 
 #define INTERP_CENTER 0
 #define INTERP_CENTROID 1
 #define INTERP_SAMPLE 2
 
@@ -3653,22 +3653,22 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
 	case nir_intrinsic_interp_var_at_sample:
 	case nir_intrinsic_interp_var_at_offset:
 		location = INTERP_CENTER;
 		src0 = get_src(ctx, instr->src[0]);
 		break;
 	default:
 		break;
 	}
 
 	if (instr->intrinsic == nir_intrinsic_interp_var_at_offset) {
-		src_c0 = to_float(ctx, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32zero, ""));
-		src_c1 = to_float(ctx, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32one, ""));
+		src_c0 = to_float(&ctx->ac, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32zero, ""));
+		src_c1 = to_float(&ctx->ac, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32one, ""));
 	} else if (instr->intrinsic == nir_intrinsic_interp_var_at_sample) {
 		LLVMValueRef sample_position;
 		LLVMValueRef halfval = LLVMConstReal(ctx->f32, 0.5f);
 
 		/* fetch sample ID */
 		sample_position = load_sample_position(ctx, src0);
 
 		src_c0 = LLVMBuildExtractElement(ctx->builder, sample_position, ctx->i32zero, "");
 		src_c0 = LLVMBuildFSub(ctx->builder, src_c0, halfval, "");
 		src_c1 = LLVMBuildExtractElement(ctx->builder, sample_position, ctx->i32one, "");
@@ -4180,23 +4180,23 @@ static void tex_fetch_ptrs(struct nir_to_llvm_context *ctx,
 			*samp_ptr = sici_fix_sampler_aniso(ctx, *res_ptr, *samp_ptr);
 	}
 	if (fmask_ptr && !instr->sampler && (instr->op == nir_texop_txf_ms ||
 					     instr->op == nir_texop_samples_identical))
 		*fmask_ptr = get_sampler_desc(ctx, instr->texture, DESC_FMASK);
 }
 
 static LLVMValueRef apply_round_slice(struct nir_to_llvm_context *ctx,
 				      LLVMValueRef coord)
 {
-	coord = to_float(ctx, coord);
+	coord = to_float(&ctx->ac, coord);
 	coord = ac_build_intrinsic(&ctx->ac, "llvm.rint.f32", ctx->f32, &coord, 1, 0);
-	coord = to_integer(ctx, coord);
+	coord = to_integer(&ctx->ac, coord);
 	return coord;
 }
 
 static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
 {
 	LLVMValueRef result = NULL;
 	struct ac_image_args args = { 0 };
 	unsigned dmask = 0xf;
 	LLVMValueRef address[16];
 	LLVMValueRef coords[5];
@@ -4327,30 +4327,30 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
 		case GLSL_SAMPLER_DIM_2D:
 		default:
 			num_deriv_comp = 2;
 			break;
 		case GLSL_SAMPLER_DIM_1D:
 			num_deriv_comp = 1;
 			break;
 		}
 
 		for (unsigned i = 0; i < num_deriv_comp; i++) {
-			derivs[i] = to_float(ctx, llvm_extract_elem(ctx, ddx, i));
-			derivs[num_deriv_comp + i] = to_float(ctx, llvm_extract_elem(ctx, ddy, i));
+			derivs[i] = to_float(&ctx->ac, llvm_extract_elem(ctx, ddx, i));
+			derivs[num_deriv_comp + i] = to_float(&ctx->ac, llvm_extract_elem(ctx, ddy, i));
 		}
 	}
 
 	if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE && coord) {
 		if (instr->is_array && instr->op != nir_texop_lod)
 			coords[3] = apply_round_slice(ctx, coords[3]);
 		for (chan = 0; chan < instr->coord_components; chan++)
-			coords[chan] = to_float(ctx, coords[chan]);
+			coords[chan] = to_float(&ctx->ac, coords[chan]);
 		if (instr->coord_components == 3)
 			coords[3] = LLVMGetUndef(ctx->f32);
 		ac_prepare_cube_coords(&ctx->ac,
 			instr->op == nir_texop_txd, instr->is_array,
 			coords, derivs);
 		if (num_deriv_comp)
 			num_deriv_comp--;
 	}
 
 	if (ddx || ddy) {
@@ -4469,21 +4469,21 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
 		LLVMValueRef six = LLVMConstInt(ctx->i32, 6, false);
 		LLVMValueRef z = LLVMBuildExtractElement(ctx->builder, result, two, "");
 		z = LLVMBuildSDiv(ctx->builder, z, six, "");
 		result = LLVMBuildInsertElement(ctx->builder, result, z, two, "");
 	} else if (instr->dest.ssa.num_components != 4)
 		result = trim_vector(ctx, result, instr->dest.ssa.num_components);
 
 write_result:
 	if (result) {
 		assert(instr->dest.is_ssa);
-		result = to_integer(ctx, result);
+		result = to_integer(&ctx->ac, result);
 		_mesa_hash_table_insert(ctx->defs, &instr->dest.ssa, result);
 	}
 }
 
 
 static void visit_phi(struct nir_to_llvm_context *ctx, nir_phi_instr *instr)
 {
 	LLVMTypeRef type = get_def_type(ctx, &instr->dest.ssa);
 	LLVMValueRef result = LLVMBuildPhi(ctx->builder, type, "");
 
@@ -4699,21 +4699,21 @@ handle_vs_input_decl(struct nir_to_llvm_context *ctx,
 		t_list = ac_build_indexed_load_const(&ctx->ac, t_list_ptr, t_offset);
 
 		input = ac_build_buffer_load_format(&ctx->ac, t_list,
 						    buffer_index,
 						    LLVMConstInt(ctx->i32, 0, false),
 						    true);
 
 		for (unsigned chan = 0; chan < 4; chan++) {
 			LLVMValueRef llvm_chan = LLVMConstInt(ctx->i32, chan, false);
 			ctx->inputs[radeon_llvm_reg_index_soa(idx, chan)] =
-				to_integer(ctx, LLVMBuildExtractElement(ctx->builder,
+				to_integer(&ctx->ac, LLVMBuildExtractElement(ctx->builder,
 							input, llvm_chan, ""));
 		}
 	}
 }
 
 static void interp_fs_input(struct nir_to_llvm_context *ctx,
 			    unsigned attr,
 			    LLVMValueRef interp_param,
 			    LLVMValueRef prim_mask,
 			    LLVMValueRef result[4])
@@ -4948,21 +4948,21 @@ setup_locals(struct nir_to_llvm_context *ctx,
 		for (j = 0; j < 4; j++) {
 			ctx->locals[i * 4 + j] =
 				si_build_alloca_undef(ctx, ctx->f32, "temp");
 		}
 	}
 }
 
 static LLVMValueRef
 emit_float_saturate(struct nir_to_llvm_context *ctx, LLVMValueRef v, float lo, float hi)
 {
-	v = to_float(ctx, v);
+	v = to_float(&ctx->ac, v);
 	v = emit_intrin_2f_param(ctx, "llvm.maxnum.f32", ctx->f32, v, LLVMConstReal(ctx->f32, lo));
 	return emit_intrin_2f_param(ctx, "llvm.minnum.f32", ctx->f32, v, LLVMConstReal(ctx->f32, hi));
 }
 
 
 static LLVMValueRef emit_pack_int16(struct nir_to_llvm_context *ctx,
 					LLVMValueRef src0, LLVMValueRef src1)
 {
 	LLVMValueRef const16 = LLVMConstInt(ctx->i32, 16, false);
 	LLVMValueRef comp[2];
@@ -5079,57 +5079,57 @@ si_llvm_init_export_args(struct nir_to_llvm_context *ctx,
 
 			args->compr = 1;
 			args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
 			args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
 			break;
 
 		case V_028714_SPI_SHADER_UINT16_ABGR: {
 			LLVMValueRef max = LLVMConstInt(ctx->i32, is_int8 ? 255 : 65535, 0);
 
 			for (unsigned chan = 0; chan < 4; chan++) {
-				val[chan] = to_integer(ctx, values[chan]);
+				val[chan] = to_integer(&ctx->ac, values[chan]);
 				val[chan] = emit_minmax_int(ctx, LLVMIntULT, val[chan], max);
 			}
 
 			args->compr = 1;
 			args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
 			args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
 			break;
 		}
 
 		case V_028714_SPI_SHADER_SINT16_ABGR: {
 			LLVMValueRef max = LLVMConstInt(ctx->i32, is_int8 ? 127 : 32767, 0);
 			LLVMValueRef min = LLVMConstInt(ctx->i32, is_int8 ? -128 : -32768, 0);
 
 			/* Clamp. */
 			for (unsigned chan = 0; chan < 4; chan++) {
-				val[chan] = to_integer(ctx, values[chan]);
+				val[chan] = to_integer(&ctx->ac, values[chan]);
 				val[chan] = emit_minmax_int(ctx, LLVMIntSLT, val[chan], max);
 				val[chan] = emit_minmax_int(ctx, LLVMIntSGT, val[chan], min);
 			}
 
 			args->compr = 1;
 			args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
 			args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
 			break;
 		}
 
 		default:
 		case V_028714_SPI_SHADER_32_ABGR:
 			memcpy(&args->out[0], values, sizeof(values[0]) * 4);
 			break;
 		}
 	} else
 		memcpy(&args->out[0], values, sizeof(values[0]) * 4);
 
 	for (unsigned i = 0; i < 4; ++i)
-		args->out[i] = to_float(ctx, args->out[i]);
+		args->out[i] = to_float(&ctx->ac, args->out[i]);
 }
 
 static void
 handle_vs_outputs_post(struct nir_to_llvm_context *ctx,
 		       struct ac_vs_output_info *outinfo)
 {
 	uint32_t param_count = 0;
 	unsigned target;
 	unsigned pos_idx, num_pos_exports = 0;
 	struct ac_export_args args, pos_args[4] = {};
@@ -5141,21 +5141,21 @@ handle_vs_outputs_post(struct nir_to_llvm_context *ctx,
 
 	if (ctx->output_mask & (1ull << VARYING_SLOT_CLIP_DIST0)) {
 		LLVMValueRef slots[8];
 		unsigned j;
 
 		if (outinfo->cull_dist_mask)
 			outinfo->cull_dist_mask <<= ctx->num_output_clips;
 
 		i = VARYING_SLOT_CLIP_DIST0;
 		for (j = 0; j < ctx->num_output_clips + ctx->num_output_culls; j++)
-			slots[j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
+			slots[j] = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
 							       ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
 
 		for (i = ctx->num_output_clips + ctx->num_output_culls; i < 8; i++)
 			slots[i] = LLVMGetUndef(ctx->f32);
 
 		if (ctx->num_output_clips + ctx->num_output_culls > 4) {
 			target = V_008DFC_SQ_EXP_POS + 3;
 			si_llvm_init_export_args(ctx, &slots[4], target, &args);
 			memcpy(&pos_args[target - V_008DFC_SQ_EXP_POS],
 			       &args, sizeof(args));
@@ -5167,21 +5167,21 @@ handle_vs_outputs_post(struct nir_to_llvm_context *ctx,
 		       &args, sizeof(args));
 
 	}
 
 	for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
 		LLVMValueRef values[4];
 		if (!(ctx->output_mask & (1ull << i)))
 			continue;
 
 		for (unsigned j = 0; j < 4; j++)
-			values[j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
+			values[j] = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
 					      ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
 
 		if (i == VARYING_SLOT_POS) {
 			target = V_008DFC_SQ_EXP_POS;
 		} else if (i == VARYING_SLOT_CLIP_DIST0) {
 			continue;
 		} else if (i == VARYING_SLOT_PSIZ) {
 			outinfo->writes_pointsize = true;
 			psize_value = values[0];
 			continue;
@@ -5643,34 +5643,34 @@ handle_fs_outputs_post(struct nir_to_llvm_context *ctx)
 	struct ac_export_args color_args[8];
 
 	for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
 		LLVMValueRef values[4];
 
 		if (!(ctx->output_mask & (1ull << i)))
 			continue;
 
 		if (i == FRAG_RESULT_DEPTH) {
 			ctx->shader_info->fs.writes_z = true;
-			depth = to_float(ctx, LLVMBuildLoad(ctx->builder,
+			depth = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
 							    ctx->outputs[radeon_llvm_reg_index_soa(i, 0)], ""));
 		} else if (i == FRAG_RESULT_STENCIL) {
 			ctx->shader_info->fs.writes_stencil = true;
-			stencil = to_float(ctx, LLVMBuildLoad(ctx->builder,
+			stencil = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
 							      ctx->outputs[radeon_llvm_reg_index_soa(i, 0)], ""));
 		} else if (i == FRAG_RESULT_SAMPLE_MASK) {
 			ctx->shader_info->fs.writes_sample_mask = true;
-			samplemask = to_float(ctx, LLVMBuildLoad(ctx->builder,
+			samplemask = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
 								  ctx->outputs[radeon_llvm_reg_index_soa(i, 0)], ""));
 		} else {
 			bool last = false;
 			for (unsigned j = 0; j < 4; j++)
-				values[j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
+				values[j] = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
 									ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
 
 			if (!ctx->shader_info->fs.writes_z && !ctx->shader_info->fs.writes_stencil && !ctx->shader_info->fs.writes_sample_mask)
 				last = ctx->output_mask <= ((1ull << (i + 1)) - 1);
 
 			bool ret = si_export_mrt_color(ctx, values, V_008DFC_SQ_EXP_MRT + (i - FRAG_RESULT_DATA0), last, &color_args[index]);
 			if (ret)
 				index++;
 		}
 	}
@@ -6185,21 +6185,21 @@ ac_gs_copy_shader_emit(struct nir_to_llvm_context *ctx)
 					       (slot * 4 + j) *
 					       ctx->gs_max_out_vertices * 16 * 4, false);
 
 			value = ac_build_intrinsic(&ctx->ac,
 						   "llvm.SI.buffer.load.dword.i32.i32",
 						   ctx->i32, args, 9,
 						   AC_FUNC_ATTR_READONLY |
 						   AC_FUNC_ATTR_LEGACY);
 
 			LLVMBuildStore(ctx->builder,
-				       to_float(ctx, value), ctx->outputs[radeon_llvm_reg_index_soa(i, j)]);
+				       to_float(&ctx->ac, value), ctx->outputs[radeon_llvm_reg_index_soa(i, j)]);
 		}
 		idx += slot_inc;
 	}
 	handle_vs_outputs_post(ctx, &ctx->shader_info->vs.outinfo);
 }
 
 void ac_create_gs_copy_shader(LLVMTargetMachineRef tm,
 			      struct nir_shader *geom_shader,
 			      struct ac_shader_binary *binary,
 			      struct ac_shader_config *config,
-- 
2.9.3



More information about the mesa-dev mailing list