You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# [gfx1250] FlyDSL MoE heuristic-fallback kernel fails to lower: LLVM ERROR: Do not know how to expand this operator's operand! (raw.ptr.buffer.load.lds) #4987
On gfx1250 (MI455), running DeepSeek-V4 (fp8) through SGLang, aiter's fused_moe
finds no tuned FlyDSL config for the MoE shape and takes the heuristic FlyDSL
fallback. The FlyDSL compiler then emits llvm.amdgcn.raw.ptr.buffer.load.lds, which the
gfx1250 LLVM backend cannot lower, aborting the process during CUDA-graph capture:
LLVM ERROR: Do not know how to expand this operator's operand!
Fatal Python error: Aborted
FlyDSL is the performant MoE path we want to use on gfx1250, so we're asking for a real
fix rather than staying on the older workaround aiter (see "Workaround" below).
[aiter][fused_moe] no tuned FlyDSL config for
('gfx1250', 256, 256, 4096, 2048, 256, 6, <ActivationType.Silu>, 'torch.bfloat16',
'torch.float8_e4m3fn', 'torch.float4_e2m1fn_x2', 'QuantType.per_1x32', True, False),
using heuristic FlyDSL fallback
(kn1='flydsl_moe1_afp8_wfp4_bf16_t32x128x256_w2_gui',
kn2='flydsl_moe2_afp8_wfp4_bf16_t32x128x256_atomic_bnt2')
ExpandIntegerOperand Op #2: t197: ch = llvm.amdgcn.raw.ptr.buffer.load.lds<
(dereferenceable load (s128) from ..., addrspace 8),
(dereferenceable store (s4096) into ..., addrspace 3)> ...
LLVM ERROR: Do not know how to expand this operator's operand!
Fatal Python error: Aborted
flydsl/compiler/jit_function.py:772 _run_pipeline
flydsl/compiler/jit_function.py:924 compile
aiter/ops/flydsl/moe_kernels.py:996 _run_compiled
aiter/ops/flydsl/moe_kernels.py:1741 _flydsl_moe_stage1_impl
aiter/ops/flydsl/moe_kernels.py:1942 flydsl_moe_stage1
aiter/fused_moe.py:1451 _flydsl_stage1_wrapper
... (SGLang) ... decode_cuda_graph_runner capture ...
RuntimeError: Rank 0 scheduler died during initialization (exit code: -6)
Root-cause pointers (aiter source, fe4b72cd4)
aiter/fused_moe.py:2774-2775 — the "no tuned FlyDSL config → heuristic FlyDSL fallback"
branch in get_2stage_cfgs builds the fallback kernel names
(flydsl_moe1_afp8_wfp4_bf16_t32x128x256_w2_gui / flydsl_moe2_...).
aiter/fused_moe.py:1451_flydsl_stage1_wrapper → aiter/ops/flydsl/moe_kernels.py:1884 flydsl_moe_stage1 → :607 compile_flydsl_moe_stage1 → flydsl JIT compile → the emitted
IR contains llvm.amdgcn.raw.ptr.buffer.load.lds, which the gfx1250 backend can't expand.
On gfx1250 the MoE path is FlyDSL-only (fused_moe.py:799 gfx1250 branch), so there is no
non-FlyDSL fallback to route around it — the heuristic FlyDSL kernel is what runs.
Ask
Since FlyDSL is the intended high-performance MoE path on gfx1250, we'd like a real fix, in
rough order of preference:
Fix the FlyDSL codegen/lowering on gfx1250 so the heuristic-fallback MoE kernel does
not emit an un-lowerable raw.ptr.buffer.load.lds (or so the backend can lower it).
Ship a tuned FlyDSL config for gfx1250 for this dsv4 MoE shape
(256, 256, 4096, 2048, 256, 6, afp8/wfp4/bf16, per_1x32) so the heuristic fallback isn't
hit in the first place — if the tuned kernels use a codegen path that already lowers.
If neither is near-term, at least make the fallback fail gracefully / pick a lowerable
kernel on gfx1250 instead of aborting the whole scheduler.
Happy to test candidate fixes on our MI455 and report back.
Notes
Grep tip: the rocdl dialect prints the underscore form raw_ptr_buffer_load_lds, but
the LLVM lowering failure prints the dotted form raw.ptr.buffer.load.lds. Match raw[._]ptr[._]buffer[._]load[._]lds|Do not know how to expand this operator to catch both.
Workaround (not a fix): pinning aiter to d9e5ef7 (fix(gemm_a8w8_blockscale): prevent scale OOB and support Triton 3.6 #4406) runs dsv4 (gsm8k 0.925/0.930,
reproduced 2×) because that state doesn't route MoE through FlyDSL at all — but it forgoes
later enhancements and the FlyDSL perf path, which is why we're filing this rather than
staying on d9e5ef7.
Summary
On gfx1250 (MI455), running DeepSeek-V4 (fp8) through SGLang, aiter's
fused_moefinds no tuned FlyDSL config for the MoE shape and takes the heuristic FlyDSL
fallback. The FlyDSL compiler then emits
llvm.amdgcn.raw.ptr.buffer.load.lds, which thegfx1250 LLVM backend cannot lower, aborting the process during CUDA-graph capture:
FlyDSL is the performant MoE path we want to use on gfx1250, so we're asking for a real
fix rather than staying on the older workaround aiter (see "Workaround" below).
Environment
79491a58), imagehenryx/xsgl:v0.5.18-rocm7_14-mi455-20260823-pr32754-trial1aiter versions — crashes vs works:
mainfe4b72cd4(2026-08-23)481127f5(2026-08-19)73f5e114(#4955 "Force fp4gemm preshuffle to triton on gfx1250")d9e5ef7ce08ee7045d583aed768cff41aa9210fe(#4406, 2026-07-29)So the regression window is roughly
d9e5ef7(good, 2026-07-29) →481127f5/fe4b72cd4(bad).Repro
Inside the container, on a crashing aiter (e.g.
fe4b72cd4), launch dsv4:It aborts during decode CUDA-graph capture.
What happens (log + traceback)
Root-cause pointers (aiter source,
fe4b72cd4)aiter/fused_moe.py:2774-2775— the "no tuned FlyDSL config → heuristic FlyDSL fallback"branch in
get_2stage_cfgsbuilds the fallback kernel names(
flydsl_moe1_afp8_wfp4_bf16_t32x128x256_w2_gui/flydsl_moe2_...).aiter/fused_moe.py:1451_flydsl_stage1_wrapper→aiter/ops/flydsl/moe_kernels.py:1884 flydsl_moe_stage1→:607 compile_flydsl_moe_stage1→ flydsl JIT compile → the emittedIR contains
llvm.amdgcn.raw.ptr.buffer.load.lds, which the gfx1250 backend can't expand.fused_moe.py:799gfx1250 branch), so there is nonon-FlyDSL fallback to route around it — the heuristic FlyDSL kernel is what runs.
Ask
Since FlyDSL is the intended high-performance MoE path on gfx1250, we'd like a real fix, in
rough order of preference:
not emit an un-lowerable
raw.ptr.buffer.load.lds(or so the backend can lower it).(
256, 256, 4096, 2048, 256, 6, afp8/wfp4/bf16, per_1x32) so the heuristic fallback isn'thit in the first place — if the tuned kernels use a codegen path that already lowers.
kernel on gfx1250 instead of aborting the whole scheduler.
Happy to test candidate fixes on our MI455 and report back.
Notes
raw_ptr_buffer_load_lds, butthe LLVM lowering failure prints the dotted form
raw.ptr.buffer.load.lds. Matchraw[._]ptr[._]buffer[._]load[._]lds|Do not know how to expand this operatorto catch both.d9e5ef7(fix(gemm_a8w8_blockscale): prevent scale OOB and support Triton 3.6 #4406) runs dsv4 (gsm8k 0.925/0.930,reproduced 2×) because that state doesn't route MoE through FlyDSL at all — but it forgoes
later enhancements and the FlyDSL perf path, which is why we're filing this rather than
staying on d9e5ef7.