# Pin: W65816StackSlotCleanup Pass 1c drops `CMPi16imm $a, 0` after an op # that already set N/Z from A, but only when the branch it feeds reads N or # Z. `cmp #0` also sets C (always 1), so before a BCC/BCS the CMP is the # carry's only source and has to stay. # # The pre-2026-09-28 i32 compare lowering emitted exactly this shape for the # high half of an unsigned compare against a 16-bit constant (`hi = 0x8000`, `x > 1`, `x < 0xFFFF` ... on a uint32_t took # the wrong branch whenever x had a non-zero high half. # # keep_bcc: CMP #0 before BCC stays. # keep_bcs: CMP #0 before BCS stays. # drop_beq: CMP #0 before BEQ still goes (the LDA's Z is the same). # # RUN: llc -mtriple=w65816 -run-pass=w65816-stack-slot-cleanup -o - %s | FileCheck %s --- | target triple = "w65816" define void @keep_bcc() { ret void } define void @keep_bcs() { ret void } define void @drop_beq() { ret void } ... --- # CHECK-LABEL: name: keep_bcc # CHECK: $a = LDAfi %stack.0, 0 # CHECK-NEXT: CMPi16imm killed $a, 0, implicit-def $p # CHECK-NEXT: BCC %bb.1, implicit $p name: keep_bcc tracksRegLiveness: false stack: - { id: 0, size: 2, alignment: 1 } body: | bb.0: successors: %bb.1, %bb.2 $a = LDAfi %stack.0, 0 CMPi16imm killed $a, 0, implicit-def $p BCC %bb.1, implicit $p BRA %bb.2 bb.1: RTL bb.2: RTL ... --- # CHECK-LABEL: name: keep_bcs # CHECK: $a = LDAfi %stack.0, 0 # CHECK-NEXT: CMPi16imm killed $a, 0, implicit-def $p # CHECK-NEXT: BCS %bb.1, implicit $p name: keep_bcs tracksRegLiveness: false stack: - { id: 0, size: 2, alignment: 1 } body: | bb.0: successors: %bb.1, %bb.2 $a = LDAfi %stack.0, 0 CMPi16imm killed $a, 0, implicit-def $p BCS %bb.1, implicit $p BRA %bb.2 bb.1: RTL bb.2: RTL ... --- # CHECK-LABEL: name: drop_beq # CHECK: $a = LDAfi %stack.0, 0 # CHECK-NOT: CMPi16imm # CHECK: BEQ %bb.1, implicit $p name: drop_beq tracksRegLiveness: false stack: - { id: 0, size: 2, alignment: 1 } body: | bb.0: successors: %bb.1, %bb.2 $a = LDAfi %stack.0, 0 CMPi16imm killed $a, 0, implicit-def $p BEQ %bb.1, implicit $p BRA %bb.2 bb.1: RTL bb.2: RTL ...