radeonsi: set the calling convention for inlined function calls
otherwise the behavior is undefined Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
@@ -4445,3 +4445,11 @@ ac_build_load_helper_invocation(struct ac_llvm_context *ctx)
|
|||||||
result = LLVMBuildNot(ctx->builder, result, "");
|
result = LLVMBuildNot(ctx->builder, result, "");
|
||||||
return LLVMBuildSExt(ctx->builder, result, ctx->i32, "");
|
return LLVMBuildSExt(ctx->builder, result, ctx->i32, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMValueRef ac_build_call(struct ac_llvm_context *ctx, LLVMValueRef func,
|
||||||
|
LLVMValueRef *args, unsigned num_args)
|
||||||
|
{
|
||||||
|
LLVMValueRef ret = LLVMBuildCall(ctx->builder, func, args, num_args, "");
|
||||||
|
LLVMSetInstructionCallConv(ret, LLVMGetFunctionCallConv(func));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -720,6 +720,9 @@ ac_build_ddxy_interp(struct ac_llvm_context *ctx, LLVMValueRef interp_ij);
|
|||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
ac_build_load_helper_invocation(struct ac_llvm_context *ctx);
|
ac_build_load_helper_invocation(struct ac_llvm_context *ctx);
|
||||||
|
|
||||||
|
LLVMValueRef ac_build_call(struct ac_llvm_context *ctx, LLVMValueRef func,
|
||||||
|
LLVMValueRef *args, unsigned num_args);
|
||||||
|
|
||||||
LLVMValueRef ac_build_atomic_rmw(struct ac_llvm_context *ctx, LLVMAtomicRMWBinOp op,
|
LLVMValueRef ac_build_atomic_rmw(struct ac_llvm_context *ctx, LLVMAtomicRMWBinOp op,
|
||||||
LLVMValueRef ptr, LLVMValueRef val,
|
LLVMValueRef ptr, LLVMValueRef val,
|
||||||
const char *sync_scope);
|
const char *sync_scope);
|
||||||
|
@@ -667,7 +667,7 @@ void si_build_prim_discard_compute_shader(struct si_shader_context *ctx)
|
|||||||
vs_params[param_vertex_id] = index[i];
|
vs_params[param_vertex_id] = index[i];
|
||||||
vs_params[param_instance_id] = instance_id;
|
vs_params[param_instance_id] = instance_id;
|
||||||
|
|
||||||
LLVMValueRef ret = LLVMBuildCall(builder, vs, vs_params, num_vs_params, "");
|
LLVMValueRef ret = ac_build_call(&ctx->ac, vs, vs_params, num_vs_params);
|
||||||
for (unsigned chan = 0; chan < 4; chan++)
|
for (unsigned chan = 0; chan < 4; chan++)
|
||||||
pos[i][chan] = LLVMBuildExtractValue(builder, ret, chan, "");
|
pos[i][chan] = LLVMBuildExtractValue(builder, ret, chan, "");
|
||||||
}
|
}
|
||||||
|
@@ -6591,7 +6591,7 @@ static void si_build_wrapper_function(struct si_shader_context *ctx,
|
|||||||
out_idx += param_size;
|
out_idx += param_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = LLVMBuildCall(builder, parts[part], in, num_params, "");
|
ret = ac_build_call(&ctx->ac, parts[part], in, num_params);
|
||||||
|
|
||||||
if (is_merged_shader(ctx) &&
|
if (is_merged_shader(ctx) &&
|
||||||
part + 1 == next_shader_first_part) {
|
part + 1 == next_shader_first_part) {
|
||||||
|
Reference in New Issue
Block a user