diff --git a/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt b/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt index 0684086d7..6add55339 100644 --- a/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt +++ b/codeGenIntermediate/src/prog8/codegen/intermediate/IRCodeGen.kt @@ -1451,6 +1451,10 @@ class IRCodeGen( } when(val cond=ifElse.condition) { + is PtBool -> { + // normally this will be optimized away, but not with -noopt + translateSimple(cond, Opcode.BSTEQ) + } is PtTypeCast -> { require(cond.type==DataType.BOOL && cond.value.type in NumericDatatypes) translateSimple(cond, Opcode.BSTEQ) diff --git a/compiler/src/prog8/compiler/Compiler.kt b/compiler/src/prog8/compiler/Compiler.kt index 70129fe06..6deb2752f 100644 --- a/compiler/src/prog8/compiler/Compiler.kt +++ b/compiler/src/prog8/compiler/Compiler.kt @@ -458,8 +458,13 @@ private fun optimizeAst(program: Program, compilerOptions: CompilationOptions, e break } removeUnusedCode(program, errors, compilerOptions) - if(errors.noErrors()) + if(errors.noErrors()) { + // last round of optimizations because constFold may have enabled more... + program.simplifyExpressions(errors, compilerOptions) + program.optimizeStatements(errors, functions, compilerOptions) program.constantFold(errors, compilerOptions) // because simplified statements and expressions can result in more constants that can be folded away + } + errors.report() } diff --git a/examples/test.p8 b/examples/test.p8 index b745d7f55..1eb783641 100644 --- a/examples/test.p8 +++ b/examples/test.p8 @@ -1,28 +1,16 @@ -%import bmx -%import diskio -%import emudbg -%import floats -%import gfx2 -%import graphics -%import monogfx -%import palette -%import psg -%import sprites -%import syslib %import textio -%import verafx -%import conv -%import cx16logo -%import math -%import prog8_lib -%import string -%import test_stack - %zeropage basicsafe %option no_sysinit main { sub start() { + const ubyte x=0 + + if x==3 { + txt.print("three") + } else if x==4 { + txt.print("four") + } } }