amd/common: add chip_class to ac_llvm_context
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 13 Sep 2017 12:36:23 +0000 (14:36 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 18 Sep 2017 09:25:18 +0000 (11:25 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/amd/common/ac_llvm_build.c
src/amd/common/ac_llvm_build.h
src/amd/common/ac_nir_to_llvm.c
src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c

index 7193b80be59ab05064ace3f9a2f2fde973929379..4077bd81bbc042acedbc7098c36b0f1e5f9e45d4 100644 (file)
  * The caller is responsible for initializing ctx::module and ctx::builder.
  */
 void
-ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context)
+ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context,
+                    enum chip_class chip_class)
 {
        LLVMValueRef args[1];
 
+       ctx->chip_class = chip_class;
+
        ctx->context = context;
        ctx->module = NULL;
        ctx->builder = NULL;
index 14ec03f5c84c6a641cb8e392ae87c451b103cadd..b6434893cfa0e7b7c902f835c982188a809affc0 100644 (file)
@@ -28,6 +28,8 @@
 #include <stdbool.h>
 #include <llvm-c/TargetMachine.h>
 
+#include "amd_family.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -61,10 +63,13 @@ struct ac_llvm_context {
        unsigned fpmath_md_kind;
        LLVMValueRef fpmath_md_2p5_ulp;
        LLVMValueRef empty_md;
+
+       enum chip_class chip_class;
 };
 
 void
-ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context);
+ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context,
+                    enum chip_class chip_class);
 
 unsigned ac_get_type_size(LLVMTypeRef type);
 
index ba98cb2bde0939c9e92f2b630303e689da230441..870620e78706acb8a08e32cf824ba8e489e09183 100644 (file)
@@ -6329,7 +6329,7 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
        ctx.context = LLVMContextCreate();
        ctx.module = LLVMModuleCreateWithNameInContext("shader", ctx.context);
 
-       ac_llvm_context_init(&ctx.ac, ctx.context);
+       ac_llvm_context_init(&ctx.ac, ctx.context, options->chip_class);
        ctx.ac.module = ctx.module;
 
        memset(shader_info, 0, sizeof(*shader_info));
@@ -6653,7 +6653,7 @@ void ac_create_gs_copy_shader(LLVMTargetMachineRef tm,
        ctx.options = options;
        ctx.shader_info = shader_info;
 
-       ac_llvm_context_init(&ctx.ac, ctx.context);
+       ac_llvm_context_init(&ctx.ac, ctx.context, options->chip_class);
        ctx.ac.module = ctx.module;
 
        ctx.is_gs_copy_shader = true;
index 231f16f049dd5d7f8bbb6055d5b2b8aba3f2a9e9..0ad394d461e0ad5e46d9ab999946eb04583428a8 100644 (file)
@@ -1193,7 +1193,7 @@ void si_llvm_context_init(struct si_shader_context *ctx,
        ctx->gallivm.builder = lp_create_builder(ctx->gallivm.context,
                                                 float_mode);
 
-       ac_llvm_context_init(&ctx->ac, ctx->gallivm.context);
+       ac_llvm_context_init(&ctx->ac, ctx->gallivm.context, sscreen->b.chip_class);
        ctx->ac.module = ctx->gallivm.module;
        ctx->ac.builder = ctx->gallivm.builder;