Merge pull request #1884 from RustPython/coolreader18/disable-unpack-opt

Disable the unpack optimization
This commit is contained in:
Jeong YunWon authored and GitHub committed 2020-04-26 00:11:21 +09:00
commit e147d3e695
3 files changed
+29 -24

No files matched your search

+1 -1
View File
@@ -92,7 +92,7 @@ impl<O: OutputStream> PeepholeOptimizer<O> {
}
fn optimize(&mut self) {
apply_optimizations!(self, operator, unpack);
apply_optimizations!(self, operator /* , unpack */);
}
}
+24 -23
View File
@@ -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)
// }
// }
+4
View File
@@ -24,3 +24,7 @@ def func2():
return 20
assert ret(func1() or func2()) == 20
a, b = (1, 2) if True else (3, 4)
assert a == 1
assert b == 2