mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 11:40:10 +01:00
amd/llvm: Transition to LLVM "opaque pointers"
For context, see LLVM opaque pointers: https://llvm.org/docs/OpaquePointers.html https://llvm.org/devmtg/2015-10/slides/Blaikie-OpaquePointerTypes.pdf This fixes the deprecation warnings in src/amd/llvm only. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15572>
This commit is contained in:
parent
6c0150c389
commit
279eea5bda
4 changed files with 72 additions and 71 deletions
|
|
@ -294,21 +294,20 @@ LLVMValueRef ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name,
|
||||||
LLVMTypeRef return_type, LLVMValueRef *params, unsigned param_count,
|
LLVMTypeRef return_type, LLVMValueRef *params, unsigned param_count,
|
||||||
unsigned attrib_mask)
|
unsigned attrib_mask)
|
||||||
{
|
{
|
||||||
LLVMValueRef function, call;
|
LLVMValueRef call;
|
||||||
bool set_callsite_attrs = !(attrib_mask & AC_FUNC_ATTR_LEGACY);
|
bool set_callsite_attrs = !(attrib_mask & AC_FUNC_ATTR_LEGACY);
|
||||||
|
|
||||||
function = LLVMGetNamedFunction(ctx->module, name);
|
LLVMTypeRef param_types[32];
|
||||||
|
assert(param_count <= 32);
|
||||||
|
for (unsigned i = 0; i < param_count; ++i) {
|
||||||
|
assert(params[i]);
|
||||||
|
param_types[i] = LLVMTypeOf(params[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
LLVMTypeRef function_type = LLVMFunctionType(return_type, param_types, param_count, 0);
|
||||||
|
LLVMValueRef function = LLVMGetNamedFunction(ctx->module, name);
|
||||||
|
|
||||||
if (!function) {
|
if (!function) {
|
||||||
LLVMTypeRef param_types[32], function_type;
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
assert(param_count <= 32);
|
|
||||||
|
|
||||||
for (i = 0; i < param_count; ++i) {
|
|
||||||
assert(params[i]);
|
|
||||||
param_types[i] = LLVMTypeOf(params[i]);
|
|
||||||
}
|
|
||||||
function_type = LLVMFunctionType(return_type, param_types, param_count, 0);
|
|
||||||
function = LLVMAddFunction(ctx->module, name, function_type);
|
function = LLVMAddFunction(ctx->module, name, function_type);
|
||||||
|
|
||||||
LLVMSetFunctionCallConv(function, LLVMCCallConv);
|
LLVMSetFunctionCallConv(function, LLVMCCallConv);
|
||||||
|
|
@ -318,7 +317,7 @@ LLVMValueRef ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name,
|
||||||
ac_add_func_attributes(ctx->context, function, attrib_mask);
|
ac_add_func_attributes(ctx->context, function, attrib_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
call = LLVMBuildCall(ctx->builder, function, params, param_count, "");
|
call = LLVMBuildCall2(ctx->builder, function_type, function, params, param_count, "");
|
||||||
if (set_callsite_attrs)
|
if (set_callsite_attrs)
|
||||||
ac_add_func_attributes(ctx->context, call, attrib_mask);
|
ac_add_func_attributes(ctx->context, call, attrib_mask);
|
||||||
return call;
|
return call;
|
||||||
|
|
@ -420,27 +419,27 @@ void ac_build_optimization_barrier(struct ac_llvm_context *ctx, LLVMValueRef *pg
|
||||||
if (!pgpr) {
|
if (!pgpr) {
|
||||||
LLVMTypeRef ftype = LLVMFunctionType(ctx->voidt, NULL, 0, false);
|
LLVMTypeRef ftype = LLVMFunctionType(ctx->voidt, NULL, 0, false);
|
||||||
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, "", true, false);
|
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, "", true, false);
|
||||||
LLVMBuildCall(builder, inlineasm, NULL, 0, "");
|
LLVMBuildCall2(builder, ftype, inlineasm, NULL, 0, "");
|
||||||
} else if (LLVMTypeOf(*pgpr) == ctx->i32) {
|
} else if (LLVMTypeOf(*pgpr) == ctx->i32) {
|
||||||
/* Simple version for i32 that allows the caller to set LLVM metadata on the call
|
/* Simple version for i32 that allows the caller to set LLVM metadata on the call
|
||||||
* instruction. */
|
* instruction. */
|
||||||
LLVMTypeRef ftype = LLVMFunctionType(ctx->i32, &ctx->i32, 1, false);
|
LLVMTypeRef ftype = LLVMFunctionType(ctx->i32, &ctx->i32, 1, false);
|
||||||
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
||||||
|
|
||||||
*pgpr = LLVMBuildCall(builder, inlineasm, pgpr, 1, "");
|
*pgpr = LLVMBuildCall2(builder, ftype, inlineasm, pgpr, 1, "");
|
||||||
} else if (LLVMTypeOf(*pgpr) == ctx->i16) {
|
} else if (LLVMTypeOf(*pgpr) == ctx->i16) {
|
||||||
/* Simple version for i16 that allows the caller to set LLVM metadata on the call
|
/* Simple version for i16 that allows the caller to set LLVM metadata on the call
|
||||||
* instruction. */
|
* instruction. */
|
||||||
LLVMTypeRef ftype = LLVMFunctionType(ctx->i16, &ctx->i16, 1, false);
|
LLVMTypeRef ftype = LLVMFunctionType(ctx->i16, &ctx->i16, 1, false);
|
||||||
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
||||||
|
|
||||||
*pgpr = LLVMBuildCall(builder, inlineasm, pgpr, 1, "");
|
*pgpr = LLVMBuildCall2(builder, ftype, inlineasm, pgpr, 1, "");
|
||||||
} else if (LLVMGetTypeKind(LLVMTypeOf(*pgpr)) == LLVMPointerTypeKind) {
|
} else if (LLVMGetTypeKind(LLVMTypeOf(*pgpr)) == LLVMPointerTypeKind) {
|
||||||
LLVMTypeRef type = LLVMTypeOf(*pgpr);
|
LLVMTypeRef type = LLVMTypeOf(*pgpr);
|
||||||
LLVMTypeRef ftype = LLVMFunctionType(type, &type, 1, false);
|
LLVMTypeRef ftype = LLVMFunctionType(type, &type, 1, false);
|
||||||
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
||||||
|
|
||||||
*pgpr = LLVMBuildCall(builder, inlineasm, pgpr, 1, "");
|
*pgpr = LLVMBuildCall2(builder, ftype, inlineasm, pgpr, 1, "");
|
||||||
} else {
|
} else {
|
||||||
LLVMTypeRef ftype = LLVMFunctionType(ctx->i32, &ctx->i32, 1, false);
|
LLVMTypeRef ftype = LLVMFunctionType(ctx->i32, &ctx->i32, 1, false);
|
||||||
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
LLVMValueRef inlineasm = LLVMConstInlineAsm(ftype, code, constraint, true, false);
|
||||||
|
|
@ -461,7 +460,7 @@ void ac_build_optimization_barrier(struct ac_llvm_context *ctx, LLVMValueRef *pg
|
||||||
|
|
||||||
vgpr = LLVMBuildBitCast(builder, vgpr, LLVMVectorType(ctx->i32, vgpr_size / 4), "");
|
vgpr = LLVMBuildBitCast(builder, vgpr, LLVMVectorType(ctx->i32, vgpr_size / 4), "");
|
||||||
vgpr0 = LLVMBuildExtractElement(builder, vgpr, ctx->i32_0, "");
|
vgpr0 = LLVMBuildExtractElement(builder, vgpr, ctx->i32_0, "");
|
||||||
vgpr0 = LLVMBuildCall(builder, inlineasm, &vgpr0, 1, "");
|
vgpr0 = LLVMBuildCall2(builder, ftype, inlineasm, &vgpr0, 1, "");
|
||||||
vgpr = LLVMBuildInsertElement(builder, vgpr, vgpr0, ctx->i32_0, "");
|
vgpr = LLVMBuildInsertElement(builder, vgpr, vgpr0, ctx->i32_0, "");
|
||||||
vgpr = LLVMBuildBitCast(builder, vgpr, vgpr_type, "");
|
vgpr = LLVMBuildBitCast(builder, vgpr, vgpr_type, "");
|
||||||
|
|
||||||
|
|
@ -574,7 +573,7 @@ LLVMValueRef ac_build_varying_gather_values(struct ac_llvm_context *ctx, LLVMVal
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
||||||
unsigned value_count, unsigned value_stride, bool load,
|
unsigned value_count, unsigned value_stride,
|
||||||
bool always_vector)
|
bool always_vector)
|
||||||
{
|
{
|
||||||
LLVMBuilderRef builder = ctx->builder;
|
LLVMBuilderRef builder = ctx->builder;
|
||||||
|
|
@ -582,16 +581,12 @@ LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMVa
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
if (value_count == 1 && !always_vector) {
|
if (value_count == 1 && !always_vector) {
|
||||||
if (load)
|
|
||||||
return LLVMBuildLoad(builder, values[0], "");
|
|
||||||
return values[0];
|
return values[0];
|
||||||
} else if (!value_count)
|
} else if (!value_count)
|
||||||
unreachable("value_count is 0");
|
unreachable("value_count is 0");
|
||||||
|
|
||||||
for (i = 0; i < value_count; i++) {
|
for (i = 0; i < value_count; i++) {
|
||||||
LLVMValueRef value = values[i * value_stride];
|
LLVMValueRef value = values[i * value_stride];
|
||||||
if (load)
|
|
||||||
value = LLVMBuildLoad(builder, value, "");
|
|
||||||
|
|
||||||
if (!i)
|
if (!i)
|
||||||
vec = LLVMGetUndef(LLVMVectorType(LLVMTypeOf(value), value_count));
|
vec = LLVMGetUndef(LLVMVectorType(LLVMTypeOf(value), value_count));
|
||||||
|
|
@ -604,7 +599,7 @@ LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMVa
|
||||||
LLVMValueRef ac_build_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
LLVMValueRef ac_build_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
||||||
unsigned value_count)
|
unsigned value_count)
|
||||||
{
|
{
|
||||||
return ac_build_gather_values_extended(ctx, values, value_count, 1, false, false);
|
return ac_build_gather_values_extended(ctx, values, value_count, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVMValueRef ac_build_concat(struct ac_llvm_context *ctx, LLVMValueRef a, LLVMValueRef b)
|
LLVMValueRef ac_build_concat(struct ac_llvm_context *ctx, LLVMValueRef a, LLVMValueRef b)
|
||||||
|
|
@ -1031,8 +1026,8 @@ LLVMValueRef ac_build_gep0(struct ac_llvm_context *ctx, LLVMValueRef base_ptr, L
|
||||||
|
|
||||||
LLVMValueRef ac_build_pointer_add(struct ac_llvm_context *ctx, LLVMValueRef ptr, LLVMValueRef index)
|
LLVMValueRef ac_build_pointer_add(struct ac_llvm_context *ctx, LLVMValueRef ptr, LLVMValueRef index)
|
||||||
{
|
{
|
||||||
return LLVMBuildPointerCast(ctx->builder, LLVMBuildGEP(ctx->builder, ptr, &index, 1, ""),
|
LLVMValueRef offset_ptr = LLVMBuildGEP(ctx->builder, ptr, &index, 1, "");
|
||||||
LLVMTypeOf(ptr), "");
|
return LLVMBuildPointerCast(ctx->builder, offset_ptr, LLVMTypeOf(ptr), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ac_build_indexed_store(struct ac_llvm_context *ctx, LLVMValueRef base_ptr, LLVMValueRef index,
|
void ac_build_indexed_store(struct ac_llvm_context *ctx, LLVMValueRef base_ptr, LLVMValueRef index,
|
||||||
|
|
@ -1315,7 +1310,7 @@ LLVMValueRef ac_build_buffer_load_format(struct ac_llvm_context *ctx, LLVMValueR
|
||||||
|
|
||||||
LLVMValueRef args[] = {ac_build_gather_values(ctx, addr_comp, 2),
|
LLVMValueRef args[] = {ac_build_gather_values(ctx, addr_comp, 2),
|
||||||
LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, "")};
|
LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, "")};
|
||||||
LLVMValueRef res = LLVMBuildCall(ctx->builder, inlineasm, args, 2, "");
|
LLVMValueRef res = LLVMBuildCall2(ctx->builder, calltype, inlineasm, args, 2, "");
|
||||||
|
|
||||||
return ac_build_concat(ctx, ac_trim_vector(ctx, res, num_channels),
|
return ac_build_concat(ctx, ac_trim_vector(ctx, res, num_channels),
|
||||||
ac_llvm_extract_elem(ctx, res, 4));
|
ac_llvm_extract_elem(ctx, res, 4));
|
||||||
|
|
@ -2359,7 +2354,7 @@ LLVMValueRef ac_build_cvt_pknorm_i16_f16(struct ac_llvm_context *ctx,
|
||||||
LLVMValueRef code = LLVMConstInlineAsm(calltype,
|
LLVMValueRef code = LLVMConstInlineAsm(calltype,
|
||||||
"v_cvt_pknorm_i16_f16 $0, $1, $2", "=v,v,v",
|
"v_cvt_pknorm_i16_f16 $0, $1, $2", "=v,v,v",
|
||||||
false, false);
|
false, false);
|
||||||
return LLVMBuildCall(ctx->builder, code, args, 2, "");
|
return LLVMBuildCall2(ctx->builder, calltype, code, args, 2, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVMValueRef ac_build_cvt_pknorm_u16_f16(struct ac_llvm_context *ctx,
|
LLVMValueRef ac_build_cvt_pknorm_u16_f16(struct ac_llvm_context *ctx,
|
||||||
|
|
@ -2370,7 +2365,7 @@ LLVMValueRef ac_build_cvt_pknorm_u16_f16(struct ac_llvm_context *ctx,
|
||||||
LLVMValueRef code = LLVMConstInlineAsm(calltype,
|
LLVMValueRef code = LLVMConstInlineAsm(calltype,
|
||||||
"v_cvt_pknorm_u16_f16 $0, $1, $2", "=v,v,v",
|
"v_cvt_pknorm_u16_f16 $0, $1, $2", "=v,v,v",
|
||||||
false, false);
|
false, false);
|
||||||
return LLVMBuildCall(ctx->builder, code, args, 2, "");
|
return LLVMBuildCall2(ctx->builder, calltype, code, args, 2, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The 8-bit and 10-bit clamping is for HW workarounds. */
|
/* The 8-bit and 10-bit clamping is for HW workarounds. */
|
||||||
|
|
@ -2998,7 +2993,7 @@ void ac_declare_lds_as_pointer(struct ac_llvm_context *ctx)
|
||||||
|
|
||||||
LLVMValueRef ac_lds_load(struct ac_llvm_context *ctx, LLVMValueRef dw_addr)
|
LLVMValueRef ac_lds_load(struct ac_llvm_context *ctx, LLVMValueRef dw_addr)
|
||||||
{
|
{
|
||||||
return LLVMBuildLoad(ctx->builder, ac_build_gep0(ctx, ctx->lds, dw_addr), "");
|
return LLVMBuildLoad2(ctx->builder, ctx->i32, ac_build_gep0(ctx, ctx->lds, dw_addr), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ac_lds_store(struct ac_llvm_context *ctx, LLVMValueRef dw_addr, LLVMValueRef value)
|
void ac_lds_store(struct ac_llvm_context *ctx, LLVMValueRef dw_addr, LLVMValueRef value)
|
||||||
|
|
@ -3194,7 +3189,7 @@ static void ac_branch_exited(struct ac_llvm_context *ctx)
|
||||||
*
|
*
|
||||||
* This is an optional optimization that only kills whole inactive quads.
|
* This is an optional optimization that only kills whole inactive quads.
|
||||||
*/
|
*/
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->builder, ctx->postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->builder, ctx->i1, ctx->postponed_kill, "");
|
||||||
ac_build_kill_if_false(ctx, ac_build_wqm_vote(ctx, cond));
|
ac_build_kill_if_false(ctx, ac_build_wqm_vote(ctx, cond));
|
||||||
ctx->conditional_demote_seen = false;
|
ctx->conditional_demote_seen = false;
|
||||||
}
|
}
|
||||||
|
|
@ -4195,7 +4190,8 @@ void ac_build_wg_wavescan_top(struct ac_llvm_context *ctx, struct ac_wg_scan *ws
|
||||||
|
|
||||||
tmp = LLVMBuildICmp(builder, LLVMIntEQ, tid, last_lane, "");
|
tmp = LLVMBuildICmp(builder, LLVMIntEQ, tid, last_lane, "");
|
||||||
ac_build_ifcc(ctx, tmp, 1000);
|
ac_build_ifcc(ctx, tmp, 1000);
|
||||||
LLVMBuildStore(builder, ws->src, LLVMBuildGEP(builder, ws->scratch, &ws->waveidx, 1, ""));
|
LLVMBuildStore(builder, ws->src,
|
||||||
|
LLVMBuildGEP2(builder, LLVMTypeOf(ws->src), ws->scratch, &ws->waveidx, 1, ""));
|
||||||
ac_build_endif(ctx, 1000);
|
ac_build_endif(ctx, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4235,7 +4231,8 @@ void ac_build_wg_wavescan_bottom(struct ac_llvm_context *ctx, struct ac_wg_scan
|
||||||
tmp = LLVMBuildICmp(builder, LLVMIntULT, tid, ws->waveidx, "");
|
tmp = LLVMBuildICmp(builder, LLVMIntULT, tid, ws->waveidx, "");
|
||||||
ac_build_ifcc(ctx, tmp, 1001);
|
ac_build_ifcc(ctx, tmp, 1001);
|
||||||
{
|
{
|
||||||
tmp = LLVMBuildLoad(builder, LLVMBuildGEP(builder, ws->scratch, &tid, 1, ""), "");
|
tmp = LLVMBuildLoad2(builder, LLVMTypeOf(ws->src),
|
||||||
|
LLVMBuildGEP2(builder, LLVMTypeOf(ws->src), ws->scratch, &tid, 1, ""), "");
|
||||||
|
|
||||||
ac_build_optimization_barrier(ctx, &tmp, false);
|
ac_build_optimization_barrier(ctx, &tmp, false);
|
||||||
|
|
||||||
|
|
@ -4472,7 +4469,7 @@ LLVMValueRef ac_build_is_helper_invocation(struct ac_llvm_context *ctx)
|
||||||
LLVMValueRef exact =
|
LLVMValueRef exact =
|
||||||
ac_build_intrinsic(ctx, "llvm.amdgcn.ps.live", ctx->i1, NULL, 0, AC_FUNC_ATTR_READNONE);
|
ac_build_intrinsic(ctx, "llvm.amdgcn.ps.live", ctx->i1, NULL, 0, AC_FUNC_ATTR_READNONE);
|
||||||
|
|
||||||
LLVMValueRef postponed = LLVMBuildLoad(ctx->builder, ctx->postponed_kill, "");
|
LLVMValueRef postponed = LLVMBuildLoad2(ctx->builder, ctx->i1, ctx->postponed_kill, "");
|
||||||
return LLVMBuildNot(ctx->builder, LLVMBuildAnd(ctx->builder, exact, postponed, ""), "");
|
return LLVMBuildNot(ctx->builder, LLVMBuildAnd(ctx->builder, exact, postponed, ""), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4745,7 +4742,7 @@ void ac_build_s_endpgm(struct ac_llvm_context *ctx)
|
||||||
{
|
{
|
||||||
LLVMTypeRef calltype = LLVMFunctionType(ctx->voidt, NULL, 0, false);
|
LLVMTypeRef calltype = LLVMFunctionType(ctx->voidt, NULL, 0, false);
|
||||||
LLVMValueRef code = LLVMConstInlineAsm(calltype, "s_endpgm", "", true, false);
|
LLVMValueRef code = LLVMConstInlineAsm(calltype, "s_endpgm", "", true, false);
|
||||||
LLVMBuildCall(ctx->builder, code, NULL, 0, "");
|
LLVMBuildCall2(ctx->builder, calltype, code, NULL, 0, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ LLVMValueRef ac_build_varying_gather_values(struct ac_llvm_context *ctx, LLVMVal
|
||||||
unsigned value_count, unsigned component);
|
unsigned value_count, unsigned component);
|
||||||
|
|
||||||
LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
LLVMValueRef ac_build_gather_values_extended(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
||||||
unsigned value_count, unsigned value_stride, bool load,
|
unsigned value_count, unsigned value_stride,
|
||||||
bool always_vector);
|
bool always_vector);
|
||||||
LLVMValueRef ac_build_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
LLVMValueRef ac_build_gather_values(struct ac_llvm_context *ctx, LLVMValueRef *values,
|
||||||
unsigned value_count);
|
unsigned value_count);
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ static LLVMValueRef get_src(struct ac_nir_context *nir, nir_src src)
|
||||||
return nir->ssa_defs[src.ssa->index];
|
return nir->ssa_defs[src.ssa->index];
|
||||||
}
|
}
|
||||||
|
|
||||||
static LLVMValueRef get_memory_ptr(struct ac_nir_context *ctx, nir_src src, unsigned bit_size, unsigned c_off)
|
static LLVMValueRef get_memory_ptr_t(struct ac_nir_context *ctx, nir_src src, LLVMTypeRef elem_type, unsigned c_off)
|
||||||
{
|
{
|
||||||
LLVMValueRef ptr = get_src(ctx, src);
|
LLVMValueRef ptr = get_src(ctx, src);
|
||||||
LLVMValueRef lds_i8 = ctx->ac.lds;
|
LLVMValueRef lds_i8 = ctx->ac.lds;
|
||||||
|
|
@ -95,12 +95,15 @@ static LLVMValueRef get_memory_ptr(struct ac_nir_context *ctx, nir_src src, unsi
|
||||||
lds_i8 = LLVMBuildBitCast(ctx->ac.builder, ctx->ac.lds, LLVMPointerType(ctx->ac.i8, AC_ADDR_SPACE_LDS), "");
|
lds_i8 = LLVMBuildBitCast(ctx->ac.builder, ctx->ac.lds, LLVMPointerType(ctx->ac.i8, AC_ADDR_SPACE_LDS), "");
|
||||||
|
|
||||||
ptr = LLVMBuildAdd(ctx->ac.builder, ptr, LLVMConstInt(ctx->ac.i32, c_off, 0), "");
|
ptr = LLVMBuildAdd(ctx->ac.builder, ptr, LLVMConstInt(ctx->ac.i32, c_off, 0), "");
|
||||||
ptr = LLVMBuildGEP(ctx->ac.builder, lds_i8, &ptr, 1, "");
|
ptr = LLVMBuildGEP2(ctx->ac.builder, ctx->ac.i8, lds_i8, &ptr, 1, "");
|
||||||
int addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
|
int addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
|
||||||
|
|
||||||
LLVMTypeRef type = LLVMIntTypeInContext(ctx->ac.context, bit_size);
|
return LLVMBuildBitCast(ctx->ac.builder, ptr, LLVMPointerType(elem_type, addr_space), "");
|
||||||
|
}
|
||||||
|
|
||||||
return LLVMBuildBitCast(ctx->ac.builder, ptr, LLVMPointerType(type, addr_space), "");
|
static LLVMValueRef get_memory_ptr(struct ac_nir_context *ctx, nir_src src, unsigned bit_size, unsigned c_off)
|
||||||
|
{
|
||||||
|
return get_memory_ptr_t(ctx, src, LLVMIntTypeInContext(ctx->ac.context, bit_size), c_off);
|
||||||
}
|
}
|
||||||
|
|
||||||
static LLVMBasicBlockRef get_block(struct ac_nir_context *nir, const struct nir_block *b)
|
static LLVMBasicBlockRef get_block(struct ac_nir_context *nir, const struct nir_block *b)
|
||||||
|
|
@ -1675,14 +1678,13 @@ static LLVMValueRef visit_load_push_constant(struct ac_nir_context *ctx, nir_int
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr =
|
ptr = LLVMBuildGEP(ctx->ac.builder, ac_get_arg(&ctx->ac, ctx->args->push_constants), &addr, 1, "");
|
||||||
LLVMBuildGEP(ctx->ac.builder, ac_get_arg(&ctx->ac, ctx->args->push_constants), &addr, 1, "");
|
|
||||||
|
|
||||||
if (instr->dest.ssa.bit_size == 8) {
|
if (instr->dest.ssa.bit_size == 8) {
|
||||||
unsigned load_dwords = instr->dest.ssa.num_components > 1 ? 2 : 1;
|
unsigned load_dwords = instr->dest.ssa.num_components > 1 ? 2 : 1;
|
||||||
LLVMTypeRef vec_type = LLVMVectorType(ctx->ac.i8, 4 * load_dwords);
|
LLVMTypeRef vec_type = LLVMVectorType(ctx->ac.i8, 4 * load_dwords);
|
||||||
ptr = ac_cast_ptr(&ctx->ac, ptr, vec_type);
|
ptr = ac_cast_ptr(&ctx->ac, ptr, vec_type);
|
||||||
LLVMValueRef res = LLVMBuildLoad(ctx->ac.builder, ptr, "");
|
LLVMValueRef res = LLVMBuildLoad2(ctx->ac.builder, vec_type, ptr, "");
|
||||||
|
|
||||||
LLVMValueRef params[3];
|
LLVMValueRef params[3];
|
||||||
if (load_dwords > 1) {
|
if (load_dwords > 1) {
|
||||||
|
|
@ -1710,7 +1712,7 @@ static LLVMValueRef visit_load_push_constant(struct ac_nir_context *ctx, nir_int
|
||||||
unsigned load_dwords = instr->dest.ssa.num_components / 2 + 1;
|
unsigned load_dwords = instr->dest.ssa.num_components / 2 + 1;
|
||||||
LLVMTypeRef vec_type = LLVMVectorType(ctx->ac.i16, 2 * load_dwords);
|
LLVMTypeRef vec_type = LLVMVectorType(ctx->ac.i16, 2 * load_dwords);
|
||||||
ptr = ac_cast_ptr(&ctx->ac, ptr, vec_type);
|
ptr = ac_cast_ptr(&ctx->ac, ptr, vec_type);
|
||||||
LLVMValueRef res = LLVMBuildLoad(ctx->ac.builder, ptr, "");
|
LLVMValueRef res = LLVMBuildLoad2(ctx->ac.builder, vec_type, ptr, "");
|
||||||
res = LLVMBuildBitCast(ctx->ac.builder, res, vec_type, "");
|
res = LLVMBuildBitCast(ctx->ac.builder, res, vec_type, "");
|
||||||
LLVMValueRef cond = LLVMBuildLShr(ctx->ac.builder, addr, ctx->ac.i32_1, "");
|
LLVMValueRef cond = LLVMBuildLShr(ctx->ac.builder, addr, ctx->ac.i32_1, "");
|
||||||
cond = LLVMBuildTrunc(ctx->ac.builder, cond, ctx->ac.i1, "");
|
cond = LLVMBuildTrunc(ctx->ac.builder, cond, ctx->ac.i1, "");
|
||||||
|
|
@ -1728,9 +1730,10 @@ static LLVMValueRef visit_load_push_constant(struct ac_nir_context *ctx, nir_int
|
||||||
return LLVMBuildBitCast(ctx->ac.builder, res, get_def_type(ctx, &instr->dest.ssa), "");
|
return LLVMBuildBitCast(ctx->ac.builder, res, get_def_type(ctx, &instr->dest.ssa), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = ac_cast_ptr(&ctx->ac, ptr, get_def_type(ctx, &instr->dest.ssa));
|
LLVMTypeRef ptr_type = get_def_type(ctx, &instr->dest.ssa);
|
||||||
|
ptr = ac_cast_ptr(&ctx->ac, ptr, ptr_type);
|
||||||
|
|
||||||
return LLVMBuildLoad(ctx->ac.builder, ptr, "");
|
return LLVMBuildLoad2(ctx->ac.builder, ptr_type, ptr, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
static LLVMValueRef visit_get_ssbo_size(struct ac_nir_context *ctx,
|
static LLVMValueRef visit_get_ssbo_size(struct ac_nir_context *ctx,
|
||||||
|
|
@ -1797,7 +1800,7 @@ static LLVMValueRef enter_waterfall_ssbo(struct ac_nir_context *ctx, struct wate
|
||||||
static void visit_store_ssbo(struct ac_nir_context *ctx, nir_intrinsic_instr *instr)
|
static void visit_store_ssbo(struct ac_nir_context *ctx, nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7000);
|
ac_build_ifcc(&ctx->ac, cond, 7000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1954,7 +1957,7 @@ static LLVMValueRef emit_ssbo_comp_swap_64(struct ac_nir_context *ctx, LLVMValue
|
||||||
static LLVMValueRef visit_atomic_ssbo(struct ac_nir_context *ctx, nir_intrinsic_instr *instr)
|
static LLVMValueRef visit_atomic_ssbo(struct ac_nir_context *ctx, nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7001);
|
ac_build_ifcc(&ctx->ac, cond, 7001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2128,7 +2131,7 @@ static LLVMValueRef visit_load_global(struct ac_nir_context *ctx,
|
||||||
|
|
||||||
addr = LLVMBuildIntToPtr(ctx->ac.builder, addr, ptr_type, "");
|
addr = LLVMBuildIntToPtr(ctx->ac.builder, addr, ptr_type, "");
|
||||||
|
|
||||||
val = LLVMBuildLoad(ctx->ac.builder, addr, "");
|
val = LLVMBuildLoad2(ctx->ac.builder, result_type, addr, "");
|
||||||
|
|
||||||
if (nir_intrinsic_access(instr) & (ACCESS_COHERENT | ACCESS_VOLATILE)) {
|
if (nir_intrinsic_access(instr) & (ACCESS_COHERENT | ACCESS_VOLATILE)) {
|
||||||
LLVMSetOrdering(val, LLVMAtomicOrderingMonotonic);
|
LLVMSetOrdering(val, LLVMAtomicOrderingMonotonic);
|
||||||
|
|
@ -2142,7 +2145,7 @@ static void visit_store_global(struct ac_nir_context *ctx,
|
||||||
nir_intrinsic_instr *instr)
|
nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7002);
|
ac_build_ifcc(&ctx->ac, cond, 7002);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2170,7 +2173,7 @@ static LLVMValueRef visit_global_atomic(struct ac_nir_context *ctx,
|
||||||
nir_intrinsic_instr *instr)
|
nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7002);
|
ac_build_ifcc(&ctx->ac, cond, 7002);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2305,7 +2308,7 @@ static unsigned type_scalar_size_bytes(const struct glsl_type *type)
|
||||||
static void visit_store_output(struct ac_nir_context *ctx, nir_intrinsic_instr *instr)
|
static void visit_store_output(struct ac_nir_context *ctx, nir_intrinsic_instr *instr)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7002);
|
ac_build_ifcc(&ctx->ac, cond, 7002);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2363,8 +2366,7 @@ static void visit_store_output(struct ac_nir_context *ctx, nir_intrinsic_instr *
|
||||||
* using read-modify-write.
|
* using read-modify-write.
|
||||||
*/
|
*/
|
||||||
index = LLVMConstInt(ctx->ac.i32, nir_intrinsic_io_semantics(instr).high_16bits, 0);
|
index = LLVMConstInt(ctx->ac.i32, nir_intrinsic_io_semantics(instr).high_16bits, 0);
|
||||||
output = LLVMBuildLoad(ctx->ac.builder, output_addr, "");
|
output = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.v2f16, output_addr, "");
|
||||||
output = LLVMBuildBitCast(ctx->ac.builder, output, ctx->ac.v2f16, "");
|
|
||||||
output = LLVMBuildInsertElement(ctx->ac.builder, output, value, index, "");
|
output = LLVMBuildInsertElement(ctx->ac.builder, output, value, index, "");
|
||||||
value = LLVMBuildBitCast(ctx->ac.builder, output, ctx->ac.f32, "");
|
value = LLVMBuildBitCast(ctx->ac.builder, output, ctx->ac.f32, "");
|
||||||
}
|
}
|
||||||
|
|
@ -2621,7 +2623,7 @@ static void visit_image_store(struct ac_nir_context *ctx, const nir_intrinsic_in
|
||||||
bool bindless)
|
bool bindless)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7003);
|
ac_build_ifcc(&ctx->ac, cond, 7003);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2695,7 +2697,7 @@ static LLVMValueRef visit_image_atomic(struct ac_nir_context *ctx, const nir_int
|
||||||
bool bindless)
|
bool bindless)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7004);
|
ac_build_ifcc(&ctx->ac, cond, 7004);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2984,7 +2986,7 @@ static void emit_demote(struct ac_nir_context *ctx, const nir_intrinsic_instr *i
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLVMValueRef mask = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef mask = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
mask = LLVMBuildAnd(ctx->ac.builder, mask, cond, "");
|
mask = LLVMBuildAnd(ctx->ac.builder, mask, cond, "");
|
||||||
LLVMBuildStore(ctx->ac.builder, mask, ctx->ac.postponed_kill);
|
LLVMBuildStore(ctx->ac.builder, mask, ctx->ac.postponed_kill);
|
||||||
|
|
||||||
|
|
@ -3082,12 +3084,13 @@ static LLVMValueRef visit_load_shared(struct ac_nir_context *ctx, const nir_intr
|
||||||
LLVMValueRef values[4], derived_ptr, index, ret;
|
LLVMValueRef values[4], derived_ptr, index, ret;
|
||||||
unsigned const_off = nir_intrinsic_base(instr);
|
unsigned const_off = nir_intrinsic_base(instr);
|
||||||
|
|
||||||
LLVMValueRef ptr = get_memory_ptr(ctx, instr->src[0], instr->dest.ssa.bit_size, const_off);
|
LLVMTypeRef elem_type = LLVMIntTypeInContext(ctx->ac.context, instr->dest.ssa.bit_size);
|
||||||
|
LLVMValueRef ptr = get_memory_ptr_t(ctx, instr->src[0], elem_type, const_off);
|
||||||
|
|
||||||
for (int chan = 0; chan < instr->num_components; chan++) {
|
for (int chan = 0; chan < instr->num_components; chan++) {
|
||||||
index = LLVMConstInt(ctx->ac.i32, chan, 0);
|
index = LLVMConstInt(ctx->ac.i32, chan, 0);
|
||||||
derived_ptr = LLVMBuildGEP(ctx->ac.builder, ptr, &index, 1, "");
|
derived_ptr = LLVMBuildGEP2(ctx->ac.builder, elem_type, ptr, &index, 1, "");
|
||||||
values[chan] = LLVMBuildLoad(ctx->ac.builder, derived_ptr, "");
|
values[chan] = LLVMBuildLoad2(ctx->ac.builder, elem_type, derived_ptr, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ac_build_gather_values(&ctx->ac, values, instr->num_components);
|
ret = ac_build_gather_values(&ctx->ac, values, instr->num_components);
|
||||||
|
|
@ -3101,7 +3104,8 @@ static void visit_store_shared(struct ac_nir_context *ctx, const nir_intrinsic_i
|
||||||
LLVMBuilderRef builder = ctx->ac.builder;
|
LLVMBuilderRef builder = ctx->ac.builder;
|
||||||
|
|
||||||
unsigned const_off = nir_intrinsic_base(instr);
|
unsigned const_off = nir_intrinsic_base(instr);
|
||||||
LLVMValueRef ptr = get_memory_ptr(ctx, instr->src[1], instr->src[0].ssa->bit_size, const_off);
|
LLVMTypeRef elem_type = LLVMIntTypeInContext(ctx->ac.context, instr->src[0].ssa->bit_size);
|
||||||
|
LLVMValueRef ptr = get_memory_ptr_t(ctx, instr->src[1], elem_type, const_off);
|
||||||
LLVMValueRef src = get_src(ctx, instr->src[0]);
|
LLVMValueRef src = get_src(ctx, instr->src[0]);
|
||||||
|
|
||||||
int writemask = nir_intrinsic_write_mask(instr);
|
int writemask = nir_intrinsic_write_mask(instr);
|
||||||
|
|
@ -3111,7 +3115,7 @@ static void visit_store_shared(struct ac_nir_context *ctx, const nir_intrinsic_i
|
||||||
}
|
}
|
||||||
data = ac_llvm_extract_elem(&ctx->ac, src, chan);
|
data = ac_llvm_extract_elem(&ctx->ac, src, chan);
|
||||||
index = LLVMConstInt(ctx->ac.i32, chan, 0);
|
index = LLVMConstInt(ctx->ac.i32, chan, 0);
|
||||||
derived_ptr = LLVMBuildGEP(builder, ptr, &index, 1, "");
|
derived_ptr = LLVMBuildGEP2(builder, elem_type, ptr, &index, 1, "");
|
||||||
LLVMBuildStore(builder, data, derived_ptr);
|
LLVMBuildStore(builder, data, derived_ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3120,7 +3124,7 @@ static LLVMValueRef visit_var_atomic(struct ac_nir_context *ctx, const nir_intri
|
||||||
LLVMValueRef ptr, int src_idx)
|
LLVMValueRef ptr, int src_idx)
|
||||||
{
|
{
|
||||||
if (ctx->ac.postponed_kill) {
|
if (ctx->ac.postponed_kill) {
|
||||||
LLVMValueRef cond = LLVMBuildLoad(ctx->ac.builder, ctx->ac.postponed_kill, "");
|
LLVMValueRef cond = LLVMBuildLoad2(ctx->ac.builder, ctx->ac.i1, ctx->ac.postponed_kill, "");
|
||||||
ac_build_ifcc(&ctx->ac, cond, 7005);
|
ac_build_ifcc(&ctx->ac, cond, 7005);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4095,7 +4099,7 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
||||||
: LLVMVectorType(comp_type, instr->dest.ssa.num_components);
|
: LLVMVectorType(comp_type, instr->dest.ssa.num_components);
|
||||||
unsigned addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
|
unsigned addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
|
||||||
ptr = LLVMBuildBitCast(ctx->ac.builder, ptr, LLVMPointerType(vec_type, addr_space), "");
|
ptr = LLVMBuildBitCast(ctx->ac.builder, ptr, LLVMPointerType(vec_type, addr_space), "");
|
||||||
result = LLVMBuildLoad(ctx->ac.builder, ptr, "");
|
result = LLVMBuildLoad2(ctx->ac.builder, vec_type, ptr, "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case nir_intrinsic_store_scratch: {
|
case nir_intrinsic_store_scratch: {
|
||||||
|
|
@ -4111,7 +4115,7 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
||||||
u_bit_scan_consecutive_range(&wrmask, &start, &count);
|
u_bit_scan_consecutive_range(&wrmask, &start, &count);
|
||||||
|
|
||||||
LLVMValueRef offset = LLVMConstInt(ctx->ac.i32, start, false);
|
LLVMValueRef offset = LLVMConstInt(ctx->ac.i32, start, false);
|
||||||
LLVMValueRef offset_ptr = LLVMBuildGEP(ctx->ac.builder, ptr, &offset, 1, "");
|
LLVMValueRef offset_ptr = LLVMBuildGEP2(ctx->ac.builder, comp_type, ptr, &offset, 1, "");
|
||||||
LLVMTypeRef vec_type = count == 1 ? comp_type : LLVMVectorType(comp_type, count);
|
LLVMTypeRef vec_type = count == 1 ? comp_type : LLVMVectorType(comp_type, count);
|
||||||
offset_ptr = LLVMBuildBitCast(ctx->ac.builder, offset_ptr,
|
offset_ptr = LLVMBuildBitCast(ctx->ac.builder, offset_ptr,
|
||||||
LLVMPointerType(vec_type, addr_space), "");
|
LLVMPointerType(vec_type, addr_space), "");
|
||||||
|
|
@ -4141,7 +4145,7 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
||||||
: LLVMVectorType(comp_type, instr->dest.ssa.num_components);
|
: LLVMVectorType(comp_type, instr->dest.ssa.num_components);
|
||||||
unsigned addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
|
unsigned addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
|
||||||
ptr = LLVMBuildBitCast(ctx->ac.builder, ptr, LLVMPointerType(vec_type, addr_space), "");
|
ptr = LLVMBuildBitCast(ctx->ac.builder, ptr, LLVMPointerType(vec_type, addr_space), "");
|
||||||
result = LLVMBuildLoad(ctx->ac.builder, ptr, "");
|
result = LLVMBuildLoad2(ctx->ac.builder, vec_type, ptr, "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case nir_intrinsic_set_vertex_and_primitive_count:
|
case nir_intrinsic_set_vertex_and_primitive_count:
|
||||||
|
|
@ -4302,11 +4306,11 @@ static void visit_intrinsic(struct ac_nir_context *ctx, nir_intrinsic_instr *ins
|
||||||
LLVMTypeRef byte_ptr_type = LLVMPointerType(ctx->ac.i8, AC_ADDR_SPACE_CONST);
|
LLVMTypeRef byte_ptr_type = LLVMPointerType(ctx->ac.i8, AC_ADDR_SPACE_CONST);
|
||||||
|
|
||||||
LLVMValueRef addr = LLVMBuildIntToPtr(ctx->ac.builder, base, byte_ptr_type, "");
|
LLVMValueRef addr = LLVMBuildIntToPtr(ctx->ac.builder, base, byte_ptr_type, "");
|
||||||
addr = LLVMBuildGEP(ctx->ac.builder, addr, &offset, 1, "");
|
addr = LLVMBuildGEP2(ctx->ac.builder, ctx->ac.i8, addr, &offset, 1, "");
|
||||||
addr = LLVMBuildBitCast(ctx->ac.builder, addr, ptr_type, "");
|
addr = LLVMBuildBitCast(ctx->ac.builder, addr, ptr_type, "");
|
||||||
|
|
||||||
LLVMSetMetadata(addr, ctx->ac.uniform_md_kind, ctx->ac.empty_md);
|
LLVMSetMetadata(addr, ctx->ac.uniform_md_kind, ctx->ac.empty_md);
|
||||||
result = LLVMBuildLoad(ctx->ac.builder, addr, "");
|
result = LLVMBuildLoad2(ctx->ac.builder, result_type, addr, "");
|
||||||
LLVMSetMetadata(result, ctx->ac.invariant_load_md_kind, ctx->ac.empty_md);
|
LLVMSetMetadata(result, ctx->ac.invariant_load_md_kind, ctx->ac.empty_md);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -5014,7 +5018,7 @@ static void visit_ssa_undef(struct ac_nir_context *ctx, const nir_ssa_undef_inst
|
||||||
} else {
|
} else {
|
||||||
LLVMValueRef zero = LLVMConstInt(type, 0, false);
|
LLVMValueRef zero = LLVMConstInt(type, 0, false);
|
||||||
if (num_components > 1) {
|
if (num_components > 1) {
|
||||||
zero = ac_build_gather_values_extended(&ctx->ac, &zero, 4, 0, false, false);
|
zero = ac_build_gather_values_extended(&ctx->ac, &zero, 4, 0, false);
|
||||||
}
|
}
|
||||||
ctx->ssa_defs[instr->def.index] = zero;
|
ctx->ssa_defs[instr->def.index] = zero;
|
||||||
}
|
}
|
||||||
|
|
@ -5436,7 +5440,7 @@ void ac_nir_translate(struct ac_llvm_context *ac, struct ac_shader_abi *abi,
|
||||||
phi_post_pass(&ctx);
|
phi_post_pass(&ctx);
|
||||||
|
|
||||||
if (ctx.ac.postponed_kill)
|
if (ctx.ac.postponed_kill)
|
||||||
ac_build_kill_if_false(&ctx.ac, LLVMBuildLoad(ctx.ac.builder, ctx.ac.postponed_kill, ""));
|
ac_build_kill_if_false(&ctx.ac, LLVMBuildLoad2(ctx.ac.builder, ctx.ac.i1, ctx.ac.postponed_kill, ""));
|
||||||
|
|
||||||
if (!gl_shader_stage_is_compute(nir->info.stage))
|
if (!gl_shader_stage_is_compute(nir->info.stage))
|
||||||
ctx.abi->emit_outputs(ctx.abi);
|
ctx.abi->emit_outputs(ctx.abi);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include "amd_family.h"
|
#include "amd_family.h"
|
||||||
#include "compiler/shader_enums.h"
|
#include "compiler/shader_enums.h"
|
||||||
#include "llvm-c/Core.h"
|
#include <llvm-c/Core.h>
|
||||||
#include "llvm-c/TargetMachine.h"
|
#include "llvm-c/TargetMachine.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue