
CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  to:@4
main: scope:[main]  from @4
  call bool_const_if 
  to:main::@1
main::@1: scope:[main]  from main
  call bool_const_vars 
  to:main::@2
main::@2: scope:[main]  from main::@1
  call bool_const_inline 
  to:main::@3
main::@3: scope:[main]  from main::@2
  to:main::@return
main::@return: scope:[main]  from main::@3
  return 
  to:@return
bool_const_if: scope:[bool_const_if]  from main
  (bool) bool_const_if::b#0 ← true
  if((bool) bool_const_if::b#0) goto bool_const_if::@1
  to:bool_const_if::@3
bool_const_if::@1: scope:[bool_const_if]  from bool_const_if
  *((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 't'
  to:bool_const_if::@return
bool_const_if::@3: scope:[bool_const_if]  from bool_const_if
  *((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'f'
  to:bool_const_if::@return
bool_const_if::@return: scope:[bool_const_if]  from bool_const_if::@1 bool_const_if::@3
  return 
  to:@return
bool_const_vars: scope:[bool_const_vars]  from main::@1
  (byte) bool_const_vars::a#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
  (bool~) bool_const_vars::$0 ← (byte) bool_const_vars::a#0 == (byte/signed byte/word/signed word/dword/signed dword) 15
  (bool~) bool_const_vars::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 21 < (byte) bool_const_vars::a#0
  (bool~) bool_const_vars::$2 ← ! (bool~) bool_const_vars::$1
  (bool~) bool_const_vars::$3 ← (bool~) bool_const_vars::$0 || (bool~) bool_const_vars::$2
  (bool) bool_const_vars::b1#0 ← (bool~) bool_const_vars::$3
  (bool~) bool_const_vars::$4 ← (byte) bool_const_vars::a#0 != (byte/signed byte/word/signed word/dword/signed dword) 44
  (signed byte/signed word/signed dword~) bool_const_vars::$5 ← - (byte/signed byte/word/signed word/dword/signed dword) 8
  (bool~) bool_const_vars::$6 ← (byte) bool_const_vars::a#0 >= (signed byte/signed word/signed dword~) bool_const_vars::$5
  (bool~) bool_const_vars::$7 ← (bool~) bool_const_vars::$4 || (bool~) bool_const_vars::$6
  (bool) bool_const_vars::b2#0 ← (bool~) bool_const_vars::$7
  (bool~) bool_const_vars::$8 ← ! (bool) bool_const_vars::b2#0
  (bool~) bool_const_vars::$9 ← (bool) bool_const_vars::b1#0 && (bool~) bool_const_vars::$8
  (bool~) bool_const_vars::$10 ← (bool~) bool_const_vars::$9 || false
  (bool) bool_const_vars::b#0 ← (bool~) bool_const_vars::$10
  if((bool) bool_const_vars::b#0) goto bool_const_vars::@1
  to:bool_const_vars::@3
bool_const_vars::@1: scope:[bool_const_vars]  from bool_const_vars
  *((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 't'
  to:bool_const_vars::@return
bool_const_vars::@3: scope:[bool_const_vars]  from bool_const_vars
  *((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'f'
  to:bool_const_vars::@return
bool_const_vars::@return: scope:[bool_const_vars]  from bool_const_vars::@1 bool_const_vars::@3
  return 
  to:@return
bool_const_inline: scope:[bool_const_inline]  from main::@2
  (byte) bool_const_inline::a#0 ← (byte/signed byte/word/signed word/dword/signed dword) 23
  (bool~) bool_const_inline::$0 ← (byte) bool_const_inline::a#0 != (byte/signed byte/word/signed word/dword/signed dword) 44
  (signed byte/signed word/signed dword~) bool_const_inline::$1 ← - (byte/signed byte/word/signed word/dword/signed dword) 8
  (bool~) bool_const_inline::$2 ← (byte) bool_const_inline::a#0 >= (signed byte/signed word/signed dword~) bool_const_inline::$1
  (bool~) bool_const_inline::$3 ← (byte) bool_const_inline::a#0 == (byte/signed byte/word/signed word/dword/signed dword) 15
  (bool~) bool_const_inline::$4 ← (bool~) bool_const_inline::$2 && (bool~) bool_const_inline::$3
  (bool~) bool_const_inline::$5 ← (bool~) bool_const_inline::$0 || (bool~) bool_const_inline::$4
  (bool~) bool_const_inline::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 21 < (byte) bool_const_inline::a#0
  (bool~) bool_const_inline::$7 ← ! (bool~) bool_const_inline::$6
  (bool~) bool_const_inline::$8 ← (bool~) bool_const_inline::$5 || (bool~) bool_const_inline::$7
  if((bool~) bool_const_inline::$8) goto bool_const_inline::@1
  to:bool_const_inline::@3
bool_const_inline::@1: scope:[bool_const_inline]  from bool_const_inline
  *((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 't'
  to:bool_const_inline::@return
bool_const_inline::@3: scope:[bool_const_inline]  from bool_const_inline
  *((byte*) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 'f'
  to:bool_const_inline::@return
bool_const_inline::@return: scope:[bool_const_inline]  from bool_const_inline::@1 bool_const_inline::@3
  return 
  to:@return
@4: scope:[]  from @begin
  call main 
  to:@5
@5: scope:[]  from @4
  to:@end
@end: scope:[]  from @5

SYMBOL TABLE SSA
(label) @4
(label) @5
(label) @begin
(label) @end
(byte*) SCREEN
(byte*) SCREEN#0
(void()) bool_const_if()
(label) bool_const_if::@1
(label) bool_const_if::@3
(label) bool_const_if::@return
(bool) bool_const_if::b
(bool) bool_const_if::b#0
(void()) bool_const_inline()
(bool~) bool_const_inline::$0
(signed byte/signed word/signed dword~) bool_const_inline::$1
(bool~) bool_const_inline::$2
(bool~) bool_const_inline::$3
(bool~) bool_const_inline::$4
(bool~) bool_const_inline::$5
(bool~) bool_const_inline::$6
(bool~) bool_const_inline::$7
(bool~) bool_const_inline::$8
(label) bool_const_inline::@1
(label) bool_const_inline::@3
(label) bool_const_inline::@return
(byte) bool_const_inline::a
(byte) bool_const_inline::a#0
(void()) bool_const_vars()
(bool~) bool_const_vars::$0
(bool~) bool_const_vars::$1
(bool~) bool_const_vars::$10
(bool~) bool_const_vars::$2
(bool~) bool_const_vars::$3
(bool~) bool_const_vars::$4
(signed byte/signed word/signed dword~) bool_const_vars::$5
(bool~) bool_const_vars::$6
(bool~) bool_const_vars::$7
(bool~) bool_const_vars::$8
(bool~) bool_const_vars::$9
(label) bool_const_vars::@1
(label) bool_const_vars::@3
(label) bool_const_vars::@return
(byte) bool_const_vars::a
(byte) bool_const_vars::a#0
(bool) bool_const_vars::b
(bool) bool_const_vars::b#0
(bool) bool_const_vars::b1
(bool) bool_const_vars::b1#0
(bool) bool_const_vars::b2
(bool) bool_const_vars::b2#0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return

Culled Empty Block (label) main::@3
Culled Empty Block (label) @5
Successful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not [13] (bool~) bool_const_vars::$2 ← (byte/signed byte/word/signed word/dword/signed dword) 21 >= (byte) bool_const_vars::a#0 from [12] (bool~) bool_const_vars::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 21 < (byte) bool_const_vars::a#0
Inversing boolean not [37] (bool~) bool_const_inline::$7 ← (byte/signed byte/word/signed word/dword/signed dword) 21 >= (byte) bool_const_inline::a#0 from [36] (bool~) bool_const_inline::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 21 < (byte) bool_const_inline::a#0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (bool) bool_const_vars::b1#0 = (bool~) bool_const_vars::$3 
Alias (bool) bool_const_vars::b2#0 = (bool~) bool_const_vars::$7 
Alias (bool) bool_const_vars::b#0 = (bool~) bool_const_vars::$10 
Successful SSA optimization Pass2AliasElimination
Rewriting || if()-condition to two if()s [23] (bool) bool_const_vars::b#0 ← (bool~) bool_const_vars::$9 || false
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting && if()-condition to two if()s [22] (bool~) bool_const_vars::$9 ← (bool) bool_const_vars::b1#0 && (bool~) bool_const_vars::$8
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [14] (bool) bool_const_vars::b1#0 ← (bool~) bool_const_vars::$0 || (bool~) bool_const_vars::$2
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [38] (bool~) bool_const_inline::$8 ← (bool~) bool_const_inline::$5 || (bool~) bool_const_inline::$7
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [35] (bool~) bool_const_inline::$5 ← (bool~) bool_const_inline::$0 || (bool~) bool_const_inline::$4
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting ! if()-condition to reversed if() [21] (bool~) bool_const_vars::$8 ← ! (bool) bool_const_vars::b2#0
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [19] (bool) bool_const_vars::b2#0 ← (bool~) bool_const_vars::$4 || (bool~) bool_const_vars::$6
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting && if()-condition to two if()s [34] (bool~) bool_const_inline::$4 ← (bool~) bool_const_inline::$2 && (bool~) bool_const_inline::$3
Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const bool) bool_const_if::b#0 = true
Constant (const byte) bool_const_vars::a#0 = 14
Constant (const signed byte/signed word/signed dword) bool_const_vars::$5 = -8
Constant (const byte) bool_const_inline::a#0 = 23
Constant (const signed byte/signed word/signed dword) bool_const_inline::$1 = -8
Successful SSA optimization Pass2ConstantIdentification
Constant (const bool) bool_const_vars::$0 = bool_const_vars::a#0==15
Constant (const bool) bool_const_vars::$2 = 21>=bool_const_vars::a#0
Constant (const bool) bool_const_vars::$4 = bool_const_vars::a#0!=44
Constant (const bool) bool_const_vars::$6 = bool_const_vars::a#0>=bool_const_vars::$5
Constant (const bool) bool_const_inline::$0 = bool_const_inline::a#0!=44
Constant (const bool) bool_const_inline::$2 = bool_const_inline::a#0>=bool_const_inline::$1
Constant (const bool) bool_const_inline::$3 = bool_const_inline::a#0==15
Constant (const bool) bool_const_inline::$7 = 21>=bool_const_inline::a#0
Successful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(SCREEN#0+0)
Consolidated array index constant in *(SCREEN#0+0)
Consolidated array index constant in *(SCREEN#0+1)
Consolidated array index constant in *(SCREEN#0+1)
Consolidated array index constant in *(SCREEN#0+2)
Consolidated array index constant in *(SCREEN#0+2)
Successful SSA optimization Pass2ConstantAdditionElimination
if() condition always true - replacing block destination [4] if((const bool) bool_const_if::b#0) goto bool_const_if::@1
if() condition always false - eliminating [8] if((const bool) bool_const_vars::$0) goto bool_const_vars::@6
if() condition always true - replacing block destination [12] if((const bool) bool_const_inline::$0) goto bool_const_inline::@1
if() condition always false - eliminating [17] if(false) goto bool_const_vars::@1
if() condition always true - replacing block destination [18] if((const bool) bool_const_vars::$4) goto bool_const_vars::@5
if() condition always true - replacing block destination [19] if((const bool) bool_const_vars::$2) goto bool_const_vars::@6
if() condition always false - eliminating [20] if((const bool) bool_const_inline::$7) goto bool_const_inline::@1
if() condition always true - replacing block destination [21] if((const bool) bool_const_inline::$2) goto bool_const_inline::@7
if() condition always true - replacing block destination [22] if((const bool) bool_const_vars::$6) goto bool_const_vars::@5
if() condition always false - eliminating [23] if((const bool) bool_const_inline::$3) goto bool_const_inline::@1
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block bool_const_if::@3
Removing unused block bool_const_vars::@1
Removing unused block bool_const_inline::@3
Removing unused block bool_const_inline::@5
Removing unused block bool_const_inline::@6
Removing unused block bool_const_vars::@8
Removing unused block bool_const_inline::@7
Successful SSA optimization Pass2EliminateUnusedBlocks
Culled Empty Block (label) bool_const_vars::@5
Culled Empty Block (label) bool_const_vars::@6
Culled Empty Block (label) bool_const_vars::@7
Successful SSA optimization Pass2CullEmptyBlocks
Simplifying constant plus zero SCREEN#0+0
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @4
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of bool_const_inline
Adding NOP phi() at start of bool_const_vars
Adding NOP phi() at start of bool_const_if
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to bool_const_if:5 bool_const_vars:7 bool_const_inline:9 

Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @4
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of bool_const_inline
Adding NOP phi() at start of bool_const_vars
Adding NOP phi() at start of bool_const_if

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@4
@4: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @4
  [3] phi()
main: scope:[main]  from @4
  [4] phi()
  [5] call bool_const_if 
  to:main::@1
main::@1: scope:[main]  from main
  [6] phi()
  [7] call bool_const_vars 
  to:main::@2
main::@2: scope:[main]  from main::@1
  [8] phi()
  [9] call bool_const_inline 
  to:main::@return
main::@return: scope:[main]  from main::@2
  [10] return 
  to:@return
bool_const_inline: scope:[bool_const_inline]  from main::@2
  [11] phi()
  to:bool_const_inline::@1
bool_const_inline::@1: scope:[bool_const_inline]  from bool_const_inline
  [12] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 't'
  to:bool_const_inline::@return
bool_const_inline::@return: scope:[bool_const_inline]  from bool_const_inline::@1
  [13] return 
  to:@return
bool_const_vars: scope:[bool_const_vars]  from main::@1
  [14] phi()
  to:bool_const_vars::@3
bool_const_vars::@3: scope:[bool_const_vars]  from bool_const_vars
  [15] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'f'
  to:bool_const_vars::@return
bool_const_vars::@return: scope:[bool_const_vars]  from bool_const_vars::@3
  [16] return 
  to:@return
bool_const_if: scope:[bool_const_if]  from main
  [17] phi()
  to:bool_const_if::@1
bool_const_if::@1: scope:[bool_const_if]  from bool_const_if
  [18] *((const byte*) SCREEN#0) ← (byte) 't'
  to:bool_const_if::@return
bool_const_if::@return: scope:[bool_const_if]  from bool_const_if::@1
  [19] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) SCREEN
(void()) bool_const_if()
(bool) bool_const_if::b
(void()) bool_const_inline()
(byte) bool_const_inline::a
(void()) bool_const_vars()
(byte) bool_const_vars::a
(bool) bool_const_vars::b
(bool) bool_const_vars::b1
(bool) bool_const_vars::b2
(void()) main()

Initial phi equivalence classes
Complete equivalence classes

INITIAL ASM
//SEG0 File Comments
// A Minimal test of boolean constants.
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label SCREEN = $400
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @4 [phi:@begin->@4]
b4_from_bbegin:
  jmp b4
//SEG5 @4
b4:
//SEG6 [2] call main 
//SEG7 [4] phi from @4 to main [phi:@4->main]
main_from_b4:
  jsr main
//SEG8 [3] phi from @4 to @end [phi:@4->@end]
bend_from_b4:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call bool_const_if 
  //SEG12 [17] phi from main to bool_const_if [phi:main->bool_const_if]
  bool_const_if_from_main:
    jsr bool_const_if
  //SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    jmp b1
  //SEG14 main::@1
  b1:
  //SEG15 [7] call bool_const_vars 
  //SEG16 [14] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars]
  bool_const_vars_from_b1:
    jsr bool_const_vars
  //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
  //SEG18 main::@2
  b2:
  //SEG19 [9] call bool_const_inline 
  //SEG20 [11] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline]
  bool_const_inline_from_b2:
    jsr bool_const_inline
    jmp breturn
  //SEG21 main::@return
  breturn:
  //SEG22 [10] return 
    rts
}
//SEG23 bool_const_inline
// A constant boolean inside an if()
bool_const_inline: {
    jmp b1
  //SEG24 bool_const_inline::@1
  b1:
  //SEG25 [12] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 't' -- _deref_pbuc1=vbuc2 
    lda #'t'
    sta SCREEN+2
    jmp breturn
  //SEG26 bool_const_inline::@return
  breturn:
  //SEG27 [13] return 
    rts
}
//SEG28 bool_const_vars
// A bunch of constant boolean vars (used in an if)
bool_const_vars: {
    jmp b3
  //SEG29 bool_const_vars::@3
  b3:
  //SEG30 [15] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'f' -- _deref_pbuc1=vbuc2 
    lda #'f'
    sta SCREEN+1
    jmp breturn
  //SEG31 bool_const_vars::@return
  breturn:
  //SEG32 [16] return 
    rts
}
//SEG33 bool_const_if
// A constant boolean inside an if()
bool_const_if: {
    jmp b1
  //SEG34 bool_const_if::@1
  b1:
  //SEG35 [18] *((const byte*) SCREEN#0) ← (byte) 't' -- _deref_pbuc1=vbuc2 
    lda #'t'
    sta SCREEN
    jmp breturn
  //SEG36 bool_const_if::@return
  breturn:
  //SEG37 [19] return 
    rts
}

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [12] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 't' [ ] ( main:2::bool_const_inline:9 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'f' [ ] ( main:2::bool_const_vars:7 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) SCREEN#0) ← (byte) 't' [ ] ( main:2::bool_const_if:5 [ ] ) always clobbers reg byte a 

REGISTER UPLIFT SCOPES
Uplift Scope [main] 
Uplift Scope [bool_const_if] 
Uplift Scope [bool_const_vars] 
Uplift Scope [bool_const_inline] 
Uplift Scope [] 

Uplifting [main] best 180 combination 
Uplifting [bool_const_if] best 180 combination 
Uplifting [bool_const_vars] best 180 combination 
Uplifting [bool_const_inline] best 180 combination 
Uplifting [] best 180 combination 

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// A Minimal test of boolean constants.
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label SCREEN = $400
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @4 [phi:@begin->@4]
b4_from_bbegin:
  jmp b4
//SEG5 @4
b4:
//SEG6 [2] call main 
//SEG7 [4] phi from @4 to main [phi:@4->main]
main_from_b4:
  jsr main
//SEG8 [3] phi from @4 to @end [phi:@4->@end]
bend_from_b4:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call bool_const_if 
  //SEG12 [17] phi from main to bool_const_if [phi:main->bool_const_if]
  bool_const_if_from_main:
    jsr bool_const_if
  //SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    jmp b1
  //SEG14 main::@1
  b1:
  //SEG15 [7] call bool_const_vars 
  //SEG16 [14] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars]
  bool_const_vars_from_b1:
    jsr bool_const_vars
  //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
  //SEG18 main::@2
  b2:
  //SEG19 [9] call bool_const_inline 
  //SEG20 [11] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline]
  bool_const_inline_from_b2:
    jsr bool_const_inline
    jmp breturn
  //SEG21 main::@return
  breturn:
  //SEG22 [10] return 
    rts
}
//SEG23 bool_const_inline
// A constant boolean inside an if()
bool_const_inline: {
    jmp b1
  //SEG24 bool_const_inline::@1
  b1:
  //SEG25 [12] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 't' -- _deref_pbuc1=vbuc2 
    lda #'t'
    sta SCREEN+2
    jmp breturn
  //SEG26 bool_const_inline::@return
  breturn:
  //SEG27 [13] return 
    rts
}
//SEG28 bool_const_vars
// A bunch of constant boolean vars (used in an if)
bool_const_vars: {
    jmp b3
  //SEG29 bool_const_vars::@3
  b3:
  //SEG30 [15] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'f' -- _deref_pbuc1=vbuc2 
    lda #'f'
    sta SCREEN+1
    jmp breturn
  //SEG31 bool_const_vars::@return
  breturn:
  //SEG32 [16] return 
    rts
}
//SEG33 bool_const_if
// A constant boolean inside an if()
bool_const_if: {
    jmp b1
  //SEG34 bool_const_if::@1
  b1:
  //SEG35 [18] *((const byte*) SCREEN#0) ← (byte) 't' -- _deref_pbuc1=vbuc2 
    lda #'t'
    sta SCREEN
    jmp breturn
  //SEG36 bool_const_if::@return
  breturn:
  //SEG37 [19] return 
    rts
}

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b4
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction b4_from_bbegin:
Removing instruction b4:
Removing instruction main_from_b4:
Removing instruction bend_from_b4:
Removing instruction b1_from_main:
Removing instruction bool_const_vars_from_b1:
Removing instruction b2_from_b1:
Removing instruction bool_const_inline_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction bool_const_if_from_main:
Removing instruction b1:
Removing instruction b2:
Removing instruction breturn:
Removing instruction b1:
Removing instruction breturn:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b1:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @4
(label) @begin
(label) @end
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) bool_const_if()
(label) bool_const_if::@1
(label) bool_const_if::@return
(bool) bool_const_if::b
(void()) bool_const_inline()
(label) bool_const_inline::@1
(label) bool_const_inline::@return
(byte) bool_const_inline::a
(void()) bool_const_vars()
(label) bool_const_vars::@3
(label) bool_const_vars::@return
(byte) bool_const_vars::a
(bool) bool_const_vars::b
(bool) bool_const_vars::b1
(bool) bool_const_vars::b2
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return



FINAL ASSEMBLER
Score: 60

//SEG0 File Comments
// A Minimal test of boolean constants.
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label SCREEN = $400
//SEG3 @begin
//SEG4 [1] phi from @begin to @4 [phi:@begin->@4]
//SEG5 @4
//SEG6 [2] call main 
//SEG7 [4] phi from @4 to main [phi:@4->main]
//SEG8 [3] phi from @4 to @end [phi:@4->@end]
//SEG9 @end
//SEG10 main
main: {
  //SEG11 [5] call bool_const_if 
  //SEG12 [17] phi from main to bool_const_if [phi:main->bool_const_if]
    jsr bool_const_if
  //SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
  //SEG14 main::@1
  //SEG15 [7] call bool_const_vars 
  //SEG16 [14] phi from main::@1 to bool_const_vars [phi:main::@1->bool_const_vars]
    jsr bool_const_vars
  //SEG17 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  //SEG18 main::@2
  //SEG19 [9] call bool_const_inline 
  //SEG20 [11] phi from main::@2 to bool_const_inline [phi:main::@2->bool_const_inline]
    jsr bool_const_inline
  //SEG21 main::@return
  //SEG22 [10] return 
    rts
}
//SEG23 bool_const_inline
// A constant boolean inside an if()
bool_const_inline: {
  //SEG24 bool_const_inline::@1
  //SEG25 [12] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) 't' -- _deref_pbuc1=vbuc2 
    lda #'t'
    sta SCREEN+2
  //SEG26 bool_const_inline::@return
  //SEG27 [13] return 
    rts
}
//SEG28 bool_const_vars
// A bunch of constant boolean vars (used in an if)
bool_const_vars: {
  //SEG29 bool_const_vars::@3
  //SEG30 [15] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) 'f' -- _deref_pbuc1=vbuc2 
    lda #'f'
    sta SCREEN+1
  //SEG31 bool_const_vars::@return
  //SEG32 [16] return 
    rts
}
//SEG33 bool_const_if
// A constant boolean inside an if()
bool_const_if: {
  //SEG34 bool_const_if::@1
  //SEG35 [18] *((const byte*) SCREEN#0) ← (byte) 't' -- _deref_pbuc1=vbuc2 
    lda #'t'
    sta SCREEN
  //SEG36 bool_const_if::@return
  //SEG37 [19] return 
    rts
}

