From cfe0a9acec7cf0a1d8de17e9ad248523ce149e7f Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 30 Oct 2024 12:36:28 -0400 Subject: [PATCH] agx: add pseudo for signext easier to optimize Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_compile.c | 2 +- src/asahi/compiler/agx_lower_pseudo.c | 4 ++++ src/asahi/compiler/agx_opcodes.py | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/asahi/compiler/agx_compile.c b/src/asahi/compiler/agx_compile.c index 683dbda0a13..2af4cfeb877 100644 --- a/src/asahi/compiler/agx_compile.c +++ b/src/asahi/compiler/agx_compile.c @@ -1982,7 +1982,7 @@ agx_emit_alu(agx_builder *b, nir_alu_instr *instr) return agx_asr_to(b, dst, ishl16, agx_immediate(8)); } else { assert(s0.size == AGX_SIZE_16 && "other conversions lowered"); - return agx_iadd_to(b, dst, s0, i0, 0); + return agx_signext_to(b, dst, s0); } } diff --git a/src/asahi/compiler/agx_lower_pseudo.c b/src/asahi/compiler/agx_lower_pseudo.c index fcdbb1b1996..d51746bbf5a 100644 --- a/src/asahi/compiler/agx_lower_pseudo.c +++ b/src/asahi/compiler/agx_lower_pseudo.c @@ -83,6 +83,10 @@ lower(agx_builder *b, agx_instr *I) case AGX_OPCODE_NOT: return agx_bitop_to(b, I->dest[0], I->src[0], agx_zero(), AGX_BITOP_NOT); + /* We can sign-extend with an add */ + case AGX_OPCODE_SIGNEXT: + return agx_iadd_to(b, I->dest[0], I->src[0], agx_zero(), 0); + /* Unfused comparisons are fused with a 0/1 select */ case AGX_OPCODE_ICMP: return agx_icmpsel_to(b, I->dest[0], I->src[0], I->src[1], diff --git a/src/asahi/compiler/agx_opcodes.py b/src/asahi/compiler/agx_opcodes.py index b8fb6997a88..0d73d275246 100644 --- a/src/asahi/compiler/agx_opcodes.py +++ b/src/asahi/compiler/agx_opcodes.py @@ -501,6 +501,7 @@ op("stack_store", # Convenient aliases. op("mov", _, srcs = 1) op("not", _, srcs = 1) +op("signext", _, srcs = 1) op("collect", _, srcs = VARIABLE) op("split", _, srcs = 1, dests = VARIABLE)