Mesa (master): freedreno/ir3: Fold const only when the type is float

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 7 18:19:36 UTC 2020


Module: Mesa
Branch: master
Commit: 7bddaa61362924ec9dc360a2846cbdc8c647d834
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bddaa61362924ec9dc360a2846cbdc8c647d834

Author: Hyunjun Ko <zzoon at igalia.com>
Date:   Thu Nov  7 05:32:34 2019 +0000

freedreno/ir3: Fold const only when the type is float

Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3737>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3737>

---

 src/freedreno/ir3/ir3_cp.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/freedreno/ir3/ir3_cp.c b/src/freedreno/ir3/ir3_cp.c
index efcefaeb2b2..03bb8cbe091 100644
--- a/src/freedreno/ir3/ir3_cp.c
+++ b/src/freedreno/ir3/ir3_cp.c
@@ -523,6 +523,17 @@ reg_cp(struct ir3_cp_ctx *ctx, struct ir3_instruction *instr,
 					(src_reg->array.offset == 0))
 				return false;
 
+			/* When narrowing constant from 32b to 16b, it seems
+			 * to work only for float. So we should do this only with
+			 * float opcodes.
+			 */
+			if (src->cat1.dst_type == TYPE_F16) {
+				if (instr->opc == OPC_MOV && !type_float(instr->cat1.src_type))
+					return false;
+				if (!ir3_cat2_float(instr->opc) && !ir3_cat3_float(instr->opc))
+					return false;
+			}
+
 			src_reg = ir3_reg_clone(instr->block->shader, src_reg);
 			src_reg->flags = new_flags;
 			instr->regs[n+1] = src_reg;



More information about the mesa-commit mailing list