ac: add v2i32 to the common code and use it
authorTimothy Arceri <tarceri@itsqueeze.com>
Thu, 2 Nov 2017 01:59:00 +0000 (12:59 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Fri, 3 Nov 2017 03:54:45 +0000 (14:54 +1100)
Reviewed-by: Marek Olšák <marek.olsak@amd.com
Acked-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/amd/common/ac_llvm_build.c
src/amd/common/ac_llvm_build.h
src/amd/common/ac_nir_to_llvm.c

index ea238fa006ead716470719060aba4d890eca46da..1a0d44bcdd30764024068533c43cc934c069af1c 100644 (file)
@@ -66,6 +66,7 @@ ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context,
        ctx->f16 = LLVMHalfTypeInContext(ctx->context);
        ctx->f32 = LLVMFloatTypeInContext(ctx->context);
        ctx->f64 = LLVMDoubleTypeInContext(ctx->context);
+       ctx->v2i32 = LLVMVectorType(ctx->i32, 2);
        ctx->v4i32 = LLVMVectorType(ctx->i32, 4);
        ctx->v4f32 = LLVMVectorType(ctx->f32, 4);
        ctx->v8i32 = LLVMVectorType(ctx->i32, 8);
index f7906198277362637e10330d3eb68aa817f0e18c..7fc336c3f980083a20020cbecb78b71335e79a2d 100644 (file)
@@ -52,6 +52,7 @@ struct ac_llvm_context {
        LLVMTypeRef f16;
        LLVMTypeRef f32;
        LLVMTypeRef f64;
+       LLVMTypeRef v2i32;
        LLVMTypeRef v4i32;
        LLVMTypeRef v4f32;
        LLVMTypeRef v8i32;
index 2437ea05c1487d04785f11bc6d737b4d837ace3c..0bcb0b0525c5963d85194e034a37737af6ab5e0d 100644 (file)
@@ -134,7 +134,6 @@ struct nir_to_llvm_context {
        LLVMValueRef persp_sample, persp_center, persp_centroid;
        LLVMValueRef linear_sample, linear_center, linear_centroid;
 
-       LLVMTypeRef v2i32;
        LLVMTypeRef v3i32;
        LLVMTypeRef v4i32;
        LLVMTypeRef v8i32;
@@ -877,13 +876,13 @@ static void create_function(struct nir_to_llvm_context *ctx,
                if (ctx->shader_info->info.ps.needs_sample_positions)
                        add_user_sgpr_argument(&args, ctx->ac.i32, &ctx->sample_pos_offset); /* sample position offset */
                add_sgpr_argument(&args, ctx->ac.i32, &ctx->prim_mask); /* prim mask */
-               add_vgpr_argument(&args, ctx->v2i32, &ctx->persp_sample); /* persp sample */
-               add_vgpr_argument(&args, ctx->v2i32, &ctx->persp_center); /* persp center */
-               add_vgpr_argument(&args, ctx->v2i32, &ctx->persp_centroid); /* persp centroid */
+               add_vgpr_argument(&args, ctx->ac.v2i32, &ctx->persp_sample); /* persp sample */
+               add_vgpr_argument(&args, ctx->ac.v2i32, &ctx->persp_center); /* persp center */
+               add_vgpr_argument(&args, ctx->ac.v2i32, &ctx->persp_centroid); /* persp centroid */
                add_vgpr_argument(&args, ctx->v3i32, NULL); /* persp pull model */
-               add_vgpr_argument(&args, ctx->v2i32, &ctx->linear_sample); /* linear sample */
-               add_vgpr_argument(&args, ctx->v2i32, &ctx->linear_center); /* linear center */
-               add_vgpr_argument(&args, ctx->v2i32, &ctx->linear_centroid); /* linear centroid */
+               add_vgpr_argument(&args, ctx->ac.v2i32, &ctx->linear_sample); /* linear sample */
+               add_vgpr_argument(&args, ctx->ac.v2i32, &ctx->linear_center); /* linear center */
+               add_vgpr_argument(&args, ctx->ac.v2i32, &ctx->linear_centroid); /* linear centroid */
                add_vgpr_argument(&args, ctx->f32, NULL);  /* line stipple tex */
                add_vgpr_argument(&args, ctx->f32, &ctx->abi.frag_pos[0]);  /* pos x float */
                add_vgpr_argument(&args, ctx->f32, &ctx->abi.frag_pos[1]);  /* pos y float */
@@ -992,7 +991,6 @@ static void create_function(struct nir_to_llvm_context *ctx,
 
 static void setup_types(struct nir_to_llvm_context *ctx)
 {
-       ctx->v2i32 = LLVMVectorType(ctx->ac.i32, 2);
        ctx->v3i32 = LLVMVectorType(ctx->ac.i32, 3);
        ctx->v4i32 = LLVMVectorType(ctx->ac.i32, 4);
        ctx->v8i32 = LLVMVectorType(ctx->ac.i32, 8);
@@ -1908,7 +1906,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr)
        case nir_op_unpack_64_2x32_split_x: {
                assert(instr->src[0].src.ssa->num_components == 1);
                LLVMValueRef tmp = LLVMBuildBitCast(ctx->ac.builder, src[0],
-                                                   LLVMVectorType(ctx->ac.i32, 2),
+                                                   ctx->ac.v2i32,
                                                    "");
                result = LLVMBuildExtractElement(ctx->ac.builder, tmp,
                                                 ctx->ac.i32_0, "");
@@ -1918,7 +1916,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr)
        case nir_op_unpack_64_2x32_split_y: {
                assert(instr->src[0].src.ssa->num_components == 1);
                LLVMValueRef tmp = LLVMBuildBitCast(ctx->ac.builder, src[0],
-                                                   LLVMVectorType(ctx->ac.i32, 2),
+                                                   ctx->ac.v2i32,
                                                    "");
                result = LLVMBuildExtractElement(ctx->ac.builder, tmp,
                                                 ctx->ac.i32_1, "");
@@ -1926,7 +1924,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr)
        }
 
        case nir_op_pack_64_2x32_split: {
-               LLVMValueRef tmp = LLVMGetUndef(LLVMVectorType(ctx->ac.i32, 2));
+               LLVMValueRef tmp = LLVMGetUndef(ctx->ac.v2i32);
                tmp = LLVMBuildInsertElement(ctx->ac.builder, tmp,
                                             src[0], ctx->ac.i32_0, "");
                tmp = LLVMBuildInsertElement(ctx->ac.builder, tmp,