From 30d957cccababe731cb55fde4e03e5b6f09c95bf Mon Sep 17 00:00:00 2001 From: Laurence Tratt Date: Thu, 27 Feb 2025 09:54:34 +0000 Subject: [PATCH] Optimise `PtrAdd`s that were optimised from `DynPtrAdd`. In essence, when we've been able to convert a `DynPtrAdd` to a `PtrAdd`, we can then run our existing `PtrAdd` optimisation on the result. This can then show up further optimisation opportunities to CSE. --- ykrt/src/compile/jitc_yk/opt/mod.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/ykrt/src/compile/jitc_yk/opt/mod.rs b/ykrt/src/compile/jitc_yk/opt/mod.rs index 22e0a5d34..e2994e20a 100644 --- a/ykrt/src/compile/jitc_yk/opt/mod.rs +++ b/ykrt/src/compile/jitc_yk/opt/mod.rs @@ -580,8 +580,9 @@ impl Opt { Operand::Const(cidx) => self.m.replace(iidx, Inst::Const(cidx)), } } else { - self.m - .replace(iidx, Inst::PtrAdd(PtrAddInst::new(inst.ptr(&self.m), off))); + let pa_inst = PtrAddInst::new(inst.ptr(&self.m), off); + self.m.replace(iidx, Inst::PtrAdd(pa_inst.clone())); + self.opt_ptradd(iidx, pa_inst)?; } } @@ -1776,7 +1777,7 @@ mod test { } #[test] - fn opt_dynptradd_const() { + fn opt_dynptradd() { Module::assert_ir_transform_eq( " entry: @@ -1807,6 +1808,23 @@ mod test { black_box 0x1234 ", ); + + Module::assert_ir_transform_eq( + " + entry: + %0: ptr = param reg + %1: ptr = ptr_add %0, -4 + %2: ptr = dyn_ptr_add %1, 1i64, 4 + black_box %2 + ", + |m| opt(m).unwrap(), + " + ... + entry: + %0: ptr = param ... + black_box %0 + ", + ); } #[test]