summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgibbed <rick@gibbed.us>2018-11-23 08:02:09 -0600
committergibbed <rick@gibbed.us>2018-11-23 08:02:09 -0600
commit7d07720de13ca0463377d8549181db438ae65c65 (patch)
tree758f5e493991cf5712920aca2e843f7367d67718
parent4c04a9383a2815c71c9dcd92838acdc1f97ecaa1 (diff)
[JIT] Zero constant propagation for OPCODE_SHL/OPCODE_SHR.
-rw-r--r--src/xenia/cpu/compiler/passes/constant_propagation_pass.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/xenia/cpu/compiler/passes/constant_propagation_pass.cc b/src/xenia/cpu/compiler/passes/constant_propagation_pass.cc
index e44fce425..3db8e99d6 100644
--- a/src/xenia/cpu/compiler/passes/constant_propagation_pass.cc
+++ b/src/xenia/cpu/compiler/passes/constant_propagation_pass.cc
@@ -618,6 +618,10 @@ bool ConstantPropagationPass::Run(HIRBuilder* builder) {
v->set_from(i->src1.value);
v->Shl(i->src2.value);
i->Remove();
+ } else if (i->src2.value->IsConstantZero()) {
+ auto src1 = i->src1.value;
+ i->Replace(&OPCODE_ASSIGN_info, 0);
+ i->set_src1(src1);
}
break;
case OPCODE_SHR:
@@ -625,6 +629,10 @@ bool ConstantPropagationPass::Run(HIRBuilder* builder) {
v->set_from(i->src1.value);
v->Shr(i->src2.value);
i->Remove();
+ } else if (i->src2.value->IsConstantZero()) {
+ auto src1 = i->src1.value;
+ i->Replace(&OPCODE_ASSIGN_info, 0);
+ i->set_src1(src1);
}
break;
case OPCODE_SHA: