65816-llvm-mos/src/llvm/test/CodeGen/W65816/extract-wide32-regseq.ll
Scott Duensing 465f8ba947 Checkpoint
2026-05-05 22:00:34 -05:00

36 lines
1.1 KiB
LLVM

; Pin: extractWide32Lo/Hi looks through REG_SEQUENCE shortcut.
;
; Without the shortcut, `*p = 0` (or any i32 store of a constant or
; freshly-built i32 vreg) hits the SDAG combiner repeatedly, the
; combiner re-merges and Custom-lower re-splits, the cycle runs for
; tens of seconds and 100MB+ peak. See feedback_extract_wide32_regseq_shortcut.md.
;
; Two functions:
; - clear_i32: simplest *(i32*)p = 0 case (the original repro)
; - clear_i32_pair: two adjacent i32 zero-stores (combiner stress)
;
; If the shortcut regresses, llc either OOMs (process killed) or
; takes >5s on these tiny functions. We assert on the lowered shape.
;
; RUN: llc -mtriple=w65816 -O2 -verify-machineinstrs < %s | FileCheck %s
define void @clear_i32(ptr %p) {
; CHECK-LABEL: clear_i32:
; CHECK: sta [0xe0
; CHECK: sta [0xe0
; CHECK: rtl
store i32 0, ptr %p
ret void
}
define void @clear_i32_pair(ptr %p, ptr %q) {
; CHECK-LABEL: clear_i32_pair:
; CHECK: sta [0xe0
; CHECK: sta [0xe0
; CHECK: sta [0xe0
; CHECK: sta [0xe0
; CHECK: rtl
store i32 0, ptr %p
store i32 0, ptr %q
ret void
}