From 01c3721c3349cc50cf988abc146767c0d8375f5c Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 19 Jun 2016 00:13:18 +0900 Subject: [PATCH] Add expression transform for (unsigned)x > 0 -> (unsigned)x != 0 --- .../IL/Transforms/ExpressionTransforms.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs b/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs index 1f1e5d6fa..070e96183 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs @@ -52,6 +52,17 @@ namespace ICSharpCode.Decompiler.IL.Transforms // => logic.not(ceq(left, ldnull)) inst.ReplaceWith(new LogicNot(new Ceq(inst.Left, inst.Right) { ILRange = inst.ILRange })); } + if (inst.Right.MatchLdcI4(0)) { + // cgt.un(left, ldc.i4 0) + // => logic.not(ceq(left, ldc.i4 0)) + ILInstruction array; + if (inst.Left.MatchLdLen(StackType.I, out array)) { + // cgt.un(ldlen array, ldc.i4 0) + // => logic.not(ceq(ldlen.i4 array, ldc.i4 0)) + inst.Left.ReplaceWith(new LdLen(StackType.I4, array) { ILRange = inst.Left.ILRange }); + } + inst.ReplaceWith(new LogicNot(new Ceq(inst.Left, inst.Right) { ILRange = inst.ILRange })); + } } protected internal override void VisitClt_Un(Clt_Un inst)