From 43b2eb4688eb42c0091a010d7903e3eb7d349d0b Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 5 Oct 2018 18:14:56 -0400 Subject: [PATCH] constant_propagation_pass: Fold SignExtend{Type}ToLong opcodes if possible --- src/ir_opt/constant_propagation_pass.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ir_opt/constant_propagation_pass.cpp b/src/ir_opt/constant_propagation_pass.cpp index 10f1d720..a8018711 100644 --- a/src/ir_opt/constant_propagation_pass.cpp +++ b/src/ir_opt/constant_propagation_pass.cpp @@ -123,6 +123,15 @@ void FoldSignExtendXToWord(IR::Inst& inst) { inst.ReplaceUsesWith(IR::Value{static_cast(value)}); } +void FoldSignExtendXToLong(IR::Inst& inst) { + if (!inst.AreAllArgsImmediates()) { + return; + } + + const s64 value = inst.GetArg(0).GetImmediateAsS64(); + inst.ReplaceUsesWith(IR::Value{static_cast(value)}); +} + void FoldZeroExtendXToWord(IR::Inst& inst) { if (!inst.AreAllArgsImmediates()) { return; @@ -185,6 +194,11 @@ void ConstantPropagation(IR::Block& block) { case IR::Opcode::SignExtendHalfToWord: FoldSignExtendXToWord(inst); break; + case IR::Opcode::SignExtendByteToLong: + case IR::Opcode::SignExtendHalfToLong: + case IR::Opcode::SignExtendWordToLong: + FoldSignExtendXToLong(inst); + break; case IR::Opcode::ZeroExtendByteToWord: case IR::Opcode::ZeroExtendHalfToWord: FoldZeroExtendXToWord(inst);