From aba7359b3620c1519163f909469841b1bf712db1 Mon Sep 17 00:00:00 2001 From: Noah <33094578+coolreader18@users.noreply.github.com> Date: Fri, 24 Apr 2020 15:14:58 -0500 Subject: [PATCH] Disable the unpack optimization --- src/peephole.rs | 2 +- src/peephole/optimizations.rs | 47 ++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/peephole.rs b/src/peephole.rs index 67a4b9e..aaec047 100644 --- a/src/peephole.rs +++ b/src/peephole.rs @@ -92,7 +92,7 @@ impl PeepholeOptimizer { } fn optimize(&mut self) { - apply_optimizations!(self, operator, unpack); + apply_optimizations!(self, operator /* , unpack */); } } diff --git a/src/peephole/optimizations.rs b/src/peephole/optimizations.rs index 28bac86..461baa7 100644 --- a/src/peephole/optimizations.rs +++ b/src/peephole/optimizations.rs @@ -73,26 +73,27 @@ pub fn operator(buf: &mut impl OptimizationBuffer) { } } -pub fn unpack(buf: &mut impl OptimizationBuffer) { - let (instruction, meta) = buf.pop(); - if let Instruction::UnpackSequence { size } = instruction { - let (arg, arg_meta) = buf.pop(); - match arg { - Instruction::BuildTuple { - size: tup_size, - unpack, - } if !unpack && tup_size == size => { - buf.emit( - Instruction::Reverse { amount: size }, - vec![arg_meta, meta].into(), - ); - } - arg => { - buf.emit(arg, arg_meta); - buf.emit(instruction, meta); - } - } - } else { - buf.emit(instruction, meta) - } -} +// TODO: make a version of this that doesn't miscompile `a, b = (1, 2) if True else (3, 4)` +// pub fn unpack(buf: &mut impl OptimizationBuffer) { +// let (instruction, meta) = buf.pop(); +// if let Instruction::UnpackSequence { size } = instruction { +// let (arg, arg_meta) = buf.pop(); +// match arg { +// Instruction::BuildTuple { +// size: tup_size, +// unpack, +// } if !unpack && tup_size == size => { +// buf.emit( +// Instruction::Reverse { amount: size }, +// vec![arg_meta, meta].into(), +// ); +// } +// arg => { +// buf.emit(arg, arg_meta); +// buf.emit(instruction, meta); +// } +// } +// } else { +// buf.emit(instruction, meta) +// } +// }