[Mesa-dev] [PATCH v2 27/73] ac/nir: pass ac_llvm_context to *build_alloca* helpers

Nicolai Hähnle nhaehnle at gmail.com
Wed Jul 5 10:48:11 UTC 2017


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

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

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 9456b8d..d82e682 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -4939,52 +4939,52 @@ handle_fs_inputs_pre(struct nir_to_llvm_context *ctx,
 	if (ctx->input_mask & (1 << VARYING_SLOT_PNTC))
 		ctx->shader_info->fs.has_pcoord = true;
 	if (ctx->input_mask & (1 << VARYING_SLOT_PRIMITIVE_ID))
 		ctx->shader_info->fs.prim_id_input = true;
 	if (ctx->input_mask & (1 << VARYING_SLOT_LAYER))
 		ctx->shader_info->fs.layer_input = true;
 	ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
 }
 
 static LLVMValueRef
-ac_build_alloca(struct nir_to_llvm_context *ctx,
+ac_build_alloca(struct ac_llvm_context *ac,
                 LLVMTypeRef type,
                 const char *name)
 {
-	LLVMBuilderRef builder = ctx->builder;
+	LLVMBuilderRef builder = ac->builder;
 	LLVMBasicBlockRef current_block = LLVMGetInsertBlock(builder);
 	LLVMValueRef function = LLVMGetBasicBlockParent(current_block);
 	LLVMBasicBlockRef first_block = LLVMGetEntryBasicBlock(function);
 	LLVMValueRef first_instr = LLVMGetFirstInstruction(first_block);
-	LLVMBuilderRef first_builder = LLVMCreateBuilderInContext(ctx->context);
+	LLVMBuilderRef first_builder = LLVMCreateBuilderInContext(ac->context);
 	LLVMValueRef res;
 
 	if (first_instr) {
 		LLVMPositionBuilderBefore(first_builder, first_instr);
 	} else {
 		LLVMPositionBuilderAtEnd(first_builder, first_block);
 	}
 
 	res = LLVMBuildAlloca(first_builder, type, name);
 	LLVMBuildStore(builder, LLVMConstNull(type), res);
 
 	LLVMDisposeBuilder(first_builder);
 
 	return res;
 }
 
-static LLVMValueRef si_build_alloca_undef(struct nir_to_llvm_context *ctx,
+static LLVMValueRef si_build_alloca_undef(struct ac_llvm_context *ac,
 					  LLVMTypeRef type,
 					  const char *name)
 {
-	LLVMValueRef ptr = ac_build_alloca(ctx, type, name);
-	LLVMBuildStore(ctx->builder, LLVMGetUndef(type), ptr);
+	LLVMValueRef ptr = ac_build_alloca(ac, type, name);
+	LLVMBuildStore(ac->builder, LLVMGetUndef(type), ptr);
 	return ptr;
 }
 
 static void
 handle_shader_output_decl(struct nir_to_llvm_context *ctx,
 			  struct nir_variable *variable)
 {
 	int idx = variable->data.location + variable->data.index;
 	unsigned attrib_count = glsl_count_attribute_slots(variable->type, false);
 	uint64_t mask_attribs;
@@ -5013,21 +5013,21 @@ handle_shader_output_decl(struct nir_to_llvm_context *ctx,
 				attrib_count = 2;
 			else
 				attrib_count = 1;
 			mask_attribs = 1ull << idx;
 		}
 	}
 
 	for (unsigned i = 0; i < attrib_count; ++i) {
 		for (unsigned chan = 0; chan < 4; chan++) {
 			ctx->nir->outputs[radeon_llvm_reg_index_soa(idx + i, chan)] =
-		                       si_build_alloca_undef(ctx, ctx->f32, "");
+		                       si_build_alloca_undef(&ctx->ac, ctx->f32, "");
 		}
 	}
 	ctx->output_mask |= mask_attribs;
 }
 
 static void
 setup_locals(struct ac_nir_context *ctx,
 	     struct nir_function *func)
 {
 	int i, j;
@@ -5037,21 +5037,21 @@ setup_locals(struct ac_nir_context *ctx,
 		variable->data.driver_location = ctx->num_locals * 4;
 		ctx->num_locals += attrib_count;
 	}
 	ctx->locals = malloc(4 * ctx->num_locals * sizeof(LLVMValueRef));
 	if (!ctx->locals)
 	    return;
 
 	for (i = 0; i < ctx->num_locals; i++) {
 		for (j = 0; j < 4; j++) {
 			ctx->locals[i * 4 + j] =
-				si_build_alloca_undef(ctx->nctx, ctx->ac.f32, "temp");
+				si_build_alloca_undef(&ctx->ac, ctx->ac.f32, "temp");
 		}
 	}
 }
 
 static LLVMValueRef
 emit_float_saturate(struct ac_llvm_context *ctx, LLVMValueRef v, float lo, float hi)
 {
 	v = to_float(ctx, 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));
@@ -6066,21 +6066,21 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
 
 			shared_size *= 16;
 			var = LLVMAddGlobalInAddressSpace(ctx.module,
 							  LLVMArrayType(ctx.i8, shared_size),
 							  "compute_lds",
 							  LOCAL_ADDR_SPACE);
 			LLVMSetAlignment(var, 4);
 			ctx.shared_memory = LLVMBuildBitCast(ctx.builder, var, i8p, "");
 		}
 	} else if (nir->stage == MESA_SHADER_GEOMETRY) {
-		ctx.gs_next_vertex = ac_build_alloca(&ctx, ctx.i32, "gs_next_vertex");
+		ctx.gs_next_vertex = ac_build_alloca(&ctx.ac, ctx.i32, "gs_next_vertex");
 
 		ctx.gs_max_out_vertices = nir->info.gs.vertices_out;
 	} else if (nir->stage == MESA_SHADER_TESS_EVAL) {
 		ctx.tes_primitive_mode = nir->info.tess.primitive_mode;
 	}
 
 	ac_setup_rings(&ctx);
 
 	ctx.num_output_clips = nir->info.clip_distance_array_size;
 	ctx.num_output_culls = nir->info.cull_distance_array_size;
-- 
2.9.3



More information about the mesa-dev mailing list