diff options
-rw-r--r-- | src/panfrost/bifrost/valhall/test/test-lower-isel.cpp | 8 | ||||
-rw-r--r-- | src/panfrost/bifrost/valhall/va_lower_isel.c | 8 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp b/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp index f9c3b7874f3..97ff6391750 100644 --- a/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp +++ b/src/panfrost/bifrost/valhall/test/test-lower-isel.cpp @@ -125,6 +125,14 @@ TEST_F(LowerIsel, MuxInt8) { NEGCASE(bi_mux_v4i8(b, x, y, z, BI_MUX_FP_ZERO)); } +TEST_F(LowerIsel, FaddRscale) { + CASE(bi_fadd_rscale_f32_to(b, reg, x, y, z, BI_SPECIAL_NONE), + bi_fma_rscale_f32_to(b, reg, x, bi_imm_f32(1.0), y, z, BI_SPECIAL_NONE)); + + CASE(bi_fadd_rscale_f32_to(b, reg, x, y, z, BI_SPECIAL_N), + bi_fma_rscale_f32_to(b, reg, x, bi_imm_f32(1.0), y, z, BI_SPECIAL_N)); +} + TEST_F(LowerIsel, Smoke) { NEGCASE(bi_fadd_f32_to(b, reg, reg, reg)); NEGCASE(bi_csel_s32_to(b, reg, reg, reg, reg, reg, BI_CMPF_LT)); diff --git a/src/panfrost/bifrost/valhall/va_lower_isel.c b/src/panfrost/bifrost/valhall/va_lower_isel.c index ad54a9352ba..a43ddc582ba 100644 --- a/src/panfrost/bifrost/valhall/va_lower_isel.c +++ b/src/panfrost/bifrost/valhall/va_lower_isel.c @@ -111,6 +111,14 @@ va_lower_isel(bi_instr *I) break; + /* FADD_RSCALE.f32(x, y, z) -> FMA_RSCALE.f32(x, 1.0, y, z) */ + case BI_OPCODE_FADD_RSCALE_F32: + I->op = BI_OPCODE_FMA_RSCALE_F32; + I->src[3] = I->src[2]; + I->src[2] = I->src[1]; + I->src[1] = bi_imm_f32(1.0); + break; + default: break; } |