X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fcodegen%2Fssa%2Fexits%2FSwitch.java;h=27f853e0283b3d714757f4d3369cab4379cf470d;hb=c26409b1caf2f1e560d37c5befd11b442399c3fe;hp=0bcb3dd596e3bc03cbc91779d40232ce3d787c02;hpb=cb5fc8d606d8b322563e9345c441eecfa7f01753;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Switch.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Switch.java index 0bcb3dd59..27f853e02 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Switch.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/exits/Switch.java @@ -6,6 +6,7 @@ import org.objectweb.asm.Label; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; import org.simantics.scl.compiler.constants.BooleanConstant; import org.simantics.scl.compiler.constants.IntegerConstant; +import org.simantics.scl.compiler.constants.NoRepConstant; import org.simantics.scl.compiler.internal.codegen.continuations.BranchRef; import org.simantics.scl.compiler.internal.codegen.continuations.Cont; import org.simantics.scl.compiler.internal.codegen.continuations.ContRef; @@ -223,11 +224,15 @@ public class Switch extends SSAExit implements ValRefBinder { context.markModified("switch-to-if"); newExit.simplify(context); } - else if(branches.length == 1 && branches[0].constructor == null) { + else if(branches.length == 1 && isConstructorParameterless(branches[0])) { scrutinee.remove(); getParent().setExit(new Jump(branches[0].cont)); } } + + private static boolean isConstructorParameterless(BranchRef branch) { + return branch.constructor == null || branch.constructor instanceof NoRepConstant; + } @Override public void collectFreeVariables(SSAFunction function,