if (args->args[i].file != AC_ARG_SGPR)
continue;
- ac_add_function_attr(ctx->context, main_function, i + 1, AC_FUNC_ATTR_INREG);
+ ac_add_function_attr(ctx->context, main_function, i + 1, "inreg");
if (LLVMGetTypeKind(LLVMTypeOf(P)) == LLVMPointerTypeKind) {
- ac_add_function_attr(ctx->context, main_function, i + 1, AC_FUNC_ATTR_NOALIAS);
+ ac_add_function_attr(ctx->context, main_function, i + 1, "noalias");
ac_add_attr_dereferenceable(P, UINT64_MAX);
ac_add_attr_alignment(P, 4);
}
return passmgr;
}
-static const char *attr_to_str(enum ac_func_attr attr)
-{
- switch (attr) {
- case AC_FUNC_ATTR_ALWAYSINLINE:
- return "alwaysinline";
- case AC_FUNC_ATTR_INREG:
- return "inreg";
- case AC_FUNC_ATTR_NOALIAS:
- return "noalias";
- default:
- fprintf(stderr, "Unhandled function attribute: %x\n", attr);
- return 0;
- }
-}
-
LLVMAttributeRef ac_get_llvm_attribute(LLVMContextRef ctx, const char *str)
{
return LLVMCreateEnumAttribute(ctx, LLVMGetEnumAttributeKindForName(str, strlen(str)), 0);
}
void ac_add_function_attr(LLVMContextRef ctx, LLVMValueRef function, int attr_idx,
- enum ac_func_attr attr)
+ const char *attr)
{
assert(LLVMIsAFunction(function));
- LLVMAddAttributeAtIndex(function, attr_idx, ac_get_llvm_attribute(ctx, attr_to_str(attr)));
+ LLVMAddAttributeAtIndex(function, attr_idx, ac_get_llvm_attribute(ctx, attr));
}
void ac_dump_module(LLVMModuleRef module)
enum ac_func_attr
{
- /* Function and parameter attributes. */
- AC_FUNC_ATTR_ALWAYSINLINE = (1 << 0),
- AC_FUNC_ATTR_INREG = (1 << 1),
- AC_FUNC_ATTR_NOALIAS = (1 << 2),
-
/* Call attributes. */
AC_FUNC_ATTR_READNONE = (1 << 3),
AC_FUNC_ATTR_CONVERGENT = (1 << 4),
bool ac_is_sgpr_param(LLVMValueRef param);
LLVMAttributeRef ac_get_llvm_attribute(LLVMContextRef ctx, const char *str);
void ac_add_function_attr(LLVMContextRef ctx, LLVMValueRef function, int attr_idx,
- enum ac_func_attr attr);
+ const char *attr);
void ac_dump_module(LLVMModuleRef module);
LLVMModuleRef ac_create_module(LLVMTargetMachineRef tm, LLVMContextRef ctx);
LLVMBuilderRef ac_create_builder(LLVMContextRef ctx, enum ac_float_mode float_mode);
memset(ctx->args, 0, sizeof(*ctx->args));
for (unsigned i = 0; i < num_parts; ++i) {
- ac_add_function_attr(ctx->ac.context, parts[i].value, -1, AC_FUNC_ATTR_ALWAYSINLINE);
+ ac_add_function_attr(ctx->ac.context, parts[i].value, -1, "alwaysinline");
LLVMSetLinkage(parts[i].value, LLVMPrivateLinkage);
}
is_sgpr = ac_is_sgpr_param(param);
if (is_sgpr) {
- ac_add_function_attr(ctx->ac.context, parts[part].value, param_idx + 1, AC_FUNC_ATTR_INREG);
+ ac_add_function_attr(ctx->ac.context, parts[part].value, param_idx + 1, "inreg");
} else if (out_idx < num_out_sgpr) {
/* Skip returned SGPRs the current part doesn't
* declare on the input. */