ac: fix nir_op_f2f64
authorTimothy Arceri <tarceri@itsqueeze.com>
Tue, 12 Dec 2017 05:10:24 +0000 (16:10 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Wed, 13 Dec 2017 02:20:28 +0000 (13:20 +1100)
Without this we get the error "FPExt only operates on FP" when
converting the following:

   vec1 32 ssa_5 = b2f ssa_4
   vec1 64 ssa_6 = f2f64 ssa_5

Which results in:

   %44 = and i32 %43, 1065353216
   %45 = fpext i32 %44 to double

With this patch we now get:

   %44 = and i32 %43, 1065353216
   %45 = bitcast i32 %44 to float
   %46 = fpext float %45 to double

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/common/ac_nir_to_llvm.c

index 3d26dd375290ef0c1ef807c9f2e001be4509f1f9..f3602a267de5cb1cd3045b42ec49fb52d8de6eb9 100644 (file)
@@ -1802,6 +1802,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr)
                result = LLVMBuildUIToFP(ctx->ac.builder, src[0], ac_to_float_type(&ctx->ac, def_type), "");
                break;
        case nir_op_f2f64:
+               src[0] = ac_to_float(&ctx->ac, src[0]);
                result = LLVMBuildFPExt(ctx->ac.builder, src[0], ac_to_float_type(&ctx->ac, def_type), "");
                break;
        case nir_op_f2f32: